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 をインストールする推奨される方法は、Linux オペレーティングシステムのデフォルトパッケージリポジトリを
使用することです。最も人気のあるLinuxディストリビューションでは、unixODBCはデフォルトで
パッケージリポジトリに含まれています。
もし利用できない場合は、unixODBCのホームページで入手することができます。
http://www.unixodbc.org/download.html.
RedHat/Fedora ベースのシステムで yum パッケージマネージャを使用して unixODBC をインストールします。
SUSE ベースのシステムで zypper パッケージマネージャを使用して unixODBC をインストールします。
unixODBC-develパッケージは、unixODBCをサポートするZabbixをコンパイルするために必要です。
監視するデータベースには、unixODBCデータベースドライバをインストールする必要があります。
unixODBCには、サポートされているデータベースとドライバのリストがあります。
http://www.unixodbc.org/drivers.html
Linuxディストリビューションによっては、データベースドライバがパッケージリポジトリに含まれている場合があります。
RedHat/Fedora ベースのシステムで、yum パッケージマネージャを使用して MySQL データベースドライバをインストールする場合:
SUSE ベースのシステムで、zypper パッケージマネージャを使用して 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 unixODBC データベースドライバーをインストールするには、お使いのシステムのパッケージマネージャーを使用してください。
# Ubuntu/Debian システムの場合:
apt install odbc-postgresql
# RedHat/Fedora ベースのシステムの場合:
dnf install postgresql-odbc
# SUSE ベースのシステムの場合:
zypper install psqlODBC
パッケージマネージャーを使用せずにデータベースドライバーをインストールするには、PostgreSQL ドキュメント を参照してください。
unixODBC データベースドライバーをインストールするには、Oracle のドキュメント を参照してください。
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 ユーザーガイド を参照してください。
ODBCの設定は、odbcinst.ini と odbc.ini ファイルを編集することによって行われます。
設定ファイルの場所を確認するには、次のように入力します。
odbcinst.ini は、インストールされている ODBC データベースドライバーの一覧を表示するために使用されます。
パラメータの詳細:
属性 | 説明 |
---|---|
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
ファイルには、インストールされている ODBC データベースドライバーがリストされます。 odbcinst.ini
が見つからない場合は、手動で作成する必要があります。
Parameter | Description |
---|---|
TEST_MYSQL | データベースドライバー名 |
Description | データベースドライバーの説明 |
Driver | データベースドライバーライブラリの場所 |
FileUsage | データベースドライバーが、ローカルファイルへのアクセスをサポートせずにデータベースサーバーへの接続をサポートするかどうか (0)、ファイルからのデータの読み取りをサポートするかどうか (1)、ファイルへのデータの書き込みをサポートするかどうか (2) を決定します。 |
Threading | スレッドのシリアル化レベル。 PostgreSQL でサポートされています。 1.6 以降、ドライバー マネージャーがスレッド サポート付きでビルドされている場合は、別のドライバー エントリを追加できます。 |
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 接続が正常に動作しているかどうかをテストするには、isql
ユーティリティ(unixODBC
パッケージに含まれています)を使用できます。
isql test
+---------------------------------------+
| Connected! |
| |
| sql-statement |
| help [tablename] |
| quit |
| |
+---------------------------------------+
データベース監視 item を設定します。
必須入力項目には、赤いアスタリスクが付けられています。
特にデータベース監視の項目について、入力する必要があります:
タイプ | ここで データベースモニタ を選択 |
キー | サポートされている 2 つのアイテム キーのいずれかを入力します: db.odbc.select[<一意の短い説明>,<dsn>,<接続文字列>] - このアイテムはSQL クエリ結果の最初の行の最初の列、1つの値を返すように設計されています。クエリが複数の列を返す場合、最初の列のみが読み取られます。クエリが複数の行を返す場合、最初の行のみが読み取られます。 db.odbc.get[<一意の短い説明>,<dsn>,<接続文字列>] - この項目はJSON 形式で複数の行/列を返すことができます。したがって、1 回のシステム コールですべてのデータを収集するマスター アイテムとして使用できますが、JSONPath 前処理を依存アイテムで使用して個々の値を抽出できます。詳細については、ローレベルディスカバリで使用され、返される形式の 例 を参照してください。この項目は Zabbix 4.4 以降でサポートされています。 一意の説明は、トリガーなどで項目を識別するのに役立ちます。 dsn と connection 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 つの値のみを返す必要があることに注意してください。 |
データ型 | ここで正しく選択できるよう、クエリによって返される情報の種類を把握しておく必要があります。 データ型が間違っていると、アイテムはサポート対象外になります。 |
select ...
を使用した他のクエリと同様に結果セットを返す必要があります。 問い合わせの構文は、それを処理するRDBMSに依存します。ストレージプロシージャへのリクエストの構文は call
キーワードで 開始する必要があります。山括弧のないパラメータは必須です。山括弧 < > でマークされたパラメータはオプションです。
SQLクエリ結果の最初の行の最初の列を1つの値として返します。
戻り値: SQLクエリによって異なります。
パラメーター:
odbc.ini
で指定)コメント:
dsn
と connection string
はオプションのパラメーターですが、少なくともどちらか一方は必須です。両方定義されている場合、dsn
は無視されます。
SQLクエリの結果をJSON配列に変換します。
戻り値: JSONオブジェクト
パラメーター:
odbc.ini
で指定)コメント:
dsn
とconnection string
はオプションのパラメーターですが、少なくともどちらか一方は必須です。両方定義されている場合、dsn
は無視されます。例:
db.odbc.get[MySQL example,,"Driver=/usr/local/lib/libmyodbc5a.so;Database=master;Server=127.0.0.1;Port=3306"]
SQLクエリ結果を低レベル検出で使用するJSON配列に変換します。 クエリ結果の列名は、検出されたフィールド値とペアになった低レベル検出マクロ名に変換されます。 これらのマクロは、アイテム、トリガーなどのプロトタイプの作成に使用できます。
戻り値: JSONオブジェクト
パラメーター:
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]
└───────────┬───────────┘ └────┬────┘ └──┬──┘└┬┘└─────────────────────────────┬─────────────────────────────────────┘
│ │ │ └─ Native error code └─ Native error message
│ │ └─ SQLState
└─ Zabbix message └─ ODBC return code
エラーメッセージの長さは2048バイトに制限されているため、メッセージは切り捨てられる可能性があることに注意してください。
複数のODBC診断レコードがある場合、Zabbixはそれらを(|
で区切って)制限された長さになるように連結しようと試みます。