Sidebar

Zabbix Summit 2022
Register for Zabbix Summit 2022

14 ODBC 監視

概要

ODBC監視は、Zabbixフロントエンドの Database monitor item タイプに相当します。

ODBCはデータベース管理システム(DBMS)にアクセスするためのC言語のミドルウェアAPIです。
ODBCのコンセプトはMicrosoftによって開発され、その後他のプラットフォームにも移植されました。

ZabbixはODBCでサポートされている全てのデータベースに問い合わせをすることができます。
そのため、Zabbixはデータベースに直接接続せず、ODBCインターフェースとODBCで設定されたドライバを利用します。
この機能により、例えば、特定のデータベースキューや利用統計の確認など、複数の目的で異なるデータベースを
より効率的に監視することが可能です。
Zabbixは最も一般的に利用されているオープンソースのODBC API実装の1つであるunixODBCをサポートしています。

ODBCチェックについては、known issuesも参照してください。

unixODBC のインストール

unixODBC をインストールする推奨される方法は、Linux オペレーティングシステムのデフォルトパッケージリポジトリを
使用することです。最も人気のあるLinuxディストリビューションでは、unixODBCはデフォルトで
パッケージリポジトリに含まれています。
もし利用できない場合は、unixODBCのホームページで入手することができます。
http://www.unixodbc.org/download.html.

RedHat/Fedora ベースのシステムで yum パッケージマネージャを使用して unixODBC をインストールします。

shell> yum -y install unixODBC unixODBC-devel

SUSE ベースのシステムで zypper パッケージマネージャを使用して unixODBC をインストールします。

# zypper in unixODBC-devel

unixODBC-develパッケージは、unixODBCをサポートするZabbixをコンパイルするために必要です。

unixODBC ドライバのインストール

監視するデータベースには、unixODBCデータベースドライバをインストールする必要があります。
unixODBCには、サポートされているデータベースとドライバのリストがあります。
http://www.unixodbc.org/drivers.html
Linuxディストリビューションによっては、データベースドライバがパッケージリポジトリに含まれている場合があります。

RedHat/Fedora ベースのシステムで、yum パッケージマネージャを使用して MySQL データベースドライバをインストールする場合:

shell> yum install mysql-connector-odbc

SUSE ベースのシステムで、zypper パッケージマネージャを使用して MySQL データベースドライバをインストールする場合:

zypper で MyODBC-unixODBC

unixODBCの設定

ODBCの設定は、odbcinst.iniodbc.ini ファイルを編集することによって行われます。
設定ファイルの場所を確認するには、次のように入力します。

shell> odbcinst -j

odbcinst.ini は、インストールされている ODBC データベースドライバーの一覧を表示するために使用されます。

[mysql]
       Description = ODBC for MySQL
       Driver      = /usr/lib/libmyodbc5.so

パラメータの詳細:

属性 説明
mysql データベースドライバ名
Description データベースドライバーの説明
Driver データベースドライバーライブラリの場所

odbc.ini は、データソースの定義に使用されます:

[test]
       Description = MySQL test database
       Driver      = mysql
       Server      = 127.0.0.1
       User        = root
       Password    =
       Port        = 3306
       Database    = zabbix

パラメータの詳細:

属性 説明
test データ ソース名 (DSN)
Description データ ソースの説明。
Driver データベース ドライバー名 - odbcinst.ini で指定されているとおり
Server データベース サーバーの IP/DNS
User 接続用のデータベース ユーザー
Password データベース ユーザーパスワード
Port データベース接続ポート
Database データベース名

ODBC接続が正常に動作しているかどうかを確認するために、データベースへの接続をテストする必要があります。
これは isql ユーティリティ(unixODBC パッケージに含まれています)で行うことができます。

shell> isql test
       +---------------------------------------+
       | Connected!                            |
       |                                       |
       | sql-statement                         |
       | help [tablename]                      |
       | quit                                  |
       |                                       |
       +---------------------------------------+
       SQL>

ODBCサポート付きZabbixのコンパイル

ODBCサポートを有効にするには、以下のフラグを付けてZabbixをコンパイルする必要があります。

  --with-unixodbc[=ARG]   use odbc driver against unixODBC package

Zabbixのインストールについて詳しくは、source codeを参照してください。

Zabbixフロントエンドでの item 設定

データベース監視 item を設定します。

