server-memo.net

Muninで閾値設定とメール通知を行う方法

   

「Munin」で監視している項目について閾値を設定して、閾値を超えた場合メール通知をするための方法です。

閾値の追加

「Munin」で監視している項目に、閾値を設定することで「Warning」や「Critical」といった警告レベルを設定することが出来ます。

警告レベルを設定することで、監視画面で障害が起こりそうな項目を通知したり、メールによる通知なども行うことが出来るようになります。

設定書式

閾値設定は監視サーバの設定ファイルである「munin.conf」で行います。

設定内容はとても簡単で、下記の形式で閾値を設定することが出来ます。

プラグイン名.監視項目名.警告レベル(warning または critical) 閾値

この設定は、監視対象サーバが設定されている部分記述する必要があります。

閾値設定について

設定する閾値は「上限値」のほかに「下限値」や「範囲」を指定することもできます。

上限値の指定
:上限値 (上限値は:を省略可能)
下限値の指定
下限値:
範囲の指定
下限値:上限値

ディスク使用量に閾値を設定

設定例として、ディスク使用量の監視を行っている「df」プラグインの監視結果に、閾値を設定していきます。

監視確認名の確認

「プラグイン名」は分かっているので、「監視項目名」を確認するために「munin-run」コマンドを使用して「df」ブラグインを実行させます。

これは監視対象サーバ上で実行してください。

# munin-run df
_dev_mapper_centos_munin_root.value 3.73431695961871
_dev_sda1.value 20.5038262798179

実行結果から、下記の項目を監視していることが分かりました。

  • _dev_mapper_centos_munin_root
  • _dev_sda1

取得した値は「df」コマンドの結果と比較すると、使用(%)の値であることがわかりますので、この値を閾値として設定します。

# df -h
ファイルシス                  サイズ  使用  残り 使用% マウント位置
/dev/mapper/centos_munin-root    28G  1.1G   27G    4% /
devtmpfs                        481M     0  481M    0% /dev
tmpfs                           490M     0  490M    0% /dev/shm
tmpfs                           490M   44M  447M    9% /run
tmpfs                           490M     0  490M    0% /sys/fs/cgroup
/dev/sda1                       497M  102M  395M   21% /boot

munin.confへ設定

プラグイン名と監視項目名が分かったので、「munin.conf」に設定を行っていきます。

# cp -p /etc/munin/munin.conf /etc/munin/munin.conf_yyyymmdd
# vi /etc/munin/munin.conf 
設定内容

今回は簡単に動作試験できるように、「/」ディレクトリの使用量が2% を超えると「warning」とし、5%を超えると「critical」を通知するという閾値を設定しています。

dfプラグインwarningの閾値設定
df._dev_mapper_centos_munin_root.warning 2
dfプラグインcriticalの閾値設定
df._dev_mapper_centos_munin_root.critical 5
設定箇所

今回は自分自身(localhost)に閾値を設定していくので、[localhost]の監視設定部分に閾値の設定を追加していきます。

[localhost]
    address 127.0.0.1
    use_node_name yes
    df._dev_mapper_centos_munin_root.warning 2
    df._dev_mapper_centos_munin_root.critical 5

ちなみに、「df」プラグイン初期の閾値は「waring」が92%で「critical」が98%に設定されています。

プラグインの設定内容については「munin-run プラグイン名 config」コマンドで確認することが出来ます。

# munin-run df config
graph_title Disk usage in percent
graph_args --upper-limit 100 -l 0
graph_vlabel %
graph_scale no
graph_category disk
_dev_mapper_centos_munin_root.label /
_dev_mapper_centos_munin_root.warning 92
_dev_mapper_centos_munin_root.critical 98
_dev_sda1.label /boot
_dev_sda1.warning 92
_dev_sda1.critical 98

動作確認

現状でディスク使用量が4%であるため「warning」の通知が表示されるはずなので、webブラウザで確認してみます。

munin_shikiichi_00

画面左の「Problems」欄で「Warning」が発生していることが確認できます。

また、画面下部を見るとそれぞれの閾値が表示されていて、「Warn」部分に色がついていて閾値を超えていることがわかります。

「Critical」の閾値についても動作試験をするために、2Gの テストデータの作成します。

# dd if=/dev/zero of=test-2G bs=1M count=2048
2048+0 レコード入力
2048+0 レコード出力
2147483648 バイト (2.1 GB) コピーされました、 12.9282 秒、 166 MB/秒

ディスクの使用量を見てみると12%なので「Critical」に設定した5%の閾値を超えています。

