

【わたしに♥おまかせ Zabbix⑤】Zabbixのデータベースについて – アイテム編
こんにちは!プラットフォーム技術部の齊藤(沙)です。
前回はZabbixが監視設定や履歴データを保管するデータベースの中でもホストに関連するテーブルについて確認しました。今回はアイテムに関連するテーブルについて確認していきます。
前回の記事はこちら。
まとめ記事作りました♥
Zabbixを知ろう -Zabbixのデータベースについて – アイテム編
私たちアークシステムでは、パフォーマンスの観点からZabbixにおけるデータベースはMariaDB(Mysql)の使用を推奨しています。本記事では、Zabbix3.0、mariadb5.5の環境を用いて確認していきます。
アイテムに関する情報について
主要テーブル一覧
監視項目であるアイテムに関する情報は主に以下のテーブルに格納されています。
hosts #ホスト(テンプレート)に関する主要な情報を格納するテーブル
items #アイテムに関する情報を格納するテーブル
applications #アプリケーションに関する情報を格納するテーブル
items_applications #アイテムとアプリケーションの紐付けに関する情報を格納するテーブル
itemsテーブル詳細
まずはアイテムに関する主要な情報が格納されている「items」テーブルについて詳しく確認していきます。以下は「desc items;」コマンドの出力結果です。
+-----------------------+---------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------------------+---------------------+------+-----+---------+-------+
| itemid | bigint(20) unsigned | NO | PRI | NULL | |
| type | int(11) | NO | | 0 | |
| snmp_community | varchar(64) | NO | | | |
| snmp_oid | varchar(255) | NO | | | |
| hostid | bigint(20) unsigned | NO | MUL | NULL | |
| name | varchar(255) | NO | | | |
| key_ | varchar(255) | NO | | | |
| delay | int(11) | NO | | 0 | |
| history | int(11) | NO | | 90 | |
| trends | int(11) | NO | | 365 | |
| status | int(11) | NO | MUL | 0 | |
| value_type | int(11) | NO | | 0 | |
| trapper_hosts | varchar(255) | NO | | | |
| units | varchar(255) | NO | | | |
| multiplier | int(11) | NO | | 0 | |
| delta | int(11) | NO | | 0 | |
| snmpv3_securityname | varchar(64) | NO | | | |
| snmpv3_securitylevel | int(11) | NO | | 0 | |
| snmpv3_authpassphrase | varchar(64) | NO | | | |
| snmpv3_privpassphrase | varchar(64) | NO | | | |
| formula | varchar(255) | NO | | | |
| error | varchar(2048) | NO | | | |
| lastlogsize | bigint(20) unsigned | NO | | 0 | |
| logtimefmt | varchar(64) | NO | | | |
| templateid | bigint(20) unsigned | YES | MUL | NULL | |
| valuemapid | bigint(20) unsigned | YES | MUL | NULL | |
| delay_flex | varchar(255) | NO | | | |
| params | text | NO | | NULL | |
| ipmi_sensor | varchar(128) | NO | | | |
| data_type | int(11) | NO | | 0 | |
| authtype | int(11) | NO | | 0 | |
| username | varchar(64) | NO | | | |
| password | varchar(64) | NO | | | |
| publickey | varchar(64) | NO | | | |
| privatekey | varchar(64) | NO | | | |
| mtime | int(11) | NO | | 0 | |
| flags | int(11) | NO | | 0 | |
| interfaceid | bigint(20) unsigned | YES | MUL | NULL | |
| port | varchar(64) | NO | | | |
| description | text | NO | | NULL | |
| inventory_link | int(11) | NO | | 0 | |
| lifetime | varchar(64) | NO | | 30 | |
| snmpv3_authprotocol | int(11) | NO | | 0 | |
| snmpv3_privprotocol | int(11) | NO | | 0 | |
| state | int(11) | NO | | 0 | |
| snmpv3_contextname | varchar(255) | NO | | | |
| evaltype | int(11) | NO | | 0 | |
+-----------------------+---------------------+------+-----+---------+-------+
アイテムはZabbixの仕様上、ホストまたはテンプレートに紐付く形で存在します。そしてZabbixのデータベースの中では、ホストもテンプレートも共に「hosts」テーブル内に情報が格納されます。
「items」テーブルに「hostid」が存在して簡単に取得できそうなので、まずはホストに紐付くアイテムの一覧を取得して見たいと思います。
ホスト+テンプレートのアイテムについて
SQL文 (‘hosts’ – ‘items’)
以下は実行するSQL文です。
「hosts」テーブルにおける「status」カラム内の値が「3」となっているデータはテンプレートを表すため、where句の1つめの条件で検索対象から除外しています。
select
h.name,
i.name,
i.key_
from
hosts h
left outer join items i
on h.hostid=i.hostid
where
h.status<>3
and
h.host='ArkTest';
実行結果 (‘hosts’ – ‘items’)
以下が実行結果です。
+---------+--------------------------------+------------+
| name | name | key_ |
+---------+--------------------------------+------------+
| ArkTest | [PING] Zabbix Agent Ping Check | agent.ping |
| ArkTest | [PING] Ping Check | icmpping |
+---------+--------------------------------+------------+
ホストに紐付くアイテムを取得することができました!
でもこれでは、ホストに紐付いているアイテムがどのテンプレートに存在するものなのかがわかりません。つぎはテンプレート名も一緒に取得して見たいと思います。
SQL文 (‘hosts’ – ‘items’ – ‘hosts(テンプレート)’)
以下は実行するSQL文です。
select
h1.host,
h2.host,
i.name,
i.key_
from
hosts h1
inner join items i
on h1.hostid=i.hostid
left outer join items i2
on i.templateid=i2.itemid
left outer join hosts h2
on i2.hostid=h2.hostid
where
h1.host='ArkTest';
「items」テーブル内の「templateid」カラムの情報を使って、どのテンプレートのアイテムなのかを追っていきます。テンプレートとホストに関する情報が同じテーブルに格納されているため、少し分かり辛いですね。。。
実行結果 (‘hosts’ – ‘items’ – ‘hosts(テンプレート)’)
以下が実行結果です。
+---------+---------------------+--------------------------------+------------+
| host | host | name | key_ |
+---------+---------------------+--------------------------------+------------+
| ArkTest | Agent Ping Template | [PING] Zabbix Agent Ping Check | agent.ping |
| ArkTest | Ping Check Template | [PING] Ping Check | icmpping |
+---------+---------------------+--------------------------------+------------+
最初は少し混乱しましたが、テンプレート名も無事取得することができました!
ホスト+アイテムについて
ここまでで、ホストとそのホストに紐付く”テンプレートに作成されたアイテム”についての参照方法について確認しました。
つぎはホストとそのホストに個別作成されたアイテム(以下ホスト個別アイテム)の参照方法について確認していきたいと思います。設定方法の誤りで意図せず発生するホスト個別アイテムですが、SQLでリスト化できれば設定後の確認で便利ですよね!
確認のため、「ArkTest」ホストに「host item」という名前のホスト個別アイテムを作成しました。
SQL文 (‘hosts’ – ‘items(ホスト個別)’)
以下は実行するSQL文です。
select
h.host,
i.name,
i.key_
from items i
left outer join hosts h
on i.hostid=h.hostid
where
i.templateid is NULL
and
h.status<>3
and
h.host='ArkTest';
「templateid」にはNULLを、ホストの「status」には3以外の値を条件として実行します。
実行結果 (‘hosts’ – ‘items(ホスト個別)’)
以下が実行結果です。
+---------+-----------+-------------+
| host | name | key_ |
+---------+-----------+-------------+
| ArkTest | host item | host.item[] |
+---------+-----------+-------------+
確認用の作成した、ホスト個別アイテムが取得できました!
(ディスカバリルールで作成されるアイテムもこのSQL文では出力されます。)
これで以下についてSQL文で簡単に確認できるようになりました。
- ホストに紐付くテンプレートアイテム
- ホストに紐付くホスト個別アイテム
アイテム+アプリケーションについて
丁度実施している作業で、特定のアプリケーション名が設定されているアイテムを確認する必要があるので、最後にアプリケーション名の取得についても確認して見たいと思います。
applicationsテーブル詳細
以下は「desc applications;」コマンドの出力結果です。
+---------------+---------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------------+---------------------+------+-----+---------+-------+
| applicationid | bigint(20) unsigned | NO | PRI | NULL | |
| hostid | bigint(20) unsigned | NO | MUL | NULL | |
| name | varchar(255) | NO | | | |
| flags | int(11) | NO | | 0 | |
+---------------+---------------------+------+-----+---------+-------+
むむむ。「itemid」が存在しません。
items_applicationsテーブル詳細
以下は「desc items_applications;」コマンドの出力結果です。
+---------------+---------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------------+---------------------+------+-----+---------+-------+
| itemappid | bigint(20) unsigned | NO | PRI | NULL | |
| applicationid | bigint(20) unsigned | NO | MUL | NULL | |
| itemid | bigint(20) unsigned | NO | MUL | NULL | |
+---------------+---------------------+------+-----+---------+-------+
「itemid」を発見しました。
「items_applications」テーブルの「itemid」を使えばアイテムに紐付くアプリケーション名を取得できそうです。
SQL文 (‘items(ホスト個別)’ – ‘items_applications’ – ‘applications’)
以下は実行するSQL文です。
select
h.host,
i.name,
i.key_,
a.name
from items i
left outer join hosts h
on i.hostid=h.hostid
left outer join items_applications ia
on i.itemid=ia.itemid
left outer join applications a
on ia.applicationid=a.applicationid
where
i.templateid is NULL
and
h.status<>3
and
h.host='ArkTest';
実行結果 (‘items(ホスト個別)’ – ‘items_applications’ – ‘applications’)
以下が実行結果です。
+---------+-----------+-------------+------+
| host | name | key_ | name |
+---------+-----------+-------------+------+
| ArkTest | host item | host.item[] | TEST |
+---------+-----------+-------------+------+
アイテムに紐付くアプリケーション名についても取得することができました!
まとめ
今回はアイテムに関する情報が格納されているテーブルと、そのリレーションについて確認しました。WebUIのフィルタ機能の強化により、SQL文で設定内容を確認する機会は減っていますが、欲しい情報だけを一覧表示させることが出来る点ではSQL文は非常に便利!
データベースからアイテムを参照する際には
- 「hosts」テーブルに、ホストとテンプレート情報が保存されている
ことを留意することが大切ですね!
もっとZabbixのデータベースのことを知るために、次回はデータベースの中のトリガーに関する情報について確認していきたいと思います。
次回の記事はこちら。
Zabbixの導入・構築でお困りですか?
Zabbixの導入・構築でお困りですか?アークシステムは、Zabbix Japan LLCの公式認定パートナーとして、豊富な実績と高い技術力でお客様をサポートします。
アークシステムが選ばれる理由
- 豊富な経験: 多くのZabbix導入・構築プロジェクトを成功に導いた実績
- 確かな技術力: Zabbix認定資格を持つエンジニアが対応
- 独自のソリューション: 「監視定義テンプレート」を活用した迅速かつ高品質な実装
- 最新情報へのアクセス: Zabbix社との強力なパートナーシップを活かした最新技術対応
こんな方に最適です
- Zabbixの新規導入を検討している
- 現行システムの運用に課題を感じている
- 大規模環境での監視体制を整えたい
アークシステムでは、Zabbixの導入・運用に関する課題を解決し、最適な環境を構築します。どんなご相談でもお気軽にお問い合わせください!