必須入力項目には、赤いアスタリスクが付けられています。

特にデータベース監視の項目について、入力する必要があります:

タイプ ここで データベースモニタ を選択
キー サポートされている 2 つのアイテム キーのいずれかを入力します:
db.odbc.select[<一意の短い説明>,<dsn>,<接続文字列>] - このアイテムはSQL クエリ結果の最初の行の最初の列、1つの値を返すように設計されています。クエリが複数の列を返す場合、最初の列のみが読み取られます。クエリが複数の行を返す場合、最初の行のみが読み取られます。
db.odbc.get[<一意の短い説明>,<dsn>,<接続文字列>] - この項目はJSON 形式で複数の行/列を返すことができます。したがって、1 回のシステム コールですべてのデータを収集するマスター アイテムとして使用できますが、JSONPath 前処理を依存アイテムで使用して個々の値を抽出できます。詳細については、ローレベルディスカバリで使用され、返される形式の を参照してください。この項目は Zabbix 4.4 以降でサポートされています。
一意の説明は、トリガーなどで項目を識別するのに役立ちます。
dsnconnection string はオプションのパラメータですが、少なくとも 1 つが存在する必要があります。データ ソース名 (DSN) と接続文字列の両方が定義されている場合、DSN は無視されます。
データ ソース名を使用する場合は、odbc.ini で指定されているとおりに設定する必要があります。
接続文字列には、ドライバー固有の引数が含まれる場合があります。

例(MySQL ODBC driver 5の接続):
=> db.odbc.get[MySQL example,,"Driver=/usr/local/lib/libmyodbc5a.so;Database=master;Server=127.0.0.1;Port=3306"]
ユーザー名 データベースのユーザー名を入力してください
odbc.ini でユーザーが指定されている場合、このパラメーターはオプションです。
接続文字列が使用され、ユーザー名 フィールドが空でない場合、UID=<user> として接続文字列に追加されます
パスワード データベース ユーザーのパスワードを入力してください
パスワードが odbc.ini で指定されている場合、このパラメータはオプションです。
接続文字列が使用され、Password フィールドが空でない場合、接続文字列に PWD=<password> として追加されます。
SQL クエリ SQL クエリを入力します。
db.odbc.select[] アイテムを使用すると、クエリは 1 つの値のみを返す必要があることに注意してください。
データ型 ここで正しく選択できるよう、クエリによって返される情報の種類を把握しておく必要があります。 データ型が間違っていると、アイテムはサポート対象外になります。

重要な注意事項

  • server または proxy 設定でodbc pollerプロセスが起動されていない場合、データベース監視項目はサポートされなくなります。 ODBCポーラーを起動するには、Zabbix server 設定ファイルで StartODBCPollersパラメータを設定するか、proxy で実行するチェックの場合はZabbix [proxy] (/manual/appendix/config/zabbix_proxy) 設定ファイルで StartODBCPollers パラメータを設定します。
  • Zabbixはクエリの実行時間を制限していません。妥当な時間で実行できるクエリを選択することはユーザにゆだねられています。
  • Zabbix server のTimeoutパラメータの値はODBCログインタイムアウトとして 使用されます(ODBCドライバによっては、ログインタイムアウト設定が無視される場合があることに注意してください)。
  • SQL コマンドは、select ... を使用した他のクエリと同様に結果セットを返す必要があります。 問い合わせの構文は、それを処理するRDBMSに依存します。ストレージプロシージャへのリクエストの構文は call キーワードで 開始する必要があります。

エラーメッセージ

ODBCのエラーメッセージは、詳細な情報を提供するためにフィールドに分かれて構成されています。
たとえば、以下のようなものです。

Cannot execute ODBC query: [SQL_ERROR]:[42601][7][ERROR: syntax error at or near ";"; Error while executing the query]
       └───────────┬───────────┘  └────┬────┘ └──┬──┘└┬┘└─────────────────────────────┬─────────────────────────────────────┘
                   │                   │         │    └─ Native error code            └─ Native error message
                   │                   │         └─ SQLState
                   └─ Zabbix message   └─ ODBC return code

エラーメッセージの長さは2048バイトに制限されているため、メッセージは切り捨てられる可能性があることに注意してください。
複数のODBC診断レコードがある場合、Zabbixはそれらを(|で区切って)制限された長さになるように連結しようと試みます。