# df -h
ファイルシス                  サイズ  使用  残り 使用% マウント位置
/dev/mapper/centos_munin-root    28G  3.1G   25G   12% /
devtmpfs                        481M     0  481M    0% /dev
tmpfs                           490M     0  490M    0% /dev/shm
tmpfs                           490M   44M  447M    9% /run
tmpfs                           490M     0  490M    0% /sys/fs/cgroup
/dev/sda1                       497M  102M  395M   21% /boot

「Munin」がデータを収集するのを待ってからWebブラウザで確認してみたところ、無事「Critical」が発生していることが確認できました。

munin_shikiichi_03

これで「Munin」への閾値設定は完了となります。

メール通知

「Munin」に設定した閾値を利用して、メール通知を行う方法を説明していきます。

事前準備

「Munin」からメールを送信する際に「mail」コマンドを使用するため、「mail」コマンドがインストールされていない場合は事前にインストールしておいてください。

CentOSであれば「mailx」パッケージをインストールすると、「mail」コマンドが使用できるようになります。

# yum install mailx

設定項目

「Munin」からのメール通知設定は、「munin.conf」に下記のメール送信に関する設定を追加することで実現できます。

  • メール送信先設定
  • 一通のメールに表示するアラート数
  • メール通知する障害レベル設定

それぞれの設定内容について、詳しく説明していきます。

メール送信先設定

メールによるアラート通知先の名前を設定して、そこに通知先のメールアドレスや、メールの件名を指定していきます。

contact.通知先名.command mail -s "メールの件名" 通知先メールアドレス
通知先名

どこ宛に通知するメールなのかが分かるような名前を設定します。

例えば、管理者宛ならば「admin」とか、Webサーバを管理しているチーム宛ならば「web_team」といったように一目でわかりやすい名前を設定してください。

メールの件名

「Munin」から通知されるメールの件名となるので、どのサーバで発生しているアラートなのか一目でわかるような設定を行いましょう。

「送信先メールアドレス」部分には、メールアドレスを設定してください。
グループ名やホスト名を件名に設定したい場合は、「${var:group}」「${var:host}」といった変数が使用できるので、それを使用してください。

通知先メールアドレス

「Munin」からのメールを送信するメールアドレスを設定します。

実際の設定例

下記は、通知先名を「admin」として、アラートメールは「tamohiko@server-memo.net」に送信し、メールの件名にはグループ名とホスト名が入るような設定になります。

contact.admin.command mail -s "Munin Alert [${var:group}]:${var:host}" tamohiko@server-memo.net

1通のメールに表示するアラート数

この設定は、監視対象サーバで複数のアラートが同時に上がった場合、一通のメールに何件のアラートをまとめて記述するかの設定になります。

初期設定は、すべてのアラートを1通のメールにまとめて送信する設定になってるので、変更が必要ない場合はこの項目の設定は必要ありません。

contact.メール通知先名.max_messages  1通のメールに表示するアラート数
通知先名

メール送信先設定で設定した内容と同じ設定をすることで、設定を紐づけることが出来ます。

1通のメールに表示するアラート数

一通のメールにまとめるアラートの数を設定します。

検知したアラートのごとにメールを通知したい場合は、ここに「1」と設定することでアラート毎にメールが送信されるようになります。

※アラートは監視対象サーバごとにまとめられるので、一通のメールに複数の監視対象サーバのアラートが混じることはありません。

設定例

通知先名に「admin」を設定してメール送信先設定で設定した項目と紐づけ、検知したアラートごとにメールを送信するという設定です。

contact.admin.max_messages 1

メール通知する障害レベル設定

どの障害レベルを検知した場合に通知するかの設定を行います。

contact.通知先名.always_send  障害レベル設定
通知先名

メール送信先設定で設定した内容と同じ設定をすることで、設定を紐づけることが出来ます。

障害レベル設定

メール通知を行う障害レベル「Warning」「Critical」を設定します。(両方のレベルとも通知させることもできます)

設定例

通知先名「admin」には、「warning」と「critical」両方の障害レベルに関するアラートをメールで送信するという設定です。

contact.admin.always_send  warning critical

メール通知設定例

実際に私が使用している設定を、設定例として紹介させていただきます。

「admin」宛のメールアドレスとして「tamohiko@server-memo.net」を設定して、送信するメールの件名にアラートが発生したサーバのグループ名とホスト名を表示させるようにしています。

アラートは1アラート1メールとして通知する設定にし、障害レベルが「Warning」と「Critical」両方メール通知を行う設定になっています。

# mail notification global settings

contact.admin.command mail -s "Munin Alert [${var:group}]:${var:host}" tamohiko@server-memo.net
contact.admin.max_messages 1
contact.admin.always_send  warning critical


