Pimp my Code. @wataru420

My name is Wataru Fukunaga.


テーマ:
066/365 Information Technology

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.out
if [ "$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
    fi
fi

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 0
fi

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で詳しく見る
AD
いいね!した人  |  コメント(4)

AD

Amebaおすすめキーワード

Ameba人気のブログ

Amebaトピックス

ランキング

  • 総合
  • 新登場
  • 急上昇