muninで指定したディレクトリのサイズを監視する

ディレクトリ別のサイズが知りたかったので作った。

実行ファイル本体

ファイル名はduで。
/usr/share/munin/pluginsにファイルを置いて、/etc/munin/plugins/以下にシンボリックリンクを置くのが普通。

#!/bin/sh
#
# Disk Usage
#
# sample conf
# [du]
# user root
# env.dirs /var/log:/var/www
#
#%# family=contrib
#%# capabilities=autoconf

du=${du:-`which du`}
dirs=${dirs:-/home}":"

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


while [ $dirs  ]
do  
        dir=${dirs%%:*}
        dirs=${dirs#*:}
        basename=`basename $dir`
        size=`$du -sb $dir | cut -f 1`
        echo "$basename.value $size"
done

設定ファイル

plungin-conf.d/du に以下のような設定ファイルを置いておく。

[du]
user root
env.dirs /var/log:/var/www

env.dirsは:区切りで監視対象のディレクトリを列記する。
userは


グラフの形式は面グラフを積み重ねていくグラフを描画するようにしている。
ただの線のグラフで積み重ねはいらないよと言う人は AREA, STACK となっている部分を LINE1 とかにしてください*1

ときどき取れなくなる?

ときどき値が取れなくてグラフが歯抜けになることがある。
ログには

Plugin timeout: du : システムコール割り込み

と残っている。
Munin Statistics - Wikiのようにcronでduのキャッシュを作るようにした方がいいのかもしれない。

*1:線グラフはLINE1, LINE2, LINE3の三種類あって数字が大きい方が太い線になる