14 ODBC 監視
概要
ODBC監視は、ZabbixのWebインターフェースにおけるデータベースモニタアイテムタイプに対応します。
ODBCは、データベース管理システム(DBMS)にアクセスするためのCプログラミング言語のミドルウェアAPIです。
ODBCの概念はMicrosoftによって開発され、その後ほかのプラットフォームにも移植されました。
Zabbixは、ODBCでサポートされている任意のデータベースに対してクエリを実行できます。
これを行うために、Zabbixはデータベースへ直接接続するのではなく、ODBCで設定されたODBCインターフェースとドライバーを使用します。
これにより、さまざまな目的(たとえば、特定のデータベースキュー、使用統計などの確認)のために、異なるデータベースをより効率的に監視できます。
Zabbixは、最も一般的に使用されているオープンソースのODBC API実装の1つであるunixODBCをサポートしています。
ODBCチェックについては、既知の問題も参照してください。
unixODBCのインストール
unixODBCをインストールする推奨方法は、Linuxオペレーティングシステムのデフォルトのパッケージリポジトリを使用することです。 主要なLinuxディストリビューションの多くでは、unixODBCはデフォルトでパッケージリポジトリに含まれています。 パッケージが利用できない場合は、unixODBCのホームページからソースファイルを入手できます: http://www.unixodbc.org/download.html。
unixODBCをインストールするには、使用するシステムに応じたパッケージマネージャーを使用します。
# Ubuntu/Debianシステムの場合:
apt install unixodbc unixodbc-dev
# RedHat/Fedoraベースのシステムの場合:
dnf install unixODBC unixODBC-devel
# SUSEベースのシステムの場合:
zypper in unixODBC-devel
unixodbc-dev または unixODBC-devel パッケージは、unixODBCサポート付きでZabbixをコンパイルするために必要です。
ODBCサポートを有効にするには、Zabbixを次の設定オプションでコンパイルする必要があります。
--with-unixodbc[=ARG] # unixODBCパッケージに対してODBCドライバーを使用します。
unixODBCドライバーのインストール
監視対象のデータベースに対応するunixODBCデータベースドライバーをインストールする必要があります。
サポートされているデータベースとドライバーの一覧については、unixODBCのホームページを参照してください: http://www.unixodbc.org/drivers.html。
一部のLinuxディストリビューションでは、データベースドライバーがパッケージリポジトリに含まれています。
MySQL
MySQL unixODBC データベースドライバーをインストールするには、お使いのシステムのパッケージマネージャーを使用してください。
# Ubuntu/Debian システムの場合:
apt install odbc-mariadb
# RedHat/Fedora ベースのシステムの場合:
dnf install mariadb-connector-odbc
# SUSE ベースのシステムの場合:
zypper install mariadb-connector-odbc
パッケージマネージャーを使用せずにデータベースドライバーをインストールするには、MySQL ドキュメント の mysql-connector-odbc または MariaDB ドキュメント の mariadb-connector-odbc を参照してください。
PostgreSQL
PostgreSQL unixODBC データベースドライバーをインストールするには、お使いのシステムのパッケージマネージャーを使用してください。
# Ubuntu/Debian システムの場合:
apt install odbc-postgresql
# RedHat/Fedora ベースのシステムの場合:
dnf install postgresql-odbc
# SUSE ベースのシステムの場合:
zypper install psqlODBC
パッケージマネージャーを使用せずにデータベースドライバーをインストールするには、PostgreSQL ドキュメント を参照してください。
Oracle
unixODBC データベースドライバーをインストールするには、Oracle のドキュメント を参照してください。
MSSQL
MSSQL unixODBCデータベースドライバーをインストールするには、使用しているシステムに応じたパッケージマネージャーを使用してください。
# Ubuntu/Debianシステムの場合:
apt install tdsodbc
# RedHat/Fedoraベースのシステムの場合 (EPELパッケージ: https://docs.fedoraproject.org/en-US/epel/):
dnf install epel-release
dnf install freetds
# SUSEベースのシステムの場合:
zypper install libtdsodbc0
パッケージマネージャーを使用せずにデータベースドライバーをインストールする場合は、FreeTDS user guideを参照してください。
unixODBCの設定
unixODBCを設定するには、odbcinst.ini ファイルと odbc.ini ファイルを編集する必要があります。
これらのファイルの場所は、次のコマンドを実行して確認できます。
odbcinst -j
コマンドの実行結果には、次のような情報が含まれているはずです。
unixODBC 2.3.9
DRIVERS............: /etc/odbcinst.ini
SYSTEM DATA SOURCES: /etc/odbc.ini
FILE DATA SOURCES..: /etc/ODBCDataSources
odbcinst.ini
odbcinst.ini ファイルには、インストールされている ODBC データベースドライバーがリストされます。
odbcinst.ini が見つからない場合は、手動で作成する必要があります。
[TEST_MYSQL]
Description=ODBC for MySQL
Driver=/usr/lib/libmyodbc5.so
FileUsage=1
| Parameter | Description |
|---|---|
| TEST_MYSQL | データベースドライバー名 |
| Description | データベースドライバーの説明 |
| Driver | データベースドライバーライブラリの場所 |
| FileUsage | データベースドライバーが、ローカルファイルへのアクセスをサポートせずにデータベースサーバーへの接続をサポートするかどうか (0)、ファイルからのデータの読み取りをサポートするかどうか (1)、ファイルへのデータの書き込みをサポートするかどうか (2) を決定します。 |
| Threading | スレッドのシリアル化レベル。 PostgreSQL でサポートされています。 1.6 以降、ドライバー マネージャーがスレッド サポート付きでビルドされている場合は、別のドライバー エントリを追加できます。 |
odbc.ini
odbc.ini ファイルは、データソースの設定に使用されます。
サポートされるパラメータのリストは、データベースドライバによって異なります(たとえば、Oracle データベースでは Server の代わりに ServerName が使用される場合があります)
[TEST_MYSQL]
Description=MySQL Test Database
Driver=mysql
Server=127.0.0.1
User=root
Password=
Port=3306
Socket=
Database=zabbix
| Parameter | Description |
|---|---|
| TEST_MYSQL | データソース名(DSN) |
| Description | データソースの説明 |
| Driver | データベースドライバ名(odbcinst.ini で指定) |
| Server | データベースサーバの IP/DNS |
| User | 接続に使用するデータベースユーザ名 |
| Password | データベースユーザーのパスワード |
| Port | データベース接続ポート |
| Socket | データベース接続ソケット |
| Database | データベース名 |
その他の設定パラメータオプションについては、MySQLドキュメントを参照してください。
PostgreSQL 用の odbc.ini ファイルには、追加のパラメータが含まれている場合があります。
[TEST_PSQL]
Description=PostgreSQL テストデータベース
Driver=postgresql
Username=zbx_test
Password=zabbix
Servername=127.0.0.1
Database=zabbix
Port=5432
ReadOnly=No
Protocol=7.4+
ShowOidColumn=No
FakeOidIndex=No
RowVersioning=No
ShowSystemTables=No
Fetch=Yes
BoolsAsChar=Yes
SSLmode=Require
ConnSettings=
| パラメータ | 説明 |
|---|---|
| ReadOnly | データベース接続で読み取り操作(SELECT クエリ)のみを許可し、変更操作(INSERT、UPDATE、DELETE ステートメント)を制限するかどうかを指定します。データが変更されないようにする必要がある場合に便利です。 |
| Protocol | PostgreSQL バックエンドプロトコルのバージョン(SSL 接続の場合は無視されます) |
| ShowOidColumn | SQLColumns にオブジェクト ID (OID) を含めるかどうかを指定します。 |
| FakeOidIndex | OID に擬似的な一意のインデックスを作成するかどうかを指定します。 |
| RowVersioning | 行を更新しようとしているときに、他のユーザーによってデータが変更されたかどうかをアプリケーションが検出できるようにするかどうかを指定します。このパラメータを使用すると、行を更新するために WHERE 句ですべての列を指定する必要がないため、更新処理が高速化されることに注意してください。 |
| ShowSystemTables | データベースドライバが SQLTables でシステムテーブルを通常のテーブルとして扱うかどうかを指定します。アクセス性が向上し、システムテーブルを可視化できるため便利です。 |
| Fetch | ドライバーがSELECT文を処理し、100行のキャッシュを維持するために、自動的にdeclare cursor/fetchを使用するかどうかを指定します。 |
| BoolsAsChar | ブール型のマッピングを制御します。 「Yes」に設定すると、ブール型は SQL_CHARにマッピングされ、それ以外の場合はSQL_BITにマッピングされます。 |
| SSLmode | 接続のSSLモードを指定します。 |
| ConnSettings | 接続時にバックエンドに送信される追加設定 |
ODBC 接続のテスト
ODBC 接続が正常に動作しているかどうかをテストするに、isql ユーティリティ(unixODBC パッケージに含まれています)を使用できます。
isql test
+---------------------------------------+
| Connected! |
| |
| sql-statement |
| help [tablename] |
| quit |
| |
+----------------------------------------+
Zabbix Webインターフェースでのアイテム設定
データベース監視のアイテムを設定します。

