■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
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
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
*/5 * * * * /etc/cron.hourly/mrtgcheck.sh
■システムメールでは無く、ファイルに保存(追記型)したい場合
※「MAILTO=""」でメール送信の無効化。
定期的な稼動チェック用
$ sudo EDITOR=vim crontab -e
$ sudo EDITOR=vim crontab -l
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
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