MRTGで警告メール送信!
Updated:
当方のサーバ(現在はCentOS5.4)では、MRTGによりネットワークトラフィックやディスク・メモリ使用量、CPU・ディスク温度などの監視をしています。
今回は、異常な値を記録した際にメールで警告するようにしてみました。 (取り急ぎ、ハードディスク温度について試してみました)
私は玄人ではありませんので、かなり調べた上での作業です。 それでも間違いはあるかもしれませんのであしからず。。。
作業記録
【前提条件】
- OSはCentOS5.4
- MRTGインストール・設定済み ( こちらを参照 → MRTGでハードディスク温度監視! )
- MRTGの基本的なことを理解している
※以下に出てくる「パラメータ」と「引数」を混同しないでください。
1.MRTG設定ファイル編集
MRTG設定ファイルに以下の記述を追加します。
SetEnv[_]: EMAIL="******" ← メール送信先ユーザ
HOST="******.mk-mode.com" ← ホスト名(メールの件名に使用)
ThreshDir: /var/www/mrtg ← 作業用ディレクトリを指定
ThreshProgI[_]: /root/mrtg_warning.pl ← 第一パラメーター閾値を超えた場合に起動
ThreshProgO[_]: /root/mrtg_warning.pl ← 第二パラメーター閾値を超えた場合に起動
ThreshProgOKI[_]: /root/mrtg_recovery.pl ← 第一パラメーター閾値内に戻った場合に起動
ThreshProgOKO[_]: /root/mrtg_recovery.pl ← 第二パラメーター閾値内に戻った場合に起動
↑ 共通設定(設定ファイルの最初の方に追加)
↓ 「 hddtemp 」用の設定(「 hddtemp 」の所に追加)
SetEnv[hddtemp]: URL="http://www.mk-mode.com/mrtg/hddtemp.html" ← URL(メールの本文に使用)
ThreshMaxI[hddtemp]: 60 ← 第一パラメーター最大値
ThreshMaxO[hddtemp]: 60 ← 第二パラメーター最大値
ThreshMinI[hddtemp]: 10 ← 第一パラメーター最小値
ThreshMinO[hddtemp]: 10 ← 第二パラメーター最小値
※ mrtg_warning.pl 、 mrtg_recovery.pl のスクリプトが実行される時には以下のものが引数として引き渡されるようです。
第1引数:ターゲット名(例:hddtemp)
第2引数:閾値 (例:60)
第3引数:現在値 (例:61)
2.スクリプトの作成
閾値を越えた場合、閾値内に戻った場合に起動するスクリプトを作成します。 ●閾値を越えた場合
# vi /root/mrtg_warning.pl
#!/usr/bin/perl
$to = $ENV{'EMAIL'};
$from = "mrtg";
$subject = "[ Warning ] $ARGV[0] on $ENV{'HOST'}";
open(MAIL,"|/usr/bin/nkf -j | /usr/sbin/sendmail -t $to");
print MAIL "From: $from\n";
print MAIL "To: $to\n";
print MAIL "Subject: $subject\n\n";
print MAIL `date` . "$ARGV[0] が閾値 を超えました。\n";
print MAIL "------------------------------------------------- \n";
print MAIL " 閾値 : $ARGV[1] \n";
print MAIL " 現在の値 : $ARGV[2] \n";
print MAIL "------------------------------------------------- \n\n";
print MAIL "$ENV{'URL'} \n";
close(MAIL);
●閾値内に戻った場合
# vi /root/mrtg_recovery.pl
#!/usr/bin/perl
$to = $ENV{'EMAIL'};
$from = "mrtg";
$subject = "[ Recovery ] $ARGV[0] on $ENV{'HOST'}";
open(MAIL,"|/usr/bin/nkf -j | /usr/sbin/sendmail -t $to");
print MAIL "From: $from\n";
print MAIL "To: $to\n";
print MAIL "Subject: $subject\n\n";
print MAIL `date` . "$ARGV[0] が正常値に戻りました。\n";
print MAIL "------------------------------------------------- \n";
print MAIL " 閾値 : $ARGV[1] \n";
print MAIL " 現在の値 : $ARGV[2] \n";
print MAIL "------------------------------------------------- \n\n";
print MAIL "$ENV{'URL'} \n";
close(MAIL);
3.動作確認
試験的にMRTG設定ファイル内の閾値を変更しながらMRTGを実行させてみて、MRTG設定ファイル内に設定したユーザ宛に正しくメールが送信されることを確認する。 ※一度閾値を越えると「 ThreshDir 」で設定したフォルダ内に 「 mrtg.cfg.hddtemp.maxI 」、「 mrtg.cfg.hddtemp.maxO 」 といったファイルが作成されます。 このファイルの有無によってメール送信をするかしないかの判断をしているようです。 閾値内に戻るとこれらのファイルが削除されます。
今回の作業は以上です。
今回はハードディスクの温度で試しましたが、他のターゲットについても同様に実行できると思います。
Comments