Javaのアプリを運用しているとき、Log4jやLogbackなんかで出力しているlogファイルをリリース直後とか監視したりするわけですが、リリース後以外も外部APIに引きずられたりして突如エラーを吐き始める場合があります。
そんな状況を可視化したいなと思ってJavaのlogファイルを監視するMuninのプラグインを作ってみました。(別にJavaじゃなくても使えるけど)
プラグインの内容
やってることはlogファイル(configurationでパスを指定可能)の5分以内のログをgrepして、FAITAL、ERROR、WARNの数を数えているだけです。これでログ内のERRORの数等がグラフで可視化されるというわけです。
#!/bin/bash# -*- sh -*-
: << =cut
=head1 NAME
java_log_errorcount - Plugin to count errors in java log
=head1 CONFIGURATION
This plugin uses the following configuration variables
[java_log_errorcount] env.logfile - log file path env.dateformat - log's date foramt
=head2 DEFAULT CONFIGURATION
The default configuration is
[java_log_errorcount] env.logfile /usr/local/tomcat/logs/catalina.out env.dateformat "%Y-%m-%d %H:%M:"
=head1 AUTHOR
@wataru420
=head1 LICENSE
Unknown license
=head1 MAGIC MARKERS
#%# family=auto #%# capabilities=autoconf
=cut
LOGFILE=/usr/local/tomcat/logs/catalina.outif [ "$logfile" ]; then LOGFILE=$logfile ; fi
DATEFORMAT="%Y-%m-%d %H:%M:"if [ "$dateformat" ]; then DATEFORMAT=$dateformat ; fi
if [ "$1" = "autoconf" ]; then if [ -e ${LOGFILE} ]; then echo yes exit 0 else echo no exit 1 fifi
if [ "$1" = "config" ]; then echo 'graph_title java error count' echo 'graph_args --base 1000 -l 0' echo 'graph_vlabel count/5min' echo 'graph_category java' echo 'graph_info Java logs data.'
echo 'fatal.label fatal count' echo 'fatal.draw LINE2' echo "fatal.info fatal count in ${LOGFILE}"
echo 'error.label error count' echo 'error.draw LINE2' echo "error.info error count in ${LOGFILE}"
echo 'warn.label warn count' echo 'warn.draw LINE2' echo "warn.info warn count in ${LOGFILE}" exit 0fi
grep_log(){ COUNT=0 for i in `seq 1 5` do DATE=`date --date "$i minutes ago" +"${DATEFORMAT}"` #echo ${DATE} TMPCOUNT=`grep "${DATE}" ${LOGFILE} | grep $1 | wc -l` let COUNT=${TMPCOUNT}+${COUNT} done return ${COUNT}}
grep_log "FATAL"echo "fatal.value " $?grep_log "ERROR"echo "error.value " $?grep_log "WARN"echo "warn.value " $?こんな感じで必要な項目を標準出力に出すようにするだけでプラグインになるんですね。
Munin 便利だなー
使い方
プラグインは 755の権限で /usr/share/munin/plugins/java_log_errorcount として配置します。で、シンボリックリンクを貼ります。
ln -s /usr/share/munin/plugins/java_log_errorcount /etc/munin/plugins/
一応 munin-node を再起動したほうがいいのかな?
しばらくすると画面に反映されます。
設定ファイル
デフォルトでは /usr/local/tomcat/logs/catalina.out のログを参照するようになっています。
変更したい場合は設定ファイルで変更できます。
下記のようなファイルを作って下さい。
/etc/munin/plugin-conf.d/java_log_errorcount
[java_log_errorcount]env.logfile /usr/local/tomcat/logs/app.logその他日付のフォーマットも変更できるようになっています。
感想
普段はMRTGを使う事が多いのですが、こうも簡単にプラグインが作れたりするとMunin最高ってなってしまいそう。参考にしたサイト
- Munin の Plugin を作成する
- http://blog.enjoitech.jp/article/85
- muninで独自プラグインを作成
- http://koexuka.blogspot.jp/2011/08/munin.html
- munin-run太郎
- http://cequiestaime.blogspot.jp/2011/03/munin-run.html
- munin-monitoring / contrib
- https://github.com/munin-monitoring/contrib/tree/master/plugins
| キャパシティプランニング ― リソースを最大限に活かすサイト分析・予測・配置 John Allspaw 佐藤 直生 オライリージャパン 2009-03-19 売り上げランキング : 106813 Amazonで詳しく見る |