[comment]: # translation:outdated

[comment]: # ({68c88a1c-68c88a1c})
# 14 ODBC 監視

[comment]: # ({/68c88a1c-68c88a1c})

[comment]: # ({4427a03d-b5170fd3})
#### 概要

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

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

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

::: noteimportant
ODBCチェックについては、[known issues](/manual/installation/known_issues#odbc_checks)も参照してください。
:::

[comment]: # ({/4427a03d-b5170fd3})

[comment]: # ({c138fd1c-bf6fd8ba})
#### unixODBC のインストール

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

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

    shell> yum -y install unixODBC unixODBC-devel

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

    # zypper in unixODBC-devel

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

[comment]: # ({/c138fd1c-bf6fd8ba})

[comment]: # ({12be2711-eea09ed7})
#### unixODBC ドライバのインストール

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

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

    shell> yum install mysql-connector-odbc

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

    zypper で MyODBC-unixODBC

[comment]: # ({/12be2711-eea09ed7})

[comment]: # ({d49fdb52-e1911043})
##### MySQL

MySQL unixODBC データベースドライバーをインストールするには、お使いのシステムのパッケージマネージャーを使用してください。

```bash
# Ubuntu/Debian システムの場合:
apt install odbc-mariadb

# RedHat/Fedora ベースのシステムの場合:
dnf install mariadb-connector-odbc

# SUSE ベースのシステムの場合:
zypper install mariadb-connector-odbc
```

パッケージマネージャーを使用せずにデータベースドライバーをインストールするには、[MySQL ドキュメント](https://dev.mysql.com/downloads/connector/odbc/) の `mysql-connector-odbc` または [MariaDB ドキュメント](https://mariadb.com/kb/en/mariadb-connector-odbc/) の `mariadb-connector-odbc` を参照してください。

[comment]: # ({/d49fdb52-e1911043})

[comment]: # ({1b513583-0842efba})
##### PostgreSQL

PostgreSQL unixODBC データベースドライバーをインストールするには、お使いのシステムのパッケージマネージャーを使用してください。

```bash
# Ubuntu/Debian システムの場合:
apt install odbc-postgresql

# RedHat/Fedora ベースのシステムの場合:
dnf install postgresql-odbc

# SUSE ベースのシステムの場合:
zypper install psqlODBC
```

パッケージマネージャーを使用せずにデータベースドライバーをインストールするには、[PostgreSQL ドキュメント](https://www.postgresql.org/download/linux/) を参照してください。

[comment]: # ({/1b513583-0842efba})

[comment]: # ({b4e6cb7e-88097de9})
##### Oracle

unixODBC データベースドライバーをインストールするには、[Oracle のドキュメント](https://www.oracle.com/database/technologies/releasenote-odbc-ic.html) を参照してください。

[comment]: # ({/b4e6cb7e-88097de9})

[comment]: # ({d9e46b47-f1ce859d})
##### MSSQL

Ubuntu/Debian システム用の MSSQL unixODBC データベースドライバーをインストールするには、お使いのシステムのパッケージマネージャーを使用してください。

```bash
# 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 ユーザーガイド](http://www.freetds.org/userguide/) を参照してください。

[comment]: # ({/d9e46b47-f1ce859d})

[comment]: # ({e2aefa79-b15e771b})
#### unixODBCの設定

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

    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接続が正常に動作しているかどうかを確認するために、データベースへの接続をテストする必要があります。<br>
これは **isql** ユーティリティ（unixODBC パッケージに含まれています）で行うことができます。

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

[comment]: # ({/e2aefa79-b15e771b})

[comment]: # ({72609b6e-d99c28e7})
##### odbcinst.ini

`odbcinst.ini` ファイルには、インストールされている ODBC データベースドライバーがリストされます。
`odbcinst.ini` が見つからない場合は、手動で作成する必要があります。

```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 でサポートされています。<br>1.6 以降、ドライバー マネージャーがスレッド サポート付きでビルドされている場合は、別のドライバー エントリを追加できます。|

[comment]: # ({/72609b6e-d99c28e7})

[comment]: # ({f10754c8-207ccff7})
##### odbc.ini

`odbc.ini` ファイルは、データソースの設定に使用されます。
サポートされるパラメータのリストは、データベースドライバによって異なります（たとえば、Oracle データベースでは Server の代わりに ServerName が使用される場合があります）。

```ini
[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ドキュメント](https://dev.mysql.com/doc/connector-odbc/en/connector-odbc-configuration-connection-parameters.html)を参照してください。

[comment]: # ({/f10754c8-207ccff7})

[comment]: # ({9cc86ee1-fed5e483})

PostgreSQL の `odbc.ini` ファイルには、追加のパラメータが含まれている場合があります。

```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|ブール型のマッピングを制御します。<br>「Yes」に設定すると、ブール型は`SQL_CHAR`にマッピングされ、それ以外の場合は`SQL_BIT`にマッピングされます。|
|SSLmode|接続のSSLモードを指定します。|
|ConnSettings|接続時にバックエンドに送信される追加設定|

[comment]: # ({/9cc86ee1-fed5e483})

[comment]: # ({2e87263e-93c68b7f})
##### ODBC 接続のテスト

ODBC 接続が正常に動作しているかどうかをテストするには、`isql` ユーティリティ（`unixODBC` パッケージに含まれています）を使用できます。

```bash
isql test
+---------------------------------------+
| Connected!                            |
|                                       |
| sql-statement                         |
| help [tablename]                      |
| quit                                  |
|                                       |
+---------------------------------------+
```

[comment]: # ({/2e87263e-93c68b7f})

[comment]: # ({d94e055e-ca784f43})
#### Zabbixフロントエンドでの item 設定

データベース監視 [item](/manual/config/items/item#overview) を設定します。

![](../../../../../assets/en/manual/config/items/itemtypes/db_monitor.png)

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

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

|   |   |
|---|---|
|*タイプ*|ここで *データベースモニタ* を選択|
|*キー*|サポートされている 2 つのアイテム キーのいずれかを入力します:<br>**db.odbc.select**\[<一意の短い説明>,<dsn>,<接続文字列>\] - このアイテムはSQL クエリ結果の最初の行の最初の列、1つの値を返すように設計されています。クエリが複数の列を返す場合、最初の列のみが読み取られます。クエリが複数の行を返す場合、最初の行のみが読み取られます。<br>**db.odbc.get**\[<一意の短い説明>,<dsn>,<接続文字列>\] - この項目はJSON 形式で複数の行/列を返すことができます。したがって、1 回のシステム コールですべてのデータを収集するマスター アイテムとして使用できますが、JSONPath 前処理を依存アイテムで使用して個々の値を抽出できます。詳細については、ローレベルディスカバリで使用され、返される形式の [例](/manual/discovery/low_level_discovery/examples/sql_queries#using_dbodbcget) を参照してください。この項目は Zabbix 4.4 以降でサポートされています。<br>一意の説明は、トリガーなどで項目を識別するのに役立ちます。<br>`dsn` と `connection string` はオプションのパラメータですが、少なくとも 1 つが存在する必要があります。データ ソース名 (DSN) と接続文字列の両方が定義されている場合、DSN は無視されます。<br>データ ソース名を使用する場合は、odbc.ini で指定されているとおりに設定する必要があります。<br>接続文字列には、ドライバー固有の引数が含まれる場合があります。<br><br>例(MySQL ODBC driver 5の接続):<br>=> db.odbc.get\[MySQL example,,"Driver=/usr/local/lib/libmyodbc5a.so;Database=master;Server=127.0.0.1;Port=3306"\]|
|*ユーザー名*|データベースのユーザー名を入力してください<br>odbc.ini でユーザーが指定されている場合、このパラメーターはオプションです。<br>接続文字列が使用され、*ユーザー名* フィールドが空でない場合、`UID=<user>` として接続文字列に追加されます|
|*パスワード*|データベース ユーザーのパスワードを入力してください<br>パスワードが odbc.ini で指定されている場合、このパラメータはオプションです。<br>接続文字列が使用され、*Password* フィールドが空でない場合、接続文字列に `PWD=<password>` として追加されます。|
|*SQL クエリ*|SQL クエリを入力します。<br>`db.odbc.select[]` アイテムを使用すると、クエリは 1 つの値のみを返す必要があることに注意してください。|
|*データ型*|ここで正しく選択できるよう、クエリによって返される情報の種類を把握しておく必要があります。 *データ型*が間違っていると、アイテムはサポート対象外になります。|

[comment]: # ({/d94e055e-ca784f43})

[comment]: # ({62acff60-06f9d2eb})
#### 重要な注意事項

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

[comment]: # ({/62acff60-06f9d2eb})

[comment]: # ({99bf7f73-0188aaa2})
#### アイテムキーの詳細

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

[comment]: # ({/99bf7f73-0188aaa2})

[comment]: # ({1a75e5c0-13edfcd4})

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

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

パラメーター:

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

コメント:

- `dsn` と `connection string` はオプションのパラメーターですが、少なくともどちらか一方は必須です。両方定義されている場合、`dsn` は無視されます。
- クエリが複数の列を返す場合、最初の列のみが読み込まれます。クエリが複数行を返す場合、最初の行のみが読み取られます。

[comment]: # ({/1a75e5c0-13edfcd4})

[comment]: # ({a6ace17e-ebf5d449})

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

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

パラメーター:

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

コメント:

- `dsn`と`connection string`はオプションのパラメーターですが、少なくともどちらか一方は必須です。両方定義されている場合、`dsn`は無視されます。
- JSON形式で複数の行/列が返される場合があります。
この項目は、1回のシステムコールですべてのデータを収集するマスター項目として使用できます。一方、依存項目ではJSONPath前処理を使用して個々の値を抽出できます。
詳細については、低レベル検出で使用される返される形式の[例](/manual/discovery/low_level_discovery/examples/sql_queries#using-db.odbc.get)を参照してください。

例:

# MySQL ODBCドライバー5の接続:
    db.odbc.get[MySQL example,,"Driver=/usr/local/lib/libmyodbc5a.so;Database=master;Server=127.0.0.1;Port=3306"]

[comment]: # ({/a6ace17e-ebf5d449})

[comment]: # ({f6dfe740-c8148c95})

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

<br>
SQLクエリ結果を[低レベル検出](/manual/discovery/low_level_discovery/examples/sql_queries)で使用するJSON配列に変換します。
クエリ結果の列名は、検出されたフィールド値とペアになった低レベル検出マクロ名に変換されます。
これらのマクロは、アイテム、トリガーなどのプロトタイプの作成に使用できます。<br>
戻り値: *JSONオブジェクト*

パラメーター:

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

コメント:

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

[comment]: # ({/f6dfe740-c8148c95})

[comment]: # ({6fa956d8-718edfdc})
#### エラーメッセージ

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

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

[comment]: # ({/6fa956d8-718edfdc})
