ODBCを利用したOracle監視でエラー発生
ODBCを利用してのOracle監視を実装中に以下のエラーが発生し、監視が出来ていません。
[zabbix_server.log]
Failed to connect to DSN 'TEST' : Error: failed connection [[unixODBC][Driver Manager]Data source name not found, and no default driver specified] (0)
以下の設定と確認を行っておりますが解決に至っておらず、アドバイスを頂きたいです。
また監視テンプレート(データベースモニター)について追加パラメーターの設定方法についてガイドなどありますでしょうか。
[環境]
CentOS CentOS release 5.3 (Final)
Zabbix 1.8.15-1
[ODBC設定]
Oracle ODBC Driver 11.2
設定参照
http://otndnld.oracle.co.jp/tech/linux_win/pdf/ODBC%20for%20Linux.pdf
・/usr/local/etc/odbcinst.ini
Oracle ODBC Driver のライブラリを指定
[Oracle]
Description = Oracle Driver
Driver = /usr/lib/oracle/11.2/client/lib/libsqora.so.11.1
FileUsage = 1
Driver Logging = 7
・/usr/lib/oracle/11.2/client/.odbc.ini
.odbc.ini をoracle ユーザーのホームディレクトリ以下に配置し、odbcinst.ini で指定されるドライバを設定
[TEST]
Driver = Oracle
ServerName = TEST
・/usr/lib/oracle/11.2/client/network/admin/tsnnames.ora
TEST =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = XXXXXXXX)(PORT = 1521))
)
(CONNECT_DATA=
(SERVICE_NAME = TEST)
)
)
[テンプレート]
タイプ:データベースモニター
キー:db.odbc.select[TEST]
DSN=TEST
user=user
password=XXXXX
sql=select * from v$instance;
[確認をしている事項]
以下のURLは参照しており、zabbixユーザーでのisql接続、Driverへの権限付与、環境変数などは確認をしてあります。
http://www.zabbix.jp/node/1493
http://www.zabbix.jp/node/901
http://www.zabbix.jp/node/864
○zabbixユーザーでのisql接続は確認できております。
[zabbix@localhost /]$ isql TEST user password
+---------------------------------------+
| Connected! |
| |
| sql-statement |
| help [tablename] |
| quit |
| |
+---------------------------------------+
SQL>
○Driverの権限(一時的にフル権限を付与してあります。)
[zabbix@localhost bin]$ ls -l /usr/lib/oracle/11.2/client/lib/libsqora.so.11.1
-rwxrwxrwx 1 root root 781565 12月 13 11:26 /usr/lib/oracle/11.2/client/lib/libsqora.so.11.1
○Zabbixユーザーの環境変数
必要な環境変数は設定してある認識でzabbixユーザーでのisql接続は可能です。
LD_LIBRARY_PATH=/usr/lib/oracle/11.2/client/lib
ORACLE_HOME=/usr/lib/oracle/11.2/client
PATH=/usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:/etc/zabbix/bin
TNK - 投稿数: 4753
参照された先のURLにも書かれていますが、zabbix-serverの起動スクリプトの
先頭に環境変数の設定を入れてみて試されましたか?
hiroruto - 投稿数: 5
zabbix-serverの起動スクリプト(/etc/init.d/zabbix_server)の先頭に関係のありそうな環境変数を設定してみました。
実際に設定を行ったのは以下です。
export ORACLE_HOME=/usr/lib/oracle/11.2/client
export LD_LIBRARY_PATH=/usr/lib/oracle/11.2/client/lib
export ODBCINI=/usr/lib/oracle/11.2/client/.odbc.ini
export ODBCSYSINI=/usr/local/etc
結果としてはこれまで同様のエラーが出力され、変化はありませんでしたがdebugモードでのログを取得できましたので添付します。
ODBC connect に DNSとユーザー名が以下のように記載されていたのですが、これは正常でしょうか?
ODBC connect [TEST] [user]
監視テンプレート(データベースモニター)について追加パラメーターの設定方法に誤りがないか疑っております。
-------
6602:20130226:201949.072 In get_values()
6602:20130226:201949.072 In DCconfig_get_poller_items() poller_type:0
6602:20130226:201949.072 End of DCconfig_get_poller_items():1
6602:20130226:201949.072 In substitute_simple_macros() data:'db.odbc.select[Oracle CHK]'
6602:20130226:201949.072 In substitute_simple_macros() data:'DSN=TEST
6602:20130226:201949.072 In get_value() key:'db.odbc.select[Oracle CHK]'
6602:20130226:201949.072 In database monitor: db.odbc.select[Oracle CHK]
6602:20130226:201949.072 ODBC connect [TEST] [user]
6602:20130226:201949.088 Failed to connect to DSN 'TEST' : Error: failed connection [[unixODBC][Driver Manager]Data source name not found, and no default driver specified] (0)
6602:20130226:201949.088 Item [XXXXXXXXXXX:db.odbc.select[Oracle CHK]] error: failed connection [[unixODBC][Driver Manager]Data source name not found, and no default driver specified] (0)
6602:20130226:201949.088 In zabbix_log()
6602:20130226:201949.088 In DCconfig_get_items() hostid:0 key:'zabbix[log]'
6602:20130226:201949.088 End of DCconfig_get_items():0
6602:20130226:201949.088 End of zabbix_log()
6602:20130226:201949.088 End of get_value():NOTSUPPORTED
6602:20130226:201949.088 In activate_host() hostid:10054 itemid:22519 type:11
6602:20130226:201949.088 End of get_values()
6602:20130226:201949.088 poller #5 spent 0.016153 seconds while updating 1 values
6602:20130226:201949.088 In DCconfig_get_poller_nextcheck() poller_type:0
6602:20130226:201949.088 End of DCconfig_get_poller_nextcheck():1361877896
6602:20130226:201949.088 sleeping for 5 seconds
TNK - 投稿数: 4753
再度、自分でも環境を作成して確認してみました。
isqlでつながるのであれば、zabbix-serverの起動スクリプト内に
環境変数を適切に設定すればアクセスできることが確認できまし
た。
以下のURL
http://www.zabbix.jp/node/901
を参照されたとのことでしたが、そのURLで回答として書かせて頂
いているのは、環境変数として「LD_LIBRARY_PATH」「TNS_ADMIN」
を設定するという内容であったかと思います。
今回設定された環境変数に「TNS_ADMIN」が記載されていませんが、
試して頂けましたでしょうか?
tsnnames.oraではなくtnsnames.oraがあるディレクトリをTNS_ADMIN
に設定してみてください。
あと、マルチバイト文字が結果に含まれるのであれば、NLS_LANGの
設定も追加するとよいと思います。
例:
-----
export LD_LIBRARY_PATH=/usr/lib/oracle/11.2/client/lib/
export TNS_ADMIN=/usr/lib/oracle/11.2/client/network/admin/
export NLS_LANG=Japanese_Japan.UTF8
hiroruto - 投稿数: 5
ご確認大変ありがとうございます。
zabbix-serverの起動スクリプト(/etc/init.d/zabbix_server)に以下を追加してみました。
export TNS_ADMIN=/usr/lib/oracle/11.2/client/network/admin/
export NLS_LANG=Japanese_Japan.UTF8
これまでのエラーは出なくなったのですが、代わりに以下のundefined symbolのエラーが出力され、zabbix-serverが停止してしまいました。
zabbix_server: symbol lookup error: /usr/lib/oracle/11.2/client/lib/libsqora.so.11.1: undefined symbol: SQLGetPrivateProfileStringW
詳細なログを以下添付させて頂きます。
libraryへのsymbol lookup errort ということで参照不可などを疑ったのですが、zabbixユーザーでは参照可能でした。
[zabbix@localhost ~]$ ls -l /usr/lib/oracle/11.2/client/lib/libsqora.so.11.1
-rwxrwxrwx 1 root root 781565 12月 13 11:26 /usr/lib/oracle/11.2/client/lib/libsqora.so.11.1
これまでこのようなエラーが発生したことはありますでしょうか?何か解決の手がかりになるものがあればと思います。
---
3757:20130305:200719.170 In get_values()
3757:20130305:200719.170 In DCconfig_get_poller_items() poller_type:0
3757:20130305:200719.170 End of DCconfig_get_poller_items():1
3757:20130305:200719.170 In substitute_simple_macros() data:'db.odbc.select[Oracle CHK]'
3757:20130305:200719.170 In substitute_simple_macros() data:'DSN=TEST
user=user
password=XXXXXX
sql=select count(*) from V$SESSIONS;'
3757:20130305:200719.170 In get_value() key:'db.odbc.select[Oracle CHK]'
3757:20130305:200719.170 In database monitor: db.odbc.select[Oracle CHK]
3757:20130305:200719.170 ODBC connect [TEST] [user]
3793:20130305:200719.187 In collect_selfmon_stats()
3793:20130305:200719.187 End of collect_selfmon_stats()
3793:20130305:200719.187 sleeping for 1 seconds
zabbix_server: symbol lookup error: /usr/lib/oracle/11.2/client/lib/libsqora.so.11.1: undefined symbol: SQLGetPrivateProfileStringW
3746:20130305:200719.212 One child process died (PID:3757,exitcode/signal:127). Exiting ...
3746:20130305:200719.212 zbx_on_exit() called 3750:20130305:200719.212 Got signal [signal:15(SIGTERM),sender_pid:3746,sender_uid:3031,reason:0]. Exiting ...
3749:20130305:200719.212 Got signal [signal:15(SIGTERM),sender_pid:3746,sender_uid:3031,reason:0]. Exiting ...
3752:20130305:200719.214 Got signal [signal:15(SIGTERM),sender_pid:3746,sender_uid:3031,reason:0]. Exiting ...
3755:20130305:200719.215 Got signal [signal:15(SIGTERM),sender_pid:3746,sender_uid:3031,reason:0]. Exiting ...
3754:20130305:200719.215 Got signal [signal:15(SIGTERM),sender_pid:3746,sender_uid:3031,reason:0]. Exiting ...
3756:20130305:200719.216 Got signal [signal:15(SIGTERM),sender_pid:3746,sender_uid:3031,reason:0]. Exiting ...
3758:20130305:200719.217 Got signal [signal:15(SIGTERM),sender_pid:3746,sender_uid:3031,reason:0]. Exiting ...
3759:20130305:200719.218 Got signal [signal:15(SIGTERM),sender_pid:3746,sender_uid:3031,reason:0]. Exiting ...
3765:20130305:200719.220 Got signal [signal:15(SIGTERM),sender_pid:3746,sender_uid:3031,reason:0]. Exiting ...
3767:20130305:200719.220 Got signal [signal:15(SIGTERM),sender_pid:3746,sender_uid:3031,reason:0]. Exiting ...
3761:20130305:200719.220 Got signal [signal:15(SIGTERM),sender_pid:3746,sender_uid:3031,reason:0]. Exiting ...
3769:20130305:200719.222 Got signal [signal:15(SIGTERM),sender_pid:3746,sender_uid:3031,reason:0]. Exiting ...
3763:20130305:200719.223 Got signal [signal:15(SIGTERM),sender_pid:3746,sender_uid:3031,reason:0]. Exiting ...
3771:20130305:200719.224 Got signal [signal:15(SIGTERM),sender_pid:3746,sender_uid:3031,reason:0]. Exiting ...
3776:20130305:200719.224 Got signal [signal:15(SIGTERM),sender_pid:3746,sender_uid:3031,reason:0]. Exiting ...
3775:20130305:200719.226 Got signal [signal:15(SIGTERM),sender_pid:3746,sender_uid:3031,reason:0]. Exiting ...
3773:20130305:200719.224 Got signal [signal:15(SIGTERM),sender_pid:3746,sender_uid:3031,reason:0]. Exiting ...
3777:20130305:200719.227 Got signal [signal:15(SIGTERM),sender_pid:3746,sender_uid:3031,reason:0]. Exiting ...
3783:20130305:200719.229 Got signal [signal:15(SIGTERM),sender_pid:3746,sender_uid:3031,reason:0]. Exiting ...
3778:20130305:200719.229 Got signal [signal:15(SIGTERM),sender_pid:3746,sender_uid:3031,reason:0]. Exiting ...
3785:20130305:200719.230 Got signal [signal:15(SIGTERM),sender_pid:3746,sender_uid:3031,reason:0]. Exiting ...
3789:20130305:200719.231 Got signal [signal:15(SIGTERM),sender_pid:3746,sender_uid:3031,reason:0]. Exiting ...
3787:20130305:200719.230 Got signal [signal:15(SIGTERM),sender_pid:3746,sender_uid:3031,reason:0]. Exiting ...
3793:20130305:200719.233 Got signal [signal:15(SIGTERM),sender_pid:3746,sender_uid:3031,reason:0]. Exiting ...
3791:20130305:200719.234 Got signal [signal:15(SIGTERM),sender_pid:3746,sender_uid:3031,reason:0]. Exiting ...
3746:20130305:200721.235 In DBconnect() flag:1
3746:20130305:200721.235 query [txnlev:0] [SET NAMES utf8]
3746:20130305:200721.235 End of DBconnect():0
3746:20130305:200721.236 In free_database_cache()
3746:20130305:200721.236 In DCsync_all()
3746:20130305:200721.236 In DCsync_history() history_first:10 history_num:0
3746:20130305:200721.236 syncing history data...
3746:20130305:200721.236 syncing history data done
3746:20130305:200721.236 In DCsync_trends() trends_num:0
3746:20130305:200721.236 syncing trends data...
3746:20130305:200721.236 query [txnlev:1] [begin;]
3746:20130305:200721.236 In DCflush_trends() trends_num:5
3746:20130305:200721.236 query [txnlev:1] [select distinct itemid from trends_uint where clock>=1362481200 and itemid in (22164,22166)]
3746:20130305:200721.236 query [txnlev:1] [select itemid,num,value_min,value_avg,value_max from trends_uint where clock=1362481200 and itemid in (22164,22166)]
3746:20130305:200721.237 query [txnlev:1] [update trends_uint set num=4,value_min=200,value_avg=200,value_max=200 where itemid=22164 and clock=1362481200;
update trends_uint set num=4,value_min=0,value_avg=0,value_max=0 where itemid=22166 and clock=1362481200;
]
3746:20130305:200721.237 End of DCflush_trends()
3746:20130305:200721.237 In DCflush_trends() trends_num:3
3746:20130305:200721.238 query [txnlev:1] [select distinct itemid from trends where clock>=1362481200 and itemid in (22162,22163,22165)]
3746:20130305:200721.238 query [txnlev:1] [select itemid,num,value_min,value_avg,value_max from trends where clock=1362481200 and itemid in (22162,22163,22165)]
3746:20130305:200721.239 query [txnlev:1] [update trends set num=4,value_min=17018.000000,value_avg=24598.250000,value_max=31886.000000 where itemid=22162 and clock=1362481200;
update trends set num=4,value_min=0.214321,value_avg=0.301084,value_max=0.401600 where itemid=22163 and clock=1362481200;
update trends set num=4,value_min=17018.000000,value_avg=24598.250000,value_max=31886.000000 where itemid=22165 and clock=1362481200;
]
3746:20130305:200721.239 End of DCflush_trends()
3746:20130305:200721.239 query [txnlev:1] [commit;]
3746:20130305:200721.239 syncing trends data done
3746:20130305:200721.239 End of DCsync_trends()
3746:20130305:200721.240 End of DCsync_all()
3746:20130305:200721.240 In zbx_mem_destroy() descr:'history cache'
3746:20130305:200721.240 End of zbx_mem_destroy()
3746:20130305:200721.240 In zbx_mem_destroy() descr:'history text cache'
3746:20130305:200721.240 End of zbx_mem_destroy()
3746:20130305:200721.240 In zbx_mem_destroy() descr:'trend cache'
3746:20130305:200721.240 End of zbx_mem_destroy()
3746:20130305:200721.240 End of free_database_cache()
3746:20130305:200721.240 In free_configuration_cache()
3746:20130305:200721.240 In zbx_mem_destroy() descr:'configuration cache'
3746:20130305:200721.240 End of zbx_mem_destroy()
3746:20130305:200721.240 In zbx_strpool_destroy()
3746:20130305:200721.240 In zbx_mem_destroy() descr:'string pool'
3746:20130305:200721.240 End of zbx_mem_destroy()
3746:20130305:200721.240 End of zbx_strpool_destroy()
3746:20130305:200721.240 End of free_configuration_cache()
3746:20130305:200721.240 In free_ipmi_handler()
3746:20130305:200721.240 End of free_ipmi_handler()
3746:20130305:200721.240 In free_selfmon_collector() collector:0xb5baf000
3746:20130305:200721.240 End of free_selfmon_collector()
3746:20130305:200721.240 Zabbix Server stopped. Zabbix 1.8.15 (revision 29655)
TNK - 投稿数: 4753
改めて明記して頂けていないので、一応確認させて頂きたいのですが、
LD_LIBRARY_PATHは設定されているのですよね?
hiroruto - 投稿数: 5
明記しておらずすみません。
LD_LIBRARY_PATHは設定しており、追加でTNS_ADMINなどを設定していました。
export ORACLE_HOME=/usr/lib/oracle/11.2/client
export TNS_ADMIN=/usr/lib/oracle/11.2/client/network/admin/
export NLS_export NLS_LANG=Japanese_Japan.UTF8
export LD_LIBRARY_PATH=/usr/lib/oracle/11.2/client/lib
export ODBCINI=/usr/lib/oracle/11.2/client/.odbc.ini
export ODBCSYSINI=/usr/local/etc
その他、LD_PRELOADを設定をためしたのですが、状況変わりませんでした。
TNK - 投稿数: 4753
undefined symbol: SQLGetPrivateProfileStringWがでる環境で、本当に
isqlを利用したOracleへのアクセスができているのでしょうか?
CentOS 5の環境を再度作成しなおして確認してみましたが、isqlでも
エラーがでて接続できませんでした。
調べてみると、CentOS 5.xのunixODBC 2.2.11とOracleのInstant Client 11.2
の組み合わせで問題があるようです。
https://bugzilla.redhat.com/show_bug.cgi?id=475615
unixODBCの2.2.12で改善されたようですが、CentOS 5用としては、
標準では2.2.11までしかリリースされていないようです。
つまり、標準のパッケージで構成した環境では、OracleのInstant Client
を利用してODBCで接続することはできなさそうです。
TNK - 投稿数: 4753
私の環境では、試しにunixODBC 2.2.14のRPMを作成し、unixODBC、
unixODBC-libsをアップデートすることで改善することを確認できました。
hiroruto - 投稿数: 5
情報ありがとうございます。
unixODBC 2.2.14 を導入することでODBC監視が可能になりました。大変助かりました。
isqlでの接続ですが、binaryファイルとして二種類導入されておりその片方では接続が出来ていませんでした。
おそらくこれまでは後者のファイルを読み込んでいたのだと思われます。
[正常]
/usr/local/bin/isql
[zabbix@localhost ~]$ which isql
/usr/local/bin/isql
[zabbix@localhost /]$ isql TEST user password
+---------------------------------------+
| Connected! |
| |
| sql-statement |
| help [tablename] |
| quit |
| |
+---------------------------------------+
SQL>
[異常]
/usr/bin/isql
undefined symbol: SQLGetPrivateProfileStringW のエラーが出力される。