ZabbixでKVMのpool-listの死活監視をする
pool-list
は一言で言うとイメージの置き場所の一覧です。
例えば、KVMが動作する環境でvirsh pool-list
というコマンドを打ち込むと
ストレージプールの現在の状態や自動起動設定はどうなっているかを確認できる。
[root@KVM]# virsh pool-list Name State Autostart ------------------------------------------- aiueo active yes default active yes gomi active no templates active yes
基本的には自動起動の設定をやるものだと思ってるんだけど、
何らかの原因(障害など)でストレージプールが起動ができなくなった場合がある。
今回は、これをZabbixで監視してみる。
ZabbixのUserParameterを利用する
Zabbixで事前に定義されていない監視をやりたい場合、自分でスクリプトを書いたりしなければならない。
そこで役立つのがUserParameterです。
KVMの監視は、Zabbixで事前に定義されていないものなので、
自分でスクリプトを書く必要があります。
まずはスクリプトを書く
下記のShellScriptを書きました。(virsh-pool-status.sh)
POOL_STATUS
の行で、virsh pool-list
から得られる情報をパースしています。
#!/bin/sh READ_ARGUMENT=$1 if [ "${READ_ARGUMENT}" = "" ];then ERROR=`date +"%Y%m%d:%H%M%S "`${0}' : empty argument $1' echo $ERROR exit fi POOL_STATUS=`sudo virsh pool-list | sed -e '1,2d' | sed -e 's/^ *//' | sed -e 's/ *$//' | sed -e 's/\s\+/,/g' | grep -w ${1} | cut -f2 -d ','` ACTIVE="active" DEAD="inactive" if [ ${POOL_STATUS[${READ}]} = ${ACTIVE} ]; then echo 1 elif [ ${POOL_STATUS[${READ}]} = ${DEAD} ]; then echo 0 else echo "" fi
1回目のsedで、1-2行目の不要な情報をカットします。
2,3回目のsed行前後の空白文字をカットし、
4回目のsedで複数の空白を,
に置換しています。
(これは後から、得られる情報を取り出しやすくするためです)
sedが終わった段階では下記のようになっているはずです。
# sudo virsh pool-list | sed -e '1,2d' | sed -e 's/^ *//' | sed -e 's/ *$//' | sed -e 's/\s\+/,/g' aiueo,active,yes default,active,yes gomi,active,yes templates,active,yes
あとは、grepで取り出すストレージプールを探して決めて、そこからcutコマンドで必要な列を抽出するだけです。
こんな感じで簡単に書くことができます。
POOL_STATUS
より下の行はactive,inactiveの情報を0 or 1の情報に変換しているだけです。
ACTIVE="active" DEAD="inactive" if [ ${POOL_STATUS[${READ}]} = ${ACTIVE} ]; then echo 1 elif [ ${POOL_STATUS[${READ}]} = ${DEAD} ]; then echo 0 else echo "" fi
ストレージプールを引数として渡して実行してみると1
や0
が帰ってくるはずです。
# sh virsh-pool-status.sh templates 1
スクリプトの配置と設定
スクリプトは/etc/zabbix/virsh-pool-status.sh
として配置し、実行権限をつけておきましょう。
また、大抵の環境ではvirsh
コマンドの実行はrootでやってますんで、zabbixユーザーにコマンドの実行権限を渡してやる必要があります。
visudo
コマンドを使って設定を変更します。
Defaults:zabbix !requiretty zabbix ALL = NOPASSWD: /bin/virsh
全部のコマンドの権限を渡すの必要は無いので、今回はvirshだけ渡します。
ユーザーパラメーターの定義
/etc/zabbix/zabbix_agentd.conf
に下記を追加しておきます。
UserParameter=virsh.pool_status[*],/etc/zabbix/virsh-pool-status.sh $1
これで設定は完了です。
ZabbixServerから値が取れるかチェックしてみる
]# zabbix_get -s IPADDR -k virsh.pool_status[templates] > 1
ふう。とれたー。
あとは、Webからぽちぽちするだけですね。