必須の入力フィールドには、赤いアスタリスクが付いています。
データベース監視アイテムでは、以下を指定する必要があります。
| Type | ここで「Database monitor」を選択します。 |
| Key | サポートされているアイテムキーのいずれかを入力します。 db.odbc.select[] - このアイテムは1つの値を返します(SQLクエリ結果の最初の行の最初の列)。 db.odbc.get[] - このアイテムは複数の行/列をJSON形式で返します。 db.odbc.discovery[] - このアイテムはローレベルディスカバリデータを返します。 |
| User name | データベースのユーザー名を入力します(最大255文字)。 このパラメータは、データベースのユーザー名が odbc.ini ファイルで指定されている場合は任意です。接続文字列が使用されていて、User name フィールドが空でない場合は、 UID=<user> として接続文字列に追加されます。 |
| Password | データベースのユーザーパスワードを入力します(最大255文字)。 このパラメータは、パスワードが odbc.ini ファイルで指定されている場合は任意です。接続文字列が使用されていて、Password フィールドが空でない場合は、 PWD=<password> として接続文字列に追加されます。Zabbix 7.0.3 以降では、このフィールドで特殊文字がサポートされています。 Zabbix 7.0.3 より前では、パスワードにセミコロンが含まれている場合、中括弧で囲む必要があります。例えば {P?;)*word} のように指定します。7.0.3 以降では、この場合にパスワードを囲む方法も引き続きサポートされていますが、必須ではありません。パスワードは、ユーザー名の後に UID=<username>;PWD={P?;)*word} として接続文字列に追加されます。生成される文字列をテストするには、次のコマンドを実行できます。isql -v -k 'Driver=libmaodbc.so;Database=zabbix;UID=zabbix;PWD={P?;)*word}' |
| SQL query | SQLクエリを入力します。db.odbc.select[] では、クエリは1つの値のみを返す必要があることに注意してください。 |
| Type of information | ここでクエリによって返される情報のタイプを選択します。 情報のタイプが正しく選択されていない場合、アイテムは未サポートになります。 |
重要な注意事項
- サーバーまたはプロキシの設定で odbc poller プロセスが起動されていない場合、データベース監視アイテムは未サポートになります。
ODBC pollerを有効にするには、Zabbix server 設定ファイル、またはプロキシによって実行されるチェックの場合は Zabbix proxy 設定ファイルで、
StartODBCPollersパラメータを設定してください。 - アイテム設定 フォームの Timeout パラメータ値は、ODBC のログインタイムアウトおよびクエリ実行タイムアウトとして使用されます。 インストールされている ODBC ドライバーがこれらをサポートしていない場合、これらのタイムアウト設定は無視される可能性があることに注意してください。
- SQL コマンドは、
select文を使用するクエリと同様に、結果セットを返す必要があります。 クエリ構文は、それを処理する RDBMS に依存します。 ストレージドプロシージャへのリクエスト構文は、callキーワードで開始する必要があります。
アイテムキーの詳細
山括弧のないパラメータは必須です。山括弧 < > でマークされたパラメータはオプションです。
db.odbc.select[<一意の短い説明>,<dsn>,<接続文字列>]
SQLクエリ結果の最初の行の最初の列を1つの値として返します。
戻り値: SQLクエリによって異なります。
パラメーター:
- 一意の短い説明 - 項目を識別するための一意の短い説明(トリガーなどで使用)
- dsn - データソース名(
odbc.iniで指定) - 接続文字列 - 接続文字列(ドライバー固有の引数を含む場合があります)
コメント:
dsnとconnection stringはオプションのパラメーターですが、少なくともどちらか一方は必須です。両方定義されている場合、dsnは無視されます。- クエリが複数の列を返す場合、最初の列のみが読み込まれます。クエリが複数行を返す場合、最初の行のみが読み取られます。
db.odbc.get[<一意の短い説明>,<dsn>,<接続文字列>]
SQLクエリの結果をJSON配列に変換します。
戻り値: JSONオブジェクト
パラメーター:
- 一意の短い説明 - 項目を識別するための一意の短い説明(トリガーなどで使用)
- dsn - データソース名(
odbc.iniで指定) - 接続文字列 - 接続文字列(ドライバー固有の引数を含む場合があります)
コメント:
dsnとconnection stringはオプションのパラメーターですが、少なくともどちらか一方は必須です。両方定義されている場合、dsnは無視されます。- JSON形式で複数の行/列が返される場合があります。 この項目は、1回のシステムコールですべてのデータを収集するマスター項目として使用できます。一方、依存項目ではJSONPath前処理を使用して個々の値を抽出できます。 詳細については、低レベル検出で使用される返される形式の例を参照してください。
例:
MySQL ODBCドライバー5の接続:
db.odbc.get[MySQL example,,"Driver=/usr/local/lib/libmyodbc5a.so;Database=master;Server=127.0.0.1;Port=3306"]
db.odbc.discovery[<一意の短い説明>,<dsn>,<接続文字列>]
SQLクエリ結果を低レベル検出で使用するJSON配列に変換します。
クエリ結果の列名は、検出されたフィールド値とペアになった低レベル検出マクロ名に変換されます。
これらのマクロは、アイテム、トリガーなどのプロトタイプの作成に使用できます。
戻り値: JSONオブジェクト
パラメーター:
- 一意の短い説明 - アイテムを識別するための一意の短い説明(トリガーなどで使用)
- dsn - データソース名(
odbc.iniで指定) - 接続文字列 - 接続文字列(ドライバー固有の引数を含む場合があります)
コメント:
dsnとconnection stringはオプションのパラメータですが、少なくともどちらかは必須です。両方定義されている場合、dsnは無視されます。
エラーメッセージ
ODBCのエラーメッセージは、詳細な情報を提供するためにフィールドごとに構成されています。 例えば、エラーメッセージは次のようになります。
Cannot execute ODBC query: [SQL_ERROR]:[42601][7][ERROR: syntax error at or near ";"; Error while executing the query]
- "
Cannot execute ODBC query" - Zabbixメッセージ - "
[SQL_ERROR]" - ODBC戻りコード - "
[42601]" - SQLState - "
[7]" - ネイティブエラーコード - "
[ERROR: syntax error at or near ";"; Error while executing the query]" - ネイティブエラーメッセージ
エラーメッセージの長さは2048バイトに制限されているため、メッセージが切り詰められる場合があることに注意してください。
ODBC診断レコードが複数ある場合、Zabbixは長さの制限が許す範囲で、それらを(|で区切って)連結しようとします。