muninでファイルディスクリプタをモニタリングする

ファイルディスクリプタをモニタリングしたい

とある案件で、ファイルディスクリプタが枯渇して「Too many open files」が出ることがありました。
原因はjavaにある、ということでjavaで使用しているファイルディスクリプタの量を計測することにしました。

だがしかし、プラグインを探しても見当たらない。。。
「ないなら作ればええやん」と誰かが言っていたので、初めてプラグイン作ってみました(〃∇〃)

書いてみる

lsofコマンドをつかって、javaが開いているファイル数を返すだけです。

#!/bin/sh

#%# family=auto
#%# capabilities=autoconf

if [ "$1" = "autoconf" ]; then
	if [ -x /usr/sbin/lsof ]; then
		echo yes 
		exit 0
	else
		echo "no"
		exit 0
	fi
fi

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

        FDMAX=`ulimit -n`
        FDWARNING=`echo "$FDMAX * 0.8" | bc -l`

	echo 'graph_title FileDescriptors'
	echo 'graph_args --base 1000 -l 0 '
	echo 'graph_vlabel open files'
	echo 'graph_category java'
	echo 'graph_info number of file descriptors in JAVA.'
	echo 'java_fd.label file descliptors in JAVA'
        echo 'java_fd.draw LINE2'
	echo 'java_fd.min 0'
	echo "java_fd.max $FDMAX"
	echo "java_fd.warning $FDWARNING"
	echo 'java_fd.info The number of FileDescriptors in JAVA.'
	exit 0
fi

echo -n "java_fd.value "
lsof | grep -i java | wc -l 

コンフィグ

lsofはrootで実行するため/etc/munin/plugin-conf.d/java_fd(と名付けたので)を追加します。

[java_fd]
user root 

完成!

graph_infoとかどう書くのがかっこいいのか募集しております。
java_fdよりjava_fd_countとかのほうがそれっぽいかな。。。

追記

FDMAXがrootなので意味ない。直そう。