Zabbix ローレベルディスカバリ(LLD)の拡張①
Zabbix ローレベルディスカバリ(LLD)の拡張②
Zabbix ローレベルディスカバリ(LLD)の拡張③
Zabbix ローレベルディスカバリ(LLD)の拡張④
Zabbix ローレベルディスカバリ(LLD)の拡張⑤
はじめに
監視ソフトでディスク使用率の監視をしていてアラートが発生したはいいけど、どこのフォルダが肥大化傾向にあるのか調査するのに四苦八苦したことはありませんか?また問題フォルダの当たりはついたけど過去どう推移してきたか知りたいといったことがあるかと思います。
増加が見込まれるフォルダがある程度絞れていれば、そのフォルダだけduコマンドの結果を取得すれば良いのですが、そうでない場合、数が多く対象も逐次変わるため、そうもいきません。
Zabbixのローレベルディスカバリ機能を使い、自動的に使用量の多いフォルダをピックアップし、それらに対して自動的にチェックする仕組みを考えてみました。
ディスク使用量の多いフォルダ(TopX)
ディスク使用量の多いフォルダのうち、多い順にX番目までのフォルダ名を返します。
zabbix_agentd.conf(エージェント側)での設定
UserParameter=vfs.du.discovery,/etc/zabbix/zabbix_discovery/vfs.du.discovery.sh $1
WebGUIでの設定
ディスカバリルール | |
---|---|
名前 | フォルダサイズのディスカバリ |
タイプ | Zabbixエージェント |
キー | vfs.du.discovery[5] |
アイテムのプロトタイプ | |
---|---|
名前 | フォルダサイズ[{#DIR_NAME}] |
タイプ | Zabbixエージェント |
キー | system.run["du -bs {#DIR_NAME}"] |
#!/bin/bash
TOP_line=$1
deny_list="$(cd $(dirname $0); pwd)/vfs.du.discovery_deny.list"
LIST=`du -b -S -X ${deny_list} /* | sort -nr | head -${TOP_line}`
if [ "${LIST}" = "" ] ;then
echo "ZBX_NOTSUPPORTED"
exit 1
fi
IFS=$'\n'
echo -n "{\"data\":["
FIRST=1
for line in ${LIST}
do
DIR_VAR=`echo ${line} | awk '{print $2}'`
if [ ${FIRST} -eq 1 ] ; then
FIRST=0
else
echo -n ","
fi
echo -e -n "{\"{#DIR_NAME}\":\"${DIR_VAR}\"}"
done
echo "]}"
## duコマンドのチェック除外リスト。ライブラリや静的なファイルしかないことが分かっているフォルダを記述。
## また使用量は多いが増加しないことが最初から判明している場合は除外したほうが良いでしょう。
## 固定サイズで確保しているRDBのデータファイルの保管場所とか
/bin
/boot
/cgroup
/dev
/lib
/lib64
/lost+found
/media
/misc
/mnt
/net
/proc
/sbin
/selinux
/srv
/sys
/usr/include
/usr/lib
/usr/lib64
/usr/libexec
# zabbix_get -s 192.168.0.1 -k "vfs.du.discovery[5]" | jq "."
{
"data": [
{
"{#DIR_NAME}": "/var/tmp"
},
{
"{#DIR_NAME}": "/var/tmp/hoge"
},
{
"{#DIR_NAME}": "/root"
},
{
"{#DIR_NAME}": "/home/hoge"
},
{
"{#DIR_NAME}": "/var/log"
}
]
}