This is a translation of the original English documentation page. Help us make it better.

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
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

Ubuntu/Debian システム用の 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 ユーザーガイド を参照してください。

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>
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 クエリ)のみを許可し、変更操作(INSERTUPDATEDELETE ステートメント)を制限するかどうかを指定します。データが変更されないようにする必要がある場合に便利です。
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フロントエンドでの 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 キーワードで 開始する必要があります。

アイテムキーの詳細

山括弧のないパラメータは必須です。山括弧 < > でマークされたパラメータはオプションです。

db.odbc.select[<一意の短い説明>,<dsn>,<接続文字列>]


SQLクエリ結果の最初の行の最初の列を1つの値として返します。
戻り値: SQLクエリによって異なります。

パラメーター:

  • 一意の短い説明 - 項目を識別するための一意の短い説明(トリガーなどで使用)
  • dsn - データソース名(odbc.iniで指定)
  • 接続文字列 - 接続文字列(ドライバー固有の引数を含む場合があります)

コメント:

  • dsnconnection string はオプションのパラメーターですが、少なくともどちらか一方は必須です。両方定義されている場合、dsn は無視されます。
  • クエリが複数の列を返す場合、最初の列のみが読み込まれます。クエリが複数行を返す場合、最初の行のみが読み取られます。
db.odbc.get[<一意の短い説明>,<dsn>,<接続文字列>]


SQLクエリの結果をJSON配列に変換します。
戻り値: JSONオブジェクト

パラメーター:

  • 一意の短い説明 - 項目を識別するための一意の短い説明(トリガーなどで使用)
  • dsn - データソース名(odbc.iniで指定)
  • 接続文字列 - 接続文字列(ドライバー固有の引数を含む場合があります)

コメント:

  • dsnconnection 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で指定)
  • 接続文字列 - 接続文字列(ドライバー固有の引数を含む場合があります)

コメント:

  • dsnconnection string はオプションのパラメータですが、少なくともどちらかは必須です。両方定義されている場合、dsn は無視されます。

エラーメッセージ

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はそれらを(|で区切って)制限された長さになるように連結しようと試みます。