経緯
system.run
のアイテムキーで find
コマンド使ってファイル数等を集計して監視していたのですが、ファイル数が多いと find
の結果が返ってくるまでのタイムラグで監視の遅延が発生していたので、アイテムキーを自作して監視方法を変更しました。
環境
- CentOS 5.7 64bit
- Zabbix Server 2.0
- Zabbix Agent 2.0.8
監視要件
- 監視対象ディレクトリに15分以上存在するファイルがあった際にアラートを上げる
監視方法
変更前
-
system.run
のアイテムキーでfind
コマンド使ってファイル数等を集計
変更後
- 監視対象サーバのスクリプトにて監視対象ディレクトリのファイル数をカウントし、その結果をZabbixで取得
手順
1. スクリプトの作成
1.1. ディレクトリのファイル数を取得してファイルに吐き出すスクリプトを作成
file_check.sh
# !/bin/sh
QUEUE="<監視対象ディレクトリ>"
WAIT_TIME="15"
rm -f /tmp/queue.wait
for QUEUE_WAIT_DIR in `echo ${QUEUE}`
do
QUEUE_WAIT_NUM=`find ${QUEUE_WAIT_DIR} -type f -mmin +${WAIT_TIME} | wc -l`
if [ -e ${QUEUE_WAIT_DIR} ] ; then
echo "${QUEUE_WAIT_DIR} ${QUEUE_WAIT_NUM}" >> /tmp/queue.wait
fi
done
1.2. cronに作成したスクリプトを登録
crontab
$ crontab -e
* * * * * <作成したスクリプト> > /dev/null 2>&1
2. zabbix-agentd.confへのパラメータ追加
2.1. 下記パラメータを最終行に追加
引数付きパラメータについてはこちらを参考にして下さい。
下記のqueue.size
とqueue.wait
がキーの名前となります。
監視対象ディレクトリ内のファイル数の数値だけを取得します。
zabbix_agentd.conf
# vim /etc/zabbix/zabbix_agentd.conf
UserParameter=queue.wait[*],grep $1 /tmp/queue.wait | cut -f 2 -d " "
2.2. zabbix-agentプロセスの再起動
# service zabbix-agent restart
3. アイテムとトリガーの作成
3.1. ZabbixサーバのGUIからこんな感じでアイテムを作成する
3.2. 続いてトリガーを作成する
3.3. 条件式について
- いつもトリガーの条件式の書き方忘れてしまうので書いておきます。
{テンプレート名:queue.wait[<監視対象ディレクトリ>].count(#2,0,gt)}>0
上記は、直近2回の計測で監視対象ディレクトリにファイルが1つでもある状態が1回でもあったらトリガーを発動させます。
書式
{テンプレート名:アイテム名.count(直近何回から取得するか, 値, "gtとかeqとか")}>回数
以上!
後記
Zabbix難しいです。
もっと色々できるのに全然活用できてないので精進します!
こんなまどろっこしいやり方やってる時点であれな感じですね!