14 ODBC 監視
概要
ODBC監視は、ZabbixフロントエンドのDatabase monitorアイテムタイプに対応しています。
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-connector-odbcについてはMySQLドキュメント、mariadb-connector-odbcについてはMariaDBドキュメントを参照してください。
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ユーザーガイドを参照してください。
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
| パラメータ | 説明 |
|---|---|
| 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
| パラメータ | 説明 |
|---|---|
| TEST_MYSQL | データソース名(DSN)。 |
| Description | データソースの説明。 |
| Driver | データベースドライバ名(odbcinst.iniで指定されたもの)。 |
| Server | データベースサーバのIP/DNS。 |
| User | 接続用のデータベースユーザー。 |
| Password | データベースユーザーのパスワード。 |
| Port | データベース接続ポート。 |
| Socket | データベース接続ソケット。 |
| Database | データベース名。 |
その他の設定パラメータのオプションについては、MySQLドキュメントを参照してください。
PostgreSQL用のodbc.iniファイルには、追加のパラメータを含めることができます:
[TEST_PSQL]
Description=PostgreSQL Test Database
Driver=postgresql
Username=zbx_test
Password=zabbix
Servername=127.0.0.1
Database=zabbix
Port=5432
ReadOnly=No
Protocol=8.0+
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にObject ID(OID)を含めるかどうかを指定します。 |
| FakeOidIndex | OIDに偽の一意インデックスを作成するかどうかを指定します。 |
| RowVersioning | 他のユーザーによってデータが変更された場合に、行を更新しようとしたときにアプリケーションがそれを検出できるようにするかどうかを指定します。このパラメータを有効にすると、WHERE句で全てのカラムを指定する必要がなくなるため、更新処理が高速化される場合があります。 |
| ShowSystemTables | データベースドライバがシステムテーブルをSQLTablesで通常のテーブルとして扱うかどうかを指定します。システムテーブルへのアクセス性を高めるために有用です。 |
| Fetch | ドライバがSELECTステートメントを自動的にdeclare cursor/fetchで処理し、100行のキャッシュを維持するかどうかを指定します。 |
| BoolsAsChar | Boolean型のマッピングを制御します。 「Yes」に設定すると、Boolは SQL_CHARにマッピングされ、それ以外の場合はSQL_BITにマッピングされます。 |
| SSLmode | 接続のSSLモードを指定します。 |
| ConnSettings | 接続時にバックエンドに送信される追加設定。 |
ODBC接続のテスト
ODBC接続が正常に動作しているかどうかをテストするには、isqlユーティリティ(unixODBCパッケージに含まれています)を使用できます。
isql test
+---------------------------------------+
| Connected! |
| |
| sql-statement |
| help [tablename] |
| quit |
| |
+---------------------------------------+
Zabbixフロントエンドでのアイテムの設定
データベース監視のアイテムを設定します。

必須入力フィールドには赤いアスタリスクが付いています。
データベース監視アイテムの場合、以下を指定する必要があります。
| タイプ | ここで「データベース監視」を選択します。 |
| キー | サポートされているアイテムキーのいずれかを入力します: db.odbc.select[] - このアイテムはSQLクエリ結果の最初の行の最初の列の値を返します; db.odbc.get[] - このアイテムは複数の行/列をJSON形式で返します; db.odbc.discovery[] - このアイテムはローレベルディスカバリーデータを返します。 |
| ユーザー名 | データベースのユーザー名(255文字まで)を入力します。 このパラメータは、 odbc.iniファイルでデータベースのユーザー名が指定されている場合は省略可能です。接続文字列が使用されていて、ユーザー名フィールドが空でない場合は、 UID=<user>として接続文字列に追加されます。 |
| パスワード | データベースのユーザーパスワード(255文字まで)を入力します。 このパラメータは、 odbc.iniファイルでパスワードが指定されている場合は省略可能です。接続文字列が使用されていて、パスワードフィールドが空でない場合は、 PWD=<password>として接続文字列に追加されます。このフィールドでは特殊文字もサポートされています。 パスワードは、たとえば UID=<username>;PWD=P?;)*wordのように、ユーザー名の後に接続文字列へ追加されます。結果の文字列をテストするには、次のコマンドを実行できます: isql -v -k 'Driver=libmaodbc.so;Database=zabbix;UID=zabbix;PWD=P?;)*word' |
| SQLクエリ | SQLクエリを入力します。db.odbc.select[]の場合、クエリは1つの値のみを返す必要があることに注意してください。 |
| 情報の型 | ここでクエリによって返される情報の型を選択します。 情報の型が正しく選択されていない場合、アイテムはサポート対象外になります。 |
重要な注意事項
- サーバーまたはプロキシの設定で odbc poller プロセスが開始されていない場合、データベース監視アイテムはサポートされなくなります。
ODBCポーラーを有効にするには、Zabbix サーバーの設定ファイル、またはプロキシによって実行されるチェックの場合はZabbix プロキシの設定ファイルで
StartODBCPollersパラメータを設定します。 - アイテム設定フォームの Timeout パラメータ値は、ODBCログインタイムアウトおよびクエリ実行タイムアウトとして使用されます。 インストールされているODBCドライバーがこれらのタイムアウト設定をサポートしていない場合、これらのタイムアウト設定が無視されることがあるので注意してください。
- SQLコマンドは、
selectステートメントを使用するクエリのように、結果セットを返す必要があります。 クエリの構文は、それらを処理するRDBMSによって異なります。 ストアドプロシージャへのリクエストの構文は、callキーワードで始める必要があります。
アイテムキーの詳細
山括弧のないパラメータは必須です。山括弧 < > で囲まれたパラメータはオプションです。
db.odbc.select[<unique short description>,<dsn>,<connection string>]
SQLクエリ結果の最初の行の最初の列、つまり1つの値を返します。
戻り値: SQLクエリに依存します。
パラメータ:
- unique short description - アイテムを識別するための一意の短い説明 (トリガーなどで使用);
- dsn - データソース名 (
odbc.iniで指定されたもの); - connection string - 接続文字列 (ドライバー固有の引数を含めることができます)。
コメント:
dsnとconnection stringは省略可能なパラメータですが、少なくともどちらか一方は必須です。両方が定義されている場合は、dsnは無視されます。- クエリが複数の列を返す場合、最初の列のみが読み取られます。クエリが複数の行を返す場合、最初の行のみが読み取られます。
db.odbc.get[<unique short description>,<dsn>,<connection string>]
SQLクエリの結果をJSON配列に変換します。
戻り値:JSONオブジェクト。
パラメータ:
- unique short description - アイテムを識別するための一意の短い説明(トリガーなどで使用);
- dsn - データソース名(
odbc.iniで指定); - connection string - 接続文字列(ドライバ固有の引数を含む場合があります)。
コメント:
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[<unique short description>,<dsn>,<connection string>]
SQLクエリの結果をJSON配列に変換し、ローレベルディスカバリで使用します。
クエリ結果のカラム名は、ディスカバリされたフィールド値とペアになったローレベルディスカバリマクロ名に変換されます。
これらのマクロは、アイテム、トリガーなどのプロトタイプ作成時に使用できます。
戻り値: JSONオブジェクト。
パラメータ:
- unique short description - アイテムを識別するための一意の短い説明(トリガーなどで使用);
- dsn - データソース名(
odbc.iniで指定); - connection string - 接続文字列(ドライバ固有の引数を含めることができます)。
コメント:
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は長さ制限の範囲内でそれらを(|で区切って)連結しようとします。