【わたしに♥おまかせ Zabbix④】Zabbixのデータベースについて

Zabbix,まるごとおまかせZabbix,わたしにおまかせZabbix,製品紹介

こんにちは!プラットフォーム技術部の齊藤(沙)です。

前回はZabbixサーバーの内部プロセスについて確認しましたね。今回はZabbixが監視設定や履歴データを保管するデータベースについて確認していきます。

前回の記事はこちら。

まとめ記事作りました♥

Zabbixを知ろう – Zabbixのデータベースについて

私たちアークシステムでは、パフォーマンスの観点からZabbixにおけるデータベースはMariaDB(Mysql)の使用を推奨しています。本記事では、Zabbix3.0、mariadb5.5の環境を用いて確認していきます。

ホストに関する情報について

主要テーブル一覧

監視対象であるホストに関する情報は、主に以下のテーブルに格納されています。

 hosts				#ホストに関する主要な情報を格納するテーブル
 hosts_groups		#ホストグループに関する情報を格納するテーブル
 host_inventory		#ホストインベントリに関する情報を格納するテーブル
 hostmacro			#ホストマクロに関する情報を格納するテーブル
 interface			#ホストのインターフェースに関する情報を格納するテーブル

hostsテーブル詳細

まずはホストに関する主要な情報が格納されている「hosts」テーブルについて詳しく確認していきます。以下は「desc hosts;」コマンドの出力結果です。

+--------------------+---------------------+------+-----+---------+-------+
| Field              | Type                | Null | Key | Default | Extra |
+--------------------+---------------------+------+-----+---------+-------+
| hostid             | bigint(20) unsigned | NO   | PRI | NULL    |       |
| proxy_hostid       | bigint(20) unsigned | YES  | MUL | NULL    |       |
| host               | varchar(128)        | NO   | MUL |         |       |
| status             | int(11)             | NO   | MUL | 0       |       |
| disable_until      | int(11)             | NO   |     | 0       |       |
| error              | varchar(2048)       | NO   |     |         |       |
| available          | int(11)             | NO   |     | 0       |       |
| errors_from        | int(11)             | NO   |     | 0       |       |
| lastaccess         | int(11)             | NO   |     | 0       |       |
| ipmi_authtype      | int(11)             | NO   |     | 0       |       |
| ipmi_privilege     | int(11)             | NO   |     | 2       |       |
| ipmi_username      | varchar(16)         | NO   |     |         |       |
| ipmi_password      | varchar(20)         | NO   |     |         |       |
| ipmi_disable_until | int(11)             | NO   |     | 0       |       |
| ipmi_available     | int(11)             | NO   |     | 0       |       |
| snmp_disable_until | int(11)             | NO   |     | 0       |       |
| snmp_available     | int(11)             | NO   |     | 0       |       |
| maintenanceid      | bigint(20) unsigned | YES  | MUL | NULL    |       |
| maintenance_status | int(11)             | NO   |     | 0       |       |
| maintenance_type   | int(11)             | NO   |     | 0       |       |
| maintenance_from   | int(11)             | NO   |     | 0       |       |
| ipmi_errors_from   | int(11)             | NO   |     | 0       |       |
| snmp_errors_from   | int(11)             | NO   |     | 0       |       |
| ipmi_error         | varchar(2048)       | NO   |     |         |       |
| snmp_error         | varchar(2048)       | NO   |     |         |       |
| jmx_disable_until  | int(11)             | NO   |     | 0       |       |
| jmx_available      | int(11)             | NO   |     | 0       |       |
| jmx_errors_from    | int(11)             | NO   |     | 0       |       |
| jmx_error          | varchar(2048)       | NO   |     |         |       |
| name               | varchar(128)        | NO   | MUL |         |       |
| flags              | int(11)             | NO   |     | 0       |       |
| templateid         | bigint(20) unsigned | YES  | MUL | NULL    |       |
| description        | text                | NO   |     | NULL    |       |
| tls_connect        | int(11)             | NO   |     | 1       |       |
| tls_accept         | int(11)             | NO   |     | 1       |       |
| tls_issuer         | varchar(1024)       | NO   |     |         |       |
| tls_subject        | varchar(1024)       | NO   |     |         |       |
| tls_psk_identity   | varchar(128)        | NO   |     |         |       |
| tls_psk            | varchar(512)        | NO   |     |         |       |
+--------------------+---------------------+------+-----+---------+-------+

Interfaceテーブル詳細

そして、以下は「desc interface;」コマンドの出力結果です。

+-------------+---------------------+------+-----+-----------+-------+
| Field       | Type                | Null | Key | Default   | Extra |
+-------------+---------------------+------+-----+-----------+-------+
| interfaceid | bigint(20) unsigned | NO   | PRI | NULL      |       |
| hostid      | bigint(20) unsigned | NO   | MUL | NULL      |       |
| main        | int(11)             | NO   |     | 0         |       |
| type        | int(11)             | NO   |     | 0         |       |
| useip       | int(11)             | NO   |     | 1         |       |
| ip          | varchar(64)         | NO   | MUL | 127.0.0.1 |       |
| dns         | varchar(64)         | NO   |     |           |       |
| port        | varchar(64)         | NO   |     | 10050     |       |
| bulk        | int(11)             | NO   |     | 1         |       |
+-------------+---------------------+------+-----+-----------+-------+

