Oracleのデータベースモニタ監視

Oracleのデータベースモニタ監視を実施しています。

以下のように、zabbixのアイテム画面を設定した。

【zabbixの追加パラメータ】
DSN=Oracle
user=take
password=toshi715
sql=select count(*) from user_tables;

しかし、以下のような、エラーが発生(【zabbix_server.log】)し、取得不可となった。
【zabbix_server.log】
2222:20110714:170006 Failed to connect to DSN 'Oracle' : Error: failed connection [[unixODBC][Driver Manager]Can't open lib '/usr/lib/oracle/xe/app/oracle/product/10.2.0/server/lib/l] (0)

その他の設定。
【odbcinst.ini】
[Oracle]
Description=Oracle Driver
Driver=/usr/lib/oracle/xe/app/oracle/product/10.2.0/server/lib/libsqora.so.10.1
Setup=/usr/lib/oracle/xe/app/oracle/product/10.2.0/server/lib/libsqora.so.10.1
FileUsage=1

【odbc.ini】
[Oracle]
Description=oracle database
Driver=Oracle
Database=XE
Servername=localhost
Port=1521

【OSのzabbixユーザーの環境変数】
ORACLE_HOME=/usr/lib/oracle/xe/app/oracle/product/10.2.0/server
LD_LIBRARY_PATH=/usr/lib/oracle/xe/app/oracle/product/10.2.0/server/lib:

【oracleのtnasnames.ora】
# tnsnames.ora Network Configuration File: C:\oracle\product\10.2.0\db_1\network\admin\tnsnames.ora
# Generated by Oracle configuration tools.

XE =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = XE)
)
)

○以下のように、zabbixユーザーでisql実施すると、接続できた。
OSユーザー「zabbix」 
-bash-3.2$ isql Oracle take toshi715
+---------------------------------------+
| Connected! |
| |
| sql-statement |
| help [tablename] |
| quit |
| |
+-----------

○ sqlplusでも接続は可能です。

○ 「libsqora.so.10.1」の読み取り権限もあります。

#cd /usr/lib/oracle/xe/app/oracle/product/10.2.0/server/lib
#ll libsqora.so.10.1

-r-xr-xr-x 1 oracle dba 594144 2月 20 2006 libsqora.so.10.1

○ isqlでは接続(ODBCを介して、接続している)しているにも関わらず、zabbixでは取得不可の状態です。どこか設定に誤りがあると思うのですが、ご教授していただけないでしょうか。

○ その他の条件
zabbix-serverが稼動しているサーバーのOS
⇒OS 「Asianux Server 3」
zabbix-serverのバージョン 1.6.9
監視したいOracleのノード
⇒OS  「Windows XP Proffesinal version 2002 SP3」
Oracleサーバー 「Oracle Database 10g express edition Release 10.2.0.1.0」

お忙しいところ、申し訳ありませんが、ご回答をよろしくお願いします。ご不明点がありましたら、ご投稿をお願いします。

コメント表示オプション

お好みのコメント表示方法を選び「設定の保存」をクリックすると変更が反映されます。
ユーザー kodai の写真

222:20110714:170006 Failed to connect to DSN 'Oracle' : Error: failed connection [[unixODBC][Driver Manager]Can't open lib '/usr/lib/oracle/xe/app/oracle/product/10.2.0/server/lib/l]

ライブラリがオープンできないというエラーが出ているようなので、パーミッションなどを確認されてみてはいかがでしょうか?

ユーザー takega の写真

連絡遅れまして、申し訳ありません。

以下を見ると、「libsqora.so.10.1」の読み取り権限はどのOSユーザーでも読み取り権限はあるようです。

#cd /usr/lib/oracle/xe/app/oracle/product/10.2.0/server/lib
#ll libsqora.so.10.1
-r-xr-xr-x 1 oracle dba 594144 2月 20 2006 libsqora.so.10.1

また、「isql」では接続はできている状態です。

ユーザー kodai の写真

その上のディレクトリのパーミッションは大丈夫でしょうか?

いちど一般ユーザで

ls /usr/lib/oracle/xe/app/oracle/product/10.2.0/server/lib/libsqora.so.10.1

と実行すると、ファイルの情報は表示されるでしょうか?

ユーザー takega の写真

OSのzabbixユーザーでファイルの情報は表示されます。

ユーザー takega の写真

A 一般ユーザーでもファイルの情報は表示されます。
[root@livecd etc]# su - take
[take@livecd ~]$ls /usr/lib/oracle/xe/app/oracle/product/10.2.0/server/lib/libsqora.so.10.1
/usr/lib/oracle/xe/app/oracle/product/10.2.0/server/lib/libsqora.so.10.1

B zabbixバージョン1.8.5でも実施しましたが、これでも同様の現象が発生しています。isqlでは接続可能で、ODBCドライバのファイル情報も表示されます。

【zabbix_server.log】
2222:20110714:170006 Failed to connect to DSN 'Oracle' : Error: failed connection [[unixODBC][Driver Manager]Can't open lib '/usr/lib/oracle/xe/app/oracle/product/10.2.0/server/lib/l] (0)

? rootユーザ

[root@livecd etc]# ls /usr/lib/oracle/xe/app/oracle/product/10.2.0/server/lib/libsqora.so.10.1
/usr/lib/oracle/xe/app/oracle/product/10.2.0/server/lib/libsqora.so.10.1
1

