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の三種類あって数字が大きい方が太い線になる