mk-mode BLOG

このブログは自作の自宅サーバに構築した Debian GNU/Linux で運用しています。
PC・サーバ構築等の話題を中心に公開しております。(クローンサイト: GitHub Pages

ブログ開設日2009-01-05
サーバ連続稼働時間
Reading...
Page View 合計
Reading...
今日
Reading...
昨日
Reading...

MRTGで警告メール送信!

[ サーバ構築 ] [ CentOS ]

こんばんは。

当方のサーバ(現在はCentOS5.4)では、MRTGによりネットワークトラフィックやディスク・メモリ使用量、CPU・ディスク温度などの監視をしています。

今回は、異常な値を記録した際にメールで警告するようにしてみました。 (取り急ぎ、ハードディスク温度について試してみました)

私は玄人ではありませんので、かなり調べた上での作業です。 それでも間違いはあるかもしれませんのであしからず。。。

作業記録

【前提条件】

※以下に出てくる「パラメータ」と「引数」を混同しないでください。

1.MRTG設定ファイル編集

MRTG設定ファイルに以下の記述を追加します。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
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"%E3%80%80%E2%86%90%E3%80%80%EF%BC%B5%EF%BC%B2%EF%BC%AC%EF%BC%88%E3%83%A1%E3%83%BC%E3%83%AB%E3%81%AE%E6%9C%AC%E6%96%87%E3%81%AB%E4%BD%BF%E7%94%A8%EF%BC%89
ThreshMaxI[hddtemp]: 60 ← 第一パラメーター最大値
ThreshMaxO[hddtemp]: 60 ← 第二パラメーター最大値
ThreshMinI[hddtemp]: 10 ← 第一パラメーター最小値
ThreshMinO[hddtemp]: 10 ← 第二パラメーター最小値

※ mrtg_warning.pl 、 mrtg_recovery.pl のスクリプトが実行される時には以下のものが引数として引き渡されるようです。

1
2
3
第1引数:ターゲット名(例:hddtemp)
第2引数:閾値        (例:60)
第3引数:現在値      (例:61)

2.スクリプトの作成

閾値を越えた場合、閾値内に戻った場合に起動するスクリプトを作成します。 ●閾値を越えた場合

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 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);

●閾値内に戻った場合

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 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