maehachi08 Anything Blog

2014年02月05日
Munin アラート通知機能を試す(ファイル記録、メール通知)

今回は、各々の監視リソースに対して閾値を設定し、アラートを通知する方法について書いていきます。アラート通知方法はファイル記録とメール通知です。

Muninでのアラート通知

Munin 1.2以降のバージョンでは、Munin プラグインが取得した値が、設定した閾値を超過したことを検知した場合、muninマスタからWarningやErrorなどのアラートを通知する機能を実装しています。

Munin 1.4系の複数のバージョン、もしくはそれより古いバージョンではアラート通知機能が動作しない 既知のバグ が報告されているようです。これから新しく構築する場合は、Munin 2系を使用することで回避可能です。

Muninの閾値設定方法

閾値設定は/etc/munin/munin.confで行います。

アラートレベルは、wariningとcriticalの2種類あります。書き方は [ プラグイン名 ].warining [ 閾値 ] もしくは、 [ プラグイン名 ].critical [ 閾値 ] のように書けます。
また、閾値設定は監視対象ホスト単位で設定します。

たとえば、localhostのcpuリソース監視にてuser時間が10%を超えた場合にwarningアラートを通知するための閾値設定は以下のようになります。

# /etc/munin/munin.conf
# 
[localhost]
    address 127.0.0.1
    use_node_name yes 
    cpu.user.warning 10

これは以下の書き方と同じです。

# /etc/munin/munin.conf
# 
cpu.user.warning :10

上記した2つの書き方は設定した値を上回った場合にアラートを通知する設定ですが、逆に、設定した値を下回った場合にアラートを通知することも可能です。ディスク空きスペースやメモリのfree容量の監視で使えそうですね。書き方は閾値の数値の後ろにコロンを付けます。

# /etc/munin/munin.conf
# 
memory.free.critical 300000000:

Muninのアラート通知方法(ファイル記録)

設定した閾値を超過したアラートをログファイルに記録することが出来ます。

Muninではアラートの通知先設定等は /etc/munin/munin.confcontact.[contact identifier].command といった記述方法で設定します。

contact.[contact identifier].command でアラート通知をファイルに書き出すコマンドを定義するだけでMuninのアラート通知をファイルに記録することができます。

# /etc/munin/munin.conf
# 
# Alert log
contact.logger.command tee -a /var/log/munin/alert.log
# tail -f /var/log/munin/alert.log
localhost :: localhost :: CPU usage
        WARNINGs: user is 31.46 (outside range [:10]). 

localhost :: localhost :: CPU usage
        OKs: user is 3.24.

Muninのアラート通知方法(メール送信)

設定した閾値を超過したアラートをメールで通知することが出来ます。

Muninではアラートの通知先設定等は /etc/munin/munin.confcontact.[contact identifier].command といった記述方法で設定します。

contact.[contact identifier].command でアラート内容をメール送信するコマンドを定義するだけでMuninのアラート通知をメール通知させることができます。

以下設定では、メール送信コマンドだでなく、通知対象のアラートレベル(contact.[contact identifier].always_send)、1つの通知メールで何件のアラートを含まるか(contact.[contact identifier].max_messages)といった設定もしています。

# /etc/munin/munin.conf
# 
# Alert mail
#
# 1つのメール通知で報告されるアラート数
# 未設定(default)では、同時に検出された内容が(監視ノード毎に)1つのメールにまとめて送信される

contact.mail.max_messages   1

# メール通知対象のアラートレベル
contact.mail.always_send        warning critical

# mailコマンド
contact.mail.command mail -s "[${var:group};${var:host}] -> ${var:graph_title} -> \
                              warnings: ${var:wfields} / \
                              criticals: ${var:cfields} / \
                              unknowns: ${var:ufields}" example@example.com

CPUのユーザ時間が10%を超えた場合にログ記録 / メール通知する

今回はCPU使用率に対するユーザ時間が10%を超えた場合に任意のメールアドレス宛てにメール通知します。Muninの閾値監視、および通知機能はmuninマスタの機能ですので設定は/etc/munin/munin.confです。

# /etc/munin/munin.conf
# 
# Alert log
contact.log.command tee -a /var/log/munin/alert.log

# Alert mail
contact.email.max_messages   1
contact.email.always_send        warning critical
contact.email.command mail -s "[${var:group};${var:host}] -> ${var:graph_title} -> \
                              warnings: ${var:wfields} / \
                              criticals: ${var:cfields} / \
                              unknowns: ${var:ufields}" example@example.com 

# a simple host tree
[localhost]
    address 127.0.0.1
    use_node_name yes
    cpu.user.warning 10

動作テスト

今回はstressコマンドというCPUに対して負荷を与えることの出来るテストツールを使用してusers時間のCPU割当を10%以上まで上げてみます。stressコマンドはEPELからインストールします。

# stressコマンドツールのインストール
yum --enablerepo=epel install -y stress 

# stressコマンドでCPUに負荷をかける
stress -c 2 

別ウィンドウで/var/log/munin/alert.log を見るとWarningメッセージが記録されました。

localhost :: localhost :: CPU usage
        WARNINGs: user is 29.35 (outside range [:10]).

また、設定したメールアドレスに以下のような通知メールが届きます。

次に、実行していたstressコマンドをControl + cで停止させます。/var/log/munin/alert.log を見るとOKメッセージが記録されました。

localhost :: localhost :: CPU usage
        OKs: user is 2.08.

また、設定したメールアドレスに以下のような通知メールが届きます。

Munin 閾値監視で他にできることをザッと書く

syslogへ記録する

スクリプトを実行する

記録されるメッセージフォーマットを変更する

send_nscaを利用して閾値超過をNagiosに通知する(Nagios passive checks)

check_munin_rrd プラグインを利用してNagiosがMuninのRRDファイルを監視する(Nagios active checks)

以上がMuninによる閾値監視と通知方法(ファイル記録、メール通知)に関する設定です。