【Zabbix4】Oracle監視(データベースモニター) | 夕湖津のブログ

夕湖津のブログ

問題解決に役立つ情報の提供を目指します

■ODBCによるZabbix4でのOracle監視設定方法

 

1.Oracle Instant Clientインストール
----------------------------------------------------
https://www.oracle.com/technetwork/topics/linuxx86-64soft-092277.html
から以下をダウンロード

oracle-instantclient12.1-basic-12.1.0.2.0-1.x86_64.rpm
oracle-instantclient12.1-odbc-12.1.0.2.0-1.x86_64.rpm

※oracle-instantclient12.1-odbc-12.1.0.2.0-1.x86_64.rpmのインストールには、
 oracle-instantclient12.1-basic-12.1.0.2.0-1.x86_64.rpmが必要

# cd /usr/local/src
# ls oracle*
oracle-instantclient12.1-basic-12.1.0.2.0-1.x86_64.rpm
oracle-instantclient12.1-odbc-12.1.0.2.0-1.x86_64.rpm

# rpm -ivh oracle-instantclient12.1-basic-12.1.0.2.0-1.x86_64.rpm
準備しています...              ################################# [100%]
更新中 / インストール中...
   1:oracle-instantclient12.1-basic-12################################# [100%]

# rpm -ivh oracle-instantclient12.1-odbc-12.1.0.2.0-1.x86_64.rpm
準備しています...              ################################# [100%]
更新中 / インストール中...
   1:oracle-instantclient12.1-odbc-12.################################# [100%]

※ディレクトリ構造は下記
/usr/lib/oracle/
`-- 12.1
    `-- client64
        |-- bin
        |   |-- adrci
        |   `-- genezi
        `-- lib
            |-- libclntsh.so.12.1
            |-- libclntshcore.so.12.1
            |-- libipc1.so
            |-- libmql1.so
            |-- libnnz12.so
            |-- libocci.so.12.1
            |-- libociei.so
            |-- libocijdbc12.so
            |-- libons.so
            |-- liboramysql12.so
            |-- libsqora.so.12.1 ★これがODBCドライバ
            |-- ojdbc6.jar
            |-- ojdbc7.jar
            `-- xstreams.jar

/usr/share/oracle/
`-- 12.1
    `-- client64
        |-- ODBC_IC_Readme_Unix.html
        `-- odbc_update_ini.sh
----------------------------------------------------

2.共有ライブラリ検索パスに、/usr/lib/oracle/12.1/client64/libを登録
----------------------------------------------------
# cat /etc/ld.so.conf
include ld.so.conf.d/*.conf

よって、/etc/ld.so.conf.d 配下に「oracle.conf」を作成

# vi /etc/ld.so.conf.d/oracle.conf
# cat /etc/ld.so.conf.d/oracle.conf
/usr/lib/oracle/12.1/client64/lib

# ldconfig
# ldconfig -v

/usr/lib/oracle/12.1/client64/lib:
        libsqora.so.12.1 -> libsqora.so.12.1
        liboramysql12.so -> liboramysql12.so
        libons.so -> libons.so
        libocijdbc12.so -> libocijdbc12.so
        libociei.so -> libociei.so
        libocci.so.12.1 -> libocci.so.12.1
        libnnz12.so -> libnnz12.so
        libmql1.so -> libmql1.so
        libipc1.so -> libipc1.so
        libclntshcore.so.12.1 -> libclntshcore.so.12.1
        libclntsh.so.12.1 -> libclntsh.so.12.1



※OracleのODBCについては下記に詳しい
https://docs.oracle.com/cd/E57425_01/121/ADFNS/adfns_odbc.htm

アプリ<--->unixODBCドライバマネージャ(※1)<--->ODBCドライバ(※2)<--->OCIクライアント<--->リスナー

(※1)/usr/lib64/libodbc.so         
(※2)/usr/lib/oracle/12.1/client64/lib/libsqora.so.12.1
----------------------------------------------------

3.ODBC接続のためのtnsnames.oraの作成
----------------------------------------------------
# cd /usr/lib/oracle/12.1/client64
# mkdir -p network/admin ←ディレクトリは任意
# vi network/admin/tnsnames.ora
# cat network/admin/tnsnames.ora
oracle12c =
 ( DESCRIPTION =
    ( ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.203.94)(PORT = 1521) )
    ( CONNECT_DATA = (SERVER = DEDICATED)(SERVICE_NAME = orcl) )

※tnsnames.oraでは、接続識別子(ここではoracle12c)以外の行先頭はスペースで必ず空ける
----------------------------------------------------

4.ODBC接続設定(本題)
※前提:zabbixユーザ情報は下記
# grep zabbix /etc/passwd
zabbix:x:987:981:Zabbix Monitoring System:/var/lib/zabbix:/sbin/nologin
----------------------------------------------------
(1)ODBC関連設定確認
# su -s /bin/sh - zabbix -c "odbcinst -j"
su: warning: cannot change directory to /var/lib/zabbix: そのようなファイルやディレクトリはありません
unixODBC 2.3.1
DRIVERS............: /etc/odbcinst.ini
SYSTEM DATA SOURCES: /etc/odbc.ini
FILE DATA SOURCES..: /etc/ODBCDataSources
USER DATA SOURCES..: /var/lib/zabbix/.odbc.ini
SQLULEN Size.......: 8
SQLLEN Size........: 8
SQLSETPOSIROW Size.: 8


(2)/etc/odbcinst.ini(ドライバマネージャーにドライバを教えてあげる)
# vi /etc/odbcinst.ini
下記を追記
[Oracle]
Description     = ODBC for Oracle
Driver          = /usr/lib/oracle/12.1/client64/lib/libsqora.so.12.1

(3)/var/lib/zabbix/.odbc.ini(ODBCドライバのデータソース = データ取得先)
# mkdir /var/lib/zabbix
# ls -ld /var/lib/zabbix
drwxr-xr-x 2 root root 6  7月 19 04:32 /var/lib/zabbix

# vi /var/lib/zabbix/.odbc.ini
# chown zabbix /var/lib/zabbix/.odbc.ini
# cat /var/lib/zabbix/.odbc.ini
[DSNoracle12c]
Driver = Oracle ←/etc/odbcinst.iniに書いた[Oracle]のこと
ServerName = oracle12c ←tnsnames.oraに書いた接続識別子

(4)接続確認
# su -s /bin/sh - zabbix -c "export TNS_ADMIN=/usr/lib/oracle/12.1/client64/network/admin; isql -v DSNoracle12c scott tiger"
+---------------------------------------+
| Connected!                            |
|                                       |
| sql-statement                         |
| help [tablename]                      |
| quit                                  |
|                                       |
+---------------------------------------+
SQL>
接続成功
SQL> quit

※「SQL> exit」だと「[ISQL]ERROR: Could not SQLExecute」になる

★上記の接続構図は以下の通り(/var/lib/zabbix/.odbc.ini→/etc/odbcinst.iniの順)
isqlで「DSNoracle12c」指定
⇒/var/lib/zabbix/.odbc.iniから「DSNoracle12c」を探してODBCドライバエントリ名が「Oracle」と知る
 同時に接続識別子が「oracle12c」であることを知る
⇒ODBCドライバエントリ「Oracle」を/etc/odbcinst.iniから探して、
 ドライバが「/usr/lib/oracle/12.1/client64/lib/libsqora.so.12.1」であることを知る


(5)zabbix-serverに対してODBC接続設定(★ここにたどり着くまで大変でした…)
※zabbix_serverプロセスの所有者がzabbixユーザのため

まずは、zabbix-server.serviceの設定ファイルを確認
# systemctl status zabbix-server
● zabbix-server.service - Zabbix Server
   Loaded: loaded (/usr/lib/systemd/system/zabbix-server.service; enabled; vendor preset: disabled)


⇒「/usr/lib/systemd/system/zabbix-server.service」と分かったので、環境設定ファイルの場所を確認

# grep -i environmentfile /usr/lib/systemd/system/zabbix-server.service
EnvironmentFile=-/etc/sysconfig/zabbix-server

⇒「/etc/sysconfig/zabbix-server」と分かったので、このファイルに環境変数を記載
 (デフォルトでは、このファイルは存在しないので、新規作成)

# vi /etc/sysconfig/zabbix-server

# cat /etc/sysconfig/zabbix-server
TNS_ADMIN=/usr/lib/oracle/12.1/client64/network/admin
LD_LIBRARY_PATH=/usr/lib/oracle/12.1/client64/lib

zabbix-server再起動
# systemctl restart zabbix-server

zabbix-serverの環境変数を確認するため、プロセスID確認(ここでは10429)
# ps -ef | grep zabbix_server | grep zabbix_server.conf | grep -v grep
zabbix   10429     1  0 05:02 ?        00:00:00 /usr/sbin/zabbix_server -c /etc/zabbix/zabbix_server.conf

zabbix-serverの環境変数を確認
# strings /proc/10429/environ
LANG=ja_JP.UTF-8
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin
CONFFILE=/etc/zabbix/zabbix_server.conf
TNS_ADMIN=/usr/lib/oracle/12.1/client64/network/admin
LD_LIBRARY_PATH=/usr/lib/oracle/12.1/client64/lib
----------------------------------------------------

5.Zabbixでデータベースモニター作成
----------------------------------------------------
下記キャプチャ参照
----------------------------------------------------