どちらのテーブルにも「hostid」というカラムが存在しますね。このカラムを利用してホストに関する情報が格納されているそれぞれのテーブルに対してリレーションを張っているようです。

実際に「hosts」テーブルの「hostid」を利用して「Zabbix server」ホストに紐付くインターフェースのIPアドレスを取得してみたいと思います。

SQL文 (‘hosts’ – ‘interface’)

以下は実行するSQL文です。

「hosts」テーブルにおける「status」カラム内の値が「3」となっているデータはテンプレートを表すため、where句の1つめの条件で検索対象から除外しています。

select 
 h.host,
 h.name,
 i.ip
from
 hosts h
 left outer join interface i
  on h.hostid=i.hostid
where
 h.status<>3
and
 h.host='Zabbix server';

実行結果 (‘hosts’ – ‘interface’)

以下が実行結果です。

+---------------+---------------+-------------+
| host          | name          | ip          |
+---------------+---------------+-------------+
| Zabbix server | Zabbix server | 127.0.0.1   |
| Zabbix server | Zabbix server | 192.168.0.1 |
| Zabbix server | Zabbix server | 192.168.0.3 |
+---------------+---------------+-------------+

「Zabbix server」ホストに紐付くインターフェースのIpアドレスを取得することが出来ました!

想像よりも簡単に取得できたので、次はホストとホストグループの紐付けについてもSQLで確認してみたいと思います。

ホストとホストグループの紐付け

hosts_groupsテーブル詳細

まずは「hosts_groups」テーブルの詳細を確認します。以下は「desc hosts_groups;」コマンドの出力結果です。

+-------------+---------------------+------+-----+---------+-------+
| Field       | Type                | Null | Key | Default | Extra |
+-------------+---------------------+------+-----+---------+-------+
| hostgroupid | bigint(20) unsigned | NO   | PRI | NULL    |       |
| hostid      | bigint(20) unsigned | NO   | MUL | NULL    |       |
| groupid     | bigint(20) unsigned | NO   | MUL | NULL    |       |
+-------------+---------------------+------+-----+---------+-------+

あれ?ホストグループ名が無い。。。
どうやらホストグループの詳細な情報は別のテーブルで保持しているようです。

「groupid」カラムを持つテーブルを捜索した結果、「groups」というテーブルの中でホストグループに関する情報が保持されているのを発見しました。

groupsテーブル詳細

以下は「desc groups;」コマンドの出力結果です。

+----------+---------------------+------+-----+---------+-------+
| Field    | Type                | Null | Key | Default | Extra |
+----------+---------------------+------+-----+---------+-------+
| groupid  | bigint(20) unsigned | NO   | PRI | NULL    |       |
| name     | varchar(64)         | NO   | MUL |         |       |
| internal | int(11)             | NO   |     | 0       |       |
| flags    | int(11)             | NO   |     | 0       |       |
+----------+---------------------+------+-----+---------+-------+

「hostid」カラムと「groupid」カラムを利用すれば、ホストに紐付くホストグループ名を取得できそうです。

SQL文 (‘hosts’ – ‘hosts_groups’ – ‘groups’)

早速、「Zabbix server」ホストに紐付くホストグループ名を取得してみたいと思います。以下は実行するSQL文です。

select
 h.host,
 g.name 
from 
 hosts h
 left outer join hosts_groups hg
  on h.hostid=hg.hostid
 left outer join groups g
  on hg.groupid=g.groupid
where
 h.status<>3
and
 h.host='Zabbix server';

実行結果 (‘hosts’ – ‘hosts_groups’ – ‘groups’)

以下が実行結果です。

+---------------+----------------+
| host          | name           |
+---------------+----------------+
| Zabbix server | Zabbix servers |
| Zabbix server | monitor        |
| Zabbix server | arksystems     |
+---------------+----------------+

「Zabbix server」ホストに紐付くホストグループ名を取得することが出来ました!嬉しい。

まとめ

今回はホストに関する情報が格納されているテーブルと、そのリレーションについて確認しました。

難しそうと敬遠していましたが、実際に確認してみると非常に簡単に情報を取得することが出来ました。Zabbixのデータベースの構造を理解するためには

  • idカラムでテーブル間のリレーションを追う

ことが大切ですね!

もっとZabbixのデータベースのことを知るために、次回はデータベースの中のアイテムに関する情報について確認していきたいと思います。

次回の記事はこちら。

Zabbixの導入・構築でお困りですか?

Zabbixの導入・構築でお困りですか?アークシステムは、Zabbix Japan LLCの公式認定パートナーとして、豊富な実績と高い技術力でお客様をサポートします。

アークシステムが選ばれる理由

  • 豊富な経験: 多くのZabbix導入・構築プロジェクトを成功に導いた実績
  • 確かな技術力: Zabbix認定資格を持つエンジニアが対応
  • 独自のソリューション: 「監視定義テンプレート」を活用した迅速かつ高品質な実装
  • 最新情報へのアクセス: Zabbix社との強力なパートナーシップを活かした最新技術対応

こんな方に最適です

  • Zabbixの新規導入を検討している
  • 現行システムの運用に課題を感じている
  • 大規模環境での監視体制を整えたい

アークシステムでは、Zabbixの導入・運用に関する課題を解決し、最適な環境を構築します。どんなご相談でもお気軽にお問い合わせください!

  • Zabbix Enterprise Appliance
  • 低コスト・短納期で提供するまるごとおまかせZabbix