[root@livecd BK_20110729]# isql oracle take toshi715
+---------------------------------------+
| Connected! |
| |
| sql-statement |
| help [tablename] |
| quit |
| |
+---------------------------------------+

? oracleユーザ

[root@livecd etc]# su - oracle
[oracle@livecd ~]$ ls /usr/lib/oracle/xe/app/oracle/product/10.2.0/server/lib/libsqora.so.10.1
/usr/lib/oracle/xe/app/oracle/product/10.2.0/server/lib/libsqora.so.10.
SQL> quit
[root@livecd BK_20110729]# su - oracle
[oracle@livecd ~]$ isql oracle take toshi715
+---------------------------------------+
| Connected! |
| |
| sql-statement |
| help [tablename] |
| quit |
| |
+---------------------------------------+
SQL> quit

? zabbixユーザ

[root@livecd etc]# su - zabbix
-bash-3.2$ ls /usr/lib/oracle/xe/app/oracle/product/10.2.0/server/lib/libsqora.so.10.1
/usr/lib/oracle/xe/app/oracle/product/10.2.0/server/lib/libsqora.so.10.1

[root@livecd etc]# su - zabbix
su: warning: cannot change directory to /var/lib/zabbix: No such file or directory
-bash-3.2$ isql oracle take toshi715
+---------------------------------------+
| Connected! |
| |
| sql-statement |
| help [tablename] |
| quit |

ユーザー kodai の写真

改めてログを見直したところ、どうもライブラリへのパスの一部が失われているようですね。

2222:20110714:170006 Failed to connect to DSN 'Oracle' : Error: failed connection [[unixODBC][Driver Manager]Can't open lib '/usr/lib/oracle/xe/app/oracle/product/10.2.0/server/lib/l] (0)

まだソースは見ていませんが、パスの長さに対して変数の長さが足りていない可能性があります。根本的にはZabbixのバグだと思いますので、調べて本家に報告しておこうと思います。

とりあえずの対策として、パスの長さが短くなるようにシンボリックリンクを作成して、そちらのパスを利用するようにすればうまくいく可能性があると思います。

ユーザー takega の写真

ご返信ありがとうございました。

『以下のように、シンボリックリンクを作成』
[root@nsg-nagoya-zabbix etc]#cd /usr/lib
[root@nsg-nagoya-zabbix etc]#ln -s
/usr/lib/oracle/xe/app/oracle/product/10.2.0/server/lib/libsqora.so.10.1 libsqora.so

[root@nsg-nagoya-zabbix lib]# ll -F libsqora.so
lrwxrwxrwx 1 root root 72 8月 1 10:34 libsqora.so -> /usr/lib/oracle/xe/app/oracle/product/10.2.0/server/lib/libsqora.so.10.1*

『しかし、同様にドライバーが読めないエラーが発生。取得不可ととなった』

2205:20110801:123707 Item [ZABBIX Server:db.odbc.select[oracle_user]] error: failed connection [[unixODBC][Driver Manager]Can't open lib '/usr/lib/libsqora.so' : file not found] (0)

『同様に以下のユーザーで、読み取り(パーミッション)とisql接続確認を実施』

○ root
○ zabbix
○ oracle
○ take(一般ユーザー)

全てのユーザで、読み取りができた。isqlでの接続もできた。
[root@nsg-nagoya-zabbix lib]# ls /usr/lib/libsqora.so
/usr/lib/libsqora.so
[root@nsg-nagoya-zabbix lib]# isql Oracle take toshi715
+---------------------------------------+
| Connected! |
| |
| sql-statement |
| help [tablename] |
| quit |
| |
+---------------------------------------+
SQL>
[oracle@nsg-nagoya-zabbix ~]$ isql /usr/lib/libsqora.so
[ISQL]ERROR: Could not SQLConnect
[oracle@nsg-nagoya-zabbix ~]$ isql Oracle take toshi715
+---------------------------------------+
| Connected! |
| |
| sql-statement |
| help [tablename] |
| quit |
| |
+---------------------------------------+
SQL>

-bash-3.2$ ls /usr/lib/libsqora.so
/usr/lib/libsqora.so
-bash-3.2$ isql Oracle take toshi715
+---------------------------------------+
| Connected! |
| |
| sql-statement |
| help [tablename] |
| quit |
| |
+---------------------------------------+
SQL> quit

[take@nsg-nagoya-zabbix ~]$ ls /usr/lib/libsqora.so
/usr/lib/libsqora.so
[take@nsg-nagoya-zabbix ~]$ isql Oracle take toshi715
+---------------------------------------+
| Connected! |
| |
| sql-statement |
| help [tablename] |
| quit |
| |
+---------------------------------------+

○ 他に何か設定が不足しているのでしょうか。

ユーザー TNK の写真

sqlplusやisqlが利用できるようにしたときに設定された環境変数
の設定を、zabbix-serverの起動スクリプト内にも追加してみてく
ださい。

私の場合は、別途、Oracleのインスタントクライアントを利用した
のでパスや設定しなければならない環境変数が違うと思いますが、
以下の2行を追加してOracleから値を取得できることを確認できて
います。
<code>
export LD_LIBRARY_PATH=/usr/lib/oracle/10.2.0.3/client/lib/
export TNS_ADMIN=/etc/zabbix/
</code>
ちなみに、/etc/zabbixディレクトリ以下に、tnsnames.oraファイ
ルを配置しています。