MRTGログの様々な監視方法

■MRTGは「mrtg.cfg」の設定に沿って
 以下の3つのサイクルで動作する。

 1.情報を取得
 2.取得した情報をログに保存
 3.グラフ化

「mrtg.cfg」の設定が正しい前提で、最新のログが取れているという事は、情報取得も出来ていると考えてよい。
Debianの場合(Linux)

■MRTGログの監視を端末から。
 ※実行間隔5分のリアルタイム監視用

$ while true;do head -1 /var/www/mrtg/*.log ;sleep 300;done

■MRTGログの監視をcron経由のシステムメールで。
 ※INFO、ERRORを使ってsyslog風に。

 ・UNIX時間(秒単位)を取得
 ・UNIX時間を「MRTGのログ取得時間」単位にまるめるCHECKTIMEを計算。
  ※CHECKTIMEは10分前とする。
 ・MRTGのログのUNIX時間の方が小さい(10分前よりも過去)の場合は
  ログを取得において「ERROR:」と判定する。
 ・書式を合わせる為、それ以外は「INFO:」とする。
 ・全体の出力をアルファベット順にソートする(「ERROR:」が先に表示される)

$ sudo vim mrtgcheck.sh
$ sudo cat mrtgcheck.sh
#!/bin/sh
LANG=C
MRTGLOGDIR="/var/www/mrtg"
UNIXTIME=`date '+%s'`
MRTGTIME=600
CHECKTIME=$(echo $UNIXTIME | awk '{print $1-($1%'${MRTGTIME}')}')
echo "# Time is `date`, Unix Time is ${UNIXTIME}, Check Time is ${CHECKTIME}"
for list in ${MRTGLOGDIR}/*.log;do
  TARGET=$(head -1 ${list} | awk '{print $1}')
  if [ ${CHECKTIME} -lt ${TARGET} ];then
    echo "INFO: `head -1 ${list}` ${list}"
  else
    echo "ERROR: `head -1 ${list}` ${list}"
  fi
done | sort -k 1

$ sudo chmod 500 mrtgcheck.sh

■cronに登録する。
 ※debianではcronで実行した結果がシステムメールでも読める。

$ sudo mv mrtgcheck.sh /etc/cron.hourly/
$ sudo /etc/cron.hourly/mrtgcheck.sh
# Time is Sun Jan 22 01:16:13 JST 2012, Unix Time is 1327162573, Check Time is 1327162200
ERROR: 1326539852 -1 -1 /var/www/mrtg/127.0.0.1_10.log
ERROR: 1326539852 -1 -1 /var/www/mrtg/127.0.0.1_9.log
ERROR: 1327145701 -1 -1 /var/www/mrtg/127.0.0.1_4.log
ERROR: 1327145734 -1 -1 /var/www/mrtg/127.0.0.1_3.log
INFO: 1327162501 0 0 /var/www/mrtg/cpu.log
INFO: 1327162501 15 15 /var/www/mrtg/disk.log
INFO: 1327162501 450659518 3757334891 /var/www/mrtg/127.0.0.1_2.log
INFO: 1327162501 550804 6124172 /var/www/mrtg/memory.log
INFO: 1327162502 115960 1016272 /var/www/mrtg/cache.log
INFO: 1327162502 15 0 /var/www/mrtg/self.log
INFO: 1327162502 2 0 /var/www/mrtg/diskio.log
INFO: 1327162502 27 99 /var/www/mrtg/mem.log

■上記の1時間に1回のメールを先にcron経由でチェックする。
 ※以下は5分置きにシステムメールで確認。

$ sudo EDITOR=vim crontab -e
$ sudo EDITOR=vim crontab -l
# m h  dom mon dow   command
*/5 * * * * /etc/cron.hourly/mrtgcheck.sh

■システムメールでは無く、ファイルに保存(追記型)したい場合
 ※「MAILTO=""」でメール送信の無効化。
  定期的な稼動チェック用

$ sudo EDITOR=vim crontab -e
$ sudo EDITOR=vim crontab -l
# m h  dom mon dow   command
MAILTO=""
*/5 * * * * /etc/cron.hourly/mrtgcheck.sh >> /var/log/mrtgcheck.log

$ sudo touch /var/log/mrtgcheck.log
$ sudo tail -f /var/log/mrtgcheck.log

■何秒前に実行したかだけを知らせる
 ※正常性確認用、判断は人が行う。

$ sudo vim /etc/cron.hourly/mrtglast.sh
$ sudo cat /etc/cron.hourly/mrtglast.sh
#!/bin/sh
LANG=C
MRTGLOGDIR="/var/www/mrtg"
UNIXTIME=`date '+%s'`
echo "# Time is `date`"
for list in ${MRTGLOGDIR}/*.log;do
  TARGET=$(head -1 ${list} | awk '{print $1}')
  echo "${UNIXTIME} ${TARGET} ${list}" | \
  awk '{print "# " $1-$2 " sec ago: " $3}'
done | sort -k 2 -n

$ sudo chmod 500 /etc/cron.hourly/mrtglast.sh
$ sudo /etc/cron.hourly/mrtglast.sh
# Time is Sun Jan 22 01:07:26 JST 2012
# 145 sec ago: /var/www/mrtg/127.0.0.1_2.log
# 145 sec ago: /var/www/mrtg/cache.log
# 145 sec ago: /var/www/mrtg/cpu.log
# 145 sec ago: /var/www/mrtg/disk.log
# 145 sec ago: /var/www/mrtg/diskio.log
# 145 sec ago: /var/www/mrtg/mem.log
# 145 sec ago: /var/www/mrtg/memory.log
# 145 sec ago: /var/www/mrtg/self.log
# 16312 sec ago: /var/www/mrtg/127.0.0.1_3.log
# 16345 sec ago: /var/www/mrtg/127.0.0.1_4.log
# 622194 sec ago: /var/www/mrtg/127.0.0.1_10.log
# 622194 sec ago: /var/www/mrtg/127.0.0.1_9.log