# Monitored servers configuration

[localhost]
    address 127.0.0.1
    use_node_name yes
    df._dev_mapper_centos_munin_root.warning 80
    df._dev_mapper_centos_munin_root.critical 90

あとは、実際にメール通知されるかどうか試験を行ってください。

メール通知応用編

監視対象ごとに通知先を変更させる設定

複数の監視対象サーバがあった場合、それぞれ違った宛先にメール通知をしたい場合の設定方法です。

メール送信先設定を複数作成

まず、メール送信先設定を送信したい通知先分メール送信設定作成します。

例えば、管理者宛のメール送信設定の場合は通知先名に「admin」、webチーム宛の場合は「web_team」、データベースチーム宛は「db_team」といったように設定します。

管理者宛設定
contact.admin.command mail -s "Munin Alert [${var:group}]:${var:host}" tamohiko@server-memo.net
contact.admin.always_send warning critical
webチーム宛設定
contact.web_team.command mail -s "Munin Alert [${var:group}]:${var:host}" web-team@server-memo.net
contact.web_team.always_send warning critical
データベースチーム宛設定
contact.db_team.command mail -s "Munin Alert [${var:group}]:${var:host}" db-team@server-memo.net
contact.web_team.always_send warning critical

※max_messagesの設定は行っていません。

メール通知設定

メールの通知先は下記のセクション毎に設定することが出来ます。

全体設定 アラート通知先を監視対象サーバ全体に設定
個別に通知を行わない設定をしない限り、アラートはここで設定した通知先に送信される
設定を省略した場合はすべての通知先にアラートメールが送信される
グループごとの設定 監視対象をグループ分けしている場合、通知先をグループごとに設定
監視対象サーバごとの設定 監視対象サーバ個別にアラートの通知先を設定したい場合に設定
プラグインごとの設定 プラグインごとに通知の設定を行いたい場合に設定
「プラグイン名.contacts 通知先名」といったように設定することで、プラグインごとに通知先を指定することが可能

通知設定を行いたいセクション部分に下記の設定を記述することで、設定を行うことが出来ます。

通知設定書式
contacts 通知先名

通知先は複数指定も可能で、その際はスペースで区切って通知先を設定します。

munin.conf設定例

実際の設定をもとにセクション毎の通知設定方法を、詳しく説明させていただきます。

### アラート通知先設定 ### 

# admin用設定
 
contact.admin.command mail -s "Munin Alert [${var:group}]:${var:host}" tamohiko@server-memo.net
contact.admin.always_send warning critical

# webチーム用設定
contact.web_team.command mail -s "Munin Alert [${var:group}]:${var:host}" web-team@server-memo.net
contact.web_team.always_send warning critical

# DBチーム用設定
contact.db_team.command mail -s "Munin Alert [${var:group}]:${var:host}" db-team@server-memo.net
contact.web_team.always_send warning critical


# 全体設定 (すべてのアラートはadmin宛に通知する設定)

contacts admin

# グループごとの設定

[web;](webグループに属しているサーバからのメール通知設定)
     contacts admin web_team

[db;](DBグループに属しているサーバからのメール通知設定)
     contacts admin db_team


# 監視対象サーバごとの設定 (監視対象サーバ個別に通知先を設定)

[localhost] 
    address 127.0.0.1
    use_node_name yes
    df._dev_mapper_centos_munin_root.warning 80
    df._dev_mapper_centos_munin_root.critical 90

(通知先指定が無いため、全体設定の「admin」宛にアラートが送信される)

[web;www.server-memo.net]
    address 192.168.1.100
    use_node_name yes
    df._dev_mapper_centos_munin_root.warning 80
    df._dev_mapper_centos_munin_root.critical 90
    contacts web_team  (webチーム宛に通知する設定)


[db;db.server-memo.net]
    address 192.168.1.200
    use_node_name yes
    df._dev_mapper_centos_munin_root.warning 80
    df._dev_mapper_centos_munin_root.critical 90
    contacts db_team  (DBチーム宛に通知する設定)

# プラグインごとの設定

[db;bk.server-memo.net]
    address 192.168.1.200
    use_node_name yes
    df._dev_mapper_centos_munin_root.warning 80
    df._dev_mapper_centos_munin_root.critical 90
    df.contacts web_team (dfの監視項目についてはwebチーム宛に通知する設定)

メール通知を行わない設定

通知を行いたくないサーバ等がある場合は、下記の設定をすることで通知が行われなれないようになります。

contacts no
参考サイト

http://castor.s26.xrea.com/blog/2007/10/19

 - Munin