2012年11月21日水曜日

muninで特定のディレクトリのサイズを測るプラグイン


muninで指定したディレクトリのサイズを監視する(キャッシュ対応)
http://d.hatena.ne.jp/uunfo/20100414/1271244655

使ってみました

muninのデフォルトで入るプラグインではパーセンテージ%のチェックはあるのですが、サイズは測ってくれません
これは、特定ディレクトリのサイズを記録しておきたいときに使えます
duで集計しているので/とかは鈍いですけど、決まったディレクトリ、例えば、logやmysqlのデータディレクトリを見るのに最適かもです

以下作業ログ

muninのプラグインファイルを用意
# emacs /usr/share/munin/plugins/du
#!/bin/sh
#
# Disk Usage (per directory)
# version 1.1
#
# sample conf
# [du]
# user root
# env.dirs /var/log:/var/www
# #env.cache /tmp/munin-plugin-du
#
# crontab to use cache
# 2 * * * * rm /tmp/munin-plugin-du && /usr/sbin/munin-run du
#
#%# family=auto
#%# capabilities=autoconf

du=${du:-`which du`}
dirs=${dirs:-/home}":"
cache=${cache:-/tmp/munin-plugin-du}

if [ "$1" = "autoconf" ]; then
        if [ -x $du ]; then
                echo "yes"
                exit 0
        else
                echo "no (command 'du' not found)"
                exit 1
        fi
fi

if [ "$1" = "config" ]; then

        echo 'graph_title Disk usage '
        echo 'graph_args --upper-limit 1000 -l 0'
        echo 'graph_vlabel size (byte)'
        echo 'graph_category disk'
        echo 'graph_info This graph shows size of designated directories.'

        stack=0
        while [ $dirs  ]
        do
                dir=${dirs%%:*}
                dirs=${dirs#*:}

                basename=`basename $dir`
                echo "$basename.label $dir"
                if [ $stack -eq 0 ]; then
                        echo "$basename.draw AREA"
                        stack=1
                else
                        echo "$basename.draw STACK"
                fi
                
        done
        exit 0
fi

# Delete cache if two hours (120 minutes) have passed since its last modification.
find `dirname $cache` -name `basename $cache` -mmin +120 | while read file
do
        rm $file
done

if [ -e $cache ]; then
# Use cache if it exists.
        cat $cache
else
# Excecute du and create a cache file if it does not exist.
        while [ $dirs  ]
        do  
                dir=${dirs%%:*}
                dirs=${dirs#*:}
                basename=`basename $dir`
                
                size=`$du -sb $dir | cut -f 1`
                echo "$basename.value $size"
                echo "$basename.value $size" >> $cache
        done
fi

exit 0
実行権限を付与
# chmod 755 /usr/share/munin/plugins/du
munin-nodeの設定ファイルに追記
今回は、/var/lib/mysqlと/homeディレクトリをチェックします
# emacs /etc/munin/plugin-conf.d/munin-node
[du]
user root
env.dirs /var/lib/mysql:/home
env.cache /tmp/munin-plugin-du
crontabの設定
1時間に1回の実行としました
# crontab -e
0 * * * * rm /tmp/munin-plugin-du & /usr/sbin/munin-run du
動作チェック
/usr/sbin/munin-run du
シンボリックリンクを張る
# ln -s /usr/share/munin/plugins/du /etc/munin/plugins/du 
munin-nodeをリスタート
# /etc/init.d/munin-node restart
以上です