zabbixで独自監視項目を設定する

システム監視でzabbixを使っています。通常のポート監視とか、プロセスの生死監視なんかは標準に用意されているコマンド類でなんとかなるんですが、どうしても独自の監視項目を追加しないといけない場合もあります。
私が管理している環境中の某サービスでは、認証情報としてFreeRADIUS、Samba(winbind)経由でActiveDirectoryのダイレクトリを使用しています。それぞれのプロセスが落ちたりすることはないんですが、winbindのActiveDirectoryレルム参加がなぜだか時々ちょん切れることがあります。ここが切れると、当然Radiusでの認証も不可になります。

なので目的としては、Radiusでサンプルアカウントの認証が失敗したら、net adsコマンドを発行するってことができればOK。

Radius認証試験用のスクリプトを用意する。

単純なコマンドなら下で書いたzabbix_agent.conf中に直接書けばいいんですが。
こんな感じ。

#!/bin/bash
/usr/bin/radtest USER_NAME password localhost 0 radpass | grep -i Accept > /dev/null 2>&1
echo $?

radtestコマンドでサンプルユーザの認証がAcceptになるかどうかをテスト。radtestの結果にAcceptが含まれていればTrueを、そうじゃなければFalseを返す。

監視される機器で監視項目を追加

/etc/zabbix/zabbix_agent.confの最後にこんな行を追加する。

UserParameter=radtest,/home/zabbix/radtest.sh

イコール記号のあとの第一引数がこのあとzabbixサーバに設定するアイテム名。第二引数が監視するときに使用するコマンド。このあと設定するトリガーでこの戻り値をチェックします。

zabbixサーバで監視対象ホストにアイテムを設定する

[設定]→[ホスト]から該当ホスト列の[アイテム]をクリック。表示されるアイテムの設定画面で[アイテムの作成]をクリックする。

設定項目は以下のとおり。

項目 設定値
説明 radius
タイプ Zabbixエージェント
キー radius
データ型 数値
更新間隔(秒) 60

説明のところは適当に。[キー]に上記で/etc/zabbix/zabbix_agent.confで第一引数に書いたキーを記述します。

トリガーを設定

上記でアイテムを作成したときと同様に[設定]→[ホスト]から該当ホスト列の[トリガー]をクリック。表示さえるトリガーの設定画面で[トリガーの作成]をクリックする。

設定項目は次のとおり。

項目 設定値
名前 radius error on {HOSTNAME}
条件式 {hostname:radtest.last(0)}#0
深刻度 致命的な障害

深刻度とか、名前とかはお好みで。条件式は「キーradtestが返してくる値が0でない場合」ということです。

アクションを設定

[設定]→[アクション]をクリックして、[アクションの作成]をクリック。

設定項目は次のとおり。

項目 設定値
名前 radius
デフォルトの件名 {TRIGGER.NAME}: {STATUS}
デフォルトのメッセージ {TRIGGER.NAME}: {STATUS}
アクションのコンディション トリガーの名前 含まれる "radius"
アクションのオペレーション 適当に

ここのアクションのオペレーションで、復旧させるためにnet adsを動作させています。
これで定期的にradtestを実行し、不良だった場合はnet adsで回復を試みることができます。
これだけじゃなくて、winbindとか、FreeRADIUSの生死も監視すれば完璧。