# - \#15 ODBC監視

#### - 概要

ODBC監視は、ZabbixのWebインターフェースでの「データベースモニタ」のアイテムタイプに相当します。

ODBCとは、データベース管理システム（DBMS）にアクセスするためにC言語で書かれたミドルウェアAPIです。ODBCの概念は、Microsoftによって作り出され、後に他のプラットフォームに移植されました。

Zabbixは、あらゆるデータベースにクエリーを行うことができますが、これはODBCによりサポートされています。クエリーを行う場合、Zabbixは直接データベースに接続することなく、ODBCインターフェースとODBCにセットアップされているドライバーを使用します。この機能により、特定のデータベースキュー、使用統計のチェックといった複数の目的で、さまざまなデータベースをより効率的に監視できます。Zabbixは、unixODBCをサポートしています。これは、最も一般的に使用されるオープンソースODBC
API実装のうちの1つです。

#### - unixODBCのインストール

unixODBCのインストール方法として、Linuxオペレーティングシステムのデフォルトパッケージのリポジトリを使用することを推奨します。ほとんどの一般的なLinuxのディストリビューションでは、unixODBCは、デフォルトのパッケージ保存場所に含まれています。利用できない場合、unixODBCのホームページ
[http://www.unixodbc.org/download.htmlで入手できます](http://www.unixodbc.org/download.htmlで入手できます)。

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

    shell> yum -y install unixODBC unixODBC-devel

*zypper*パッケージマネージャーを使用してunixODBCをSUSEベースのシステムにインストールするには、次を実行します。

    # zypper in unixODBC-devel

::: noteclassic

unixODBC-develパッケージは、unixODBCをサポートするようにZabbixをコンパイルするのに必要です。

:::

#### - unixODBCドライバーのインストール

監視対象のデータベースに対して、unixODBCデータベースドライバーをインストールする必要があります。unixODBCでサポートされているデータベースとドライバーのリストは、[http://www.unixodbc.org/drivers.htmlで参照できます。一部のLinuxのディストリビューションでは、データベースドライバーは、パッケージ保存場所に含まれています。//yum//パッケージマネージャーを使用してMySQLデータベースドライバーをRedHat/Fedoraベースのシステムにインストールするには、次を実行します](http://www.unixodbc.org/drivers.htmlで参照できます。一部のLinuxのディストリビューションでは、データベースドライバーは、パッケージ保存場所に含まれています。//yum//パッケージマネージャーを使用してMySQLデータベースドライバーをRedHat/Fedoraベースのシステムにインストールするには、次を実行します)。

    shell> yum install mysql-connector-odbc

*zypper*パッケージマネージャーを使用してMySQLデータベースドライバーをSUSEベースのシステムにインストールするには、次を実行します。

    zypper in MyODBC-unixODBC

#### - unixODBCの設定

ODBCの設定は、**odbcinst.ini**ファイルと**odbc.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> 

#### - ODBCをサポートするZabbixのコンパイル

ODBCのサポートを有効にするには、次のフラグを立ててZabbixをコンパイルする必要があります。

       --with-unixodbc[=ARG]   unixODBCパッケージに対してodbcドライバーを使用 

::: noteclassic

Zabbixの[ソースコード](/jp/manual/installation/install#from_the_sources)からのインストールに関する詳細を参照してください。

:::

#### - ZabbixのWebインターフェースでのアイテムの設定

次のように、データベース監視[アイテム](/jp/manual/config/items/item#overview)を設定します。

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

データベース監視アイテム専用に、次を入力する必要があります。

|   |   |
|---|---|
|タイプ        ここ|*データベースモニタ*を選択します。|
|キー          *|db.odbc.select**\[unique\_description,data\_source\_name\]を入力します。<br>この固有の記述は、トリガーなどでアイテムを識別するのに役立ちます。<br>データソース名（DSN）は、odbc.iniで指定したものを設定する必要があります。|
|ユーザー名    データベ|スユーザー名を入力します（ユーザーをodbc.iniで指定する場合はオプション）。|
|パスワード    データベ|スユーザーのパスワードを入力します（パスワードをodbc.iniで指定する場合はオプション）。|
|SQLクエリー   SQL|エリーを入力します。|
|データ型      ここで|しく選択できるように、クエリーで返されるデータ型を知っておくことが重要です。*データ型*が間違っていると、アイテムは取得不可になります。|

#### - 重要事項

-   クエリーは、サーバの[タイムアウト](/2.0/jp/manual/appendix/config/zabbix_server)パラメータを超えて実行してはいけません。Zabbix
    2.0.8から、この[タイムアウト](/2.0/jp/manual/appendix/config/zabbix_server)パラメータの値は、ODBCログインタイムアウトとしても使用されます（ODBCドライバーによっては、ログインタイムアウト設定が無視される可能性があることに注意してください）。
-   クエリーは、1つの値のみを返す必要があります。
-   クエリーが複数の列を返す場合は、最初の列しか読み込まれません。
-   クエリーが複数の行を返す場合は、最初の行しか読み込まれません。
-   SQLコマンドは、selectから始まる必要があります。
-   SQLコマンドは、強制改行を含んではいけません。

#### - エラーメッセージ

Zabbix
2.0.8からは、ODBCエラーメッセージはフィールドによって構成され、より詳細な情報が提供されます。例：

     Cannot execute ODBC query:[SQL_ERROR]:[42601][7][ERROR: syntax error at or near ";"; Error while executing the query]|
     -------------------------  ---------   -----  |  ------------------------------------------------------------------- |
                 |                  |         |    `-Native error code            `- error message.                      `-Record separator
                 |                  |         `-SQLState
                 `- Zabbix message  `- ODBC return code 

エラーメッセージの長さは128バイトに制限されているため、メッセージが打ち切られる場合があることに注意してください。ODBC診断記録が複数ある場合は、Zabbixは、長さ制限の許す限り、それらをつなぐようにします。

------------------------------------------------------------------------

*本ページは2014/08/05時点の原文を基にしておりますので、内容は必ずしも最新のものとは限りません。\
最新の情報は、英語版のZabbix2.2マニュアルを参照してください。*
