zabbix の LLD で gearmand の job を動的に監視する
検証した環境の zabbix のバージョンは、2.0.15 です。
gearmand の監視を zabbix で行う際、
job の数がアプリケーションによって違うと思いますので、
テンプレートを作っても汎用的に使うことができません。
こういうケースで使えるのが LLD(ローレベルディスカバリ) です。
アイテムを動的に追加したりするあれです(vfs.fs.discovery など)。
LLD は自作もできるので、自作してみました。
Template
をインポートします。
ポートは、テンプレートのマクロで、
{$GEARMAND_PORTS} = 4730
を設定しています。
ホストごとにポートを変更したい場合は、
ホストのマクロに {$GEARMAND_PORTS} = 14730
などと設定して上書きしてください。
また、複数ポート指定できるようにしてあるので、
必要であれば空白区切りでポートを列挙してください。
UserParameter
LLD も UserParameter で集計するので設定ファイルとシェルスクリプトを置く必要があります。
gearmand.conf
UserParameter の設定を記述します。
zabbix_agentd.conf にベタ書きする場合は、
zabbix_agentd.conf で Include せず、直接記述してください。
zabbix_agentd.conf
UserParameter の定義を書いたファイルを読み込むために、
Include を追記します。
Include=/etc/zabbix/zabbix_agentd.d/gearmand.conf
user.discovery.gearmand.sh
アイテムを自動収集するためのスクリプトです。
LLD では、決まった形式の json を返すだけで、zabbix がアイテムを登録してくれます。
となっているので、{$GEARMAND_PORTS} で設定したポートを引数にスクリプトを実行します。
user.discovery.gearmand.sh は第一引数に port を受けるようになっているので、
zabbix-agent が user.discovery.gearmand.sh 4730
のように叩き、
以下のような json を返します。
{ "data": [ { "{#GEARMAND_FUNC_NAME}": "Notification", "{#GEARMAND_PORT}": 4730 }, { "{#GEARMAND_FUNC_NAME}": "GroupNews", "{#GEARMAND_PORT}": 4730 } ] }
アイテムのプロトタイプに、gearmand[{#GEARMAND_PORT}, {#GEARMAND_FUNC_NAME}, capable_workers]
と設定しているので、
gearmand[4730, Notification, capable_workers]
gearmand[4730, GroupNews, capable_workers]
というアイテム(キー) が自動で登録されます。
json とアイテムのプロトタイプを見るとなんとなくお分かりいただけると思いますが、
json の key をアイテムのプロトタイプを作るときに利用でき、
key と対応する value が展開される、という動作をします。
capable_workers は、もう一つのシェルスクリプト(gearmand.sh)で使っています。
gearmand.sh
以下は、gearadmin
の実行結果です。
$ gearadmin --status Notification 1 0 1 GroupNews 2 1 1 .
左から順に、job名、キュー数、実行中のジョブ数、実行可能なworker数です。
job名以外は忘れやすそうでしたので、名前で参照できるようにしています。
名前で指定できるようにして、 STAT=$(eval echo '$'${3})
の部分で変数を展開して数値に戻しています。
設定完了
Template_gearmand をホストに設定して zabbix-agent を restart すれば、
LLD の設定完了です。
zbx_template_gearmand.xml では、port を listen しているか、capable_workers が 0 でないかを監視するトリガを設定しています。
必要であれば適宜トリガを追加してください。
まとめ
LLD で gearmand の job を監視する方法を紹介しました。
gearmand を使っていない方も、LLD の設定の参考にしていただければ幸いです。