誰でも ZABBIX

Zabbixの使い方、役に立つ情報、等々

2. 監視アイテムの追加 - 依存アイテム

依存アイテムは、V3.4から追加された機能です。複数の情報が含まれるデータを1度取得すれば、そこから複数のアイテムに分割することができます。これにより、監視対象へのアクセス頻度を減らしたり、監視データの正確性を高めることができます。

たとえば、Webサーバから監視データを取得する場合、JSONXMLで結果を受け取ることが多いと思います。これらのデータを1項目ごとにアクセスすると、それなりの頻度でWebサーバにデータを取りにいくことになり、システム運用観点からはあまり望ましいやり方ではありません。 これまでは、一度にデータを取得して、外部スクリプトの中で分解しZabbix_senderで送る、というやり方もありましたが、外部スクリプトがどうしても複雑になってしまい、あまり効率のよい方法ではなかったと思います。

また、CPUやメモリの監視データは、各パラメタを同時に取得しないと、整合性が合わない値になってしまいますが、これらもSNMPやZabbixAgentのアイテム定義でデータの取得を同時に行うことはできないため、急激に値が変化した際、グラフのデータがおかしくなってしまうケースがありました。

これらの問題を、依存アイテムを使うことで、シンプルに記述することができるようになります。今回は、依存アイテムの基本的な部分を説明します。応用例は、また別のタイミングを紹介する予定です。

アイテムの定義

まず、最初にまとめてデータを取得するアイテムを定義します。これは依存アイテムからみてマスターアイテムと呼びますが、マスターアイテムというアイテムタイプがあるわけではなく、データを取得する手段は、どれでもOKです。

f:id:Unam:20180218105127p:plain

今回はテスト用のJSONデータを取得するための、Zabbixトラッパーアイテムを作成します。データ型は、サイズの大きいテキストを取得することが多いので、テキストやログを指定するケースが多いと思います。

次に依存アイテムの定義です。

f:id:Unam:20180218105400p:plain

タイプ:依存アイテム
キー:任意の名称を指定します
マスターアイテム:先ほど作成したアイテムを選択してください

次に、マスターアイテムから、必要なデータを切り出すため、保存前処理を記述します。

f:id:Unam:20180218105724p:plain

今回の確認で使用するJSONのデータです。上記の定義で、nameに該当する部分を切り出すことができます。

$ echo '{ "name" : "John", "age" : 37 }' | jq
{
  "name": "John",
  "age": 37
}


処理結果

Zabbixトラッパーアイテムに、JSONデータを送ります。

$ zabbix_sender -z 192.168.0.9 -s "Dependent item test" -k master.json -o '{ "name" : "John", "age" : 37 }'
info from server: "processed: 1; failed: 0; total: 1; seconds spent: 0.001396"
sent: 1; skipped: 0; total: 1


name、ageの値だけを、同時にアイテムとして取得することができます。

f:id:Unam:20180218112716p:plain