棚からパルチャギ

日々の雑記、ニュース拾いとか

2007. 10. 19

雑記
左に寄ってたり、段組崩れたりしてた恥ずかしいレイアウトを直したりとか。
秋葉原で打合せの帰りにHEYの前通ったら『デススマイルズ』稼動してた! 寄りたかった(>_<)
Muninでアラートメールの送信 (メール送信編)
続き。
監視項目が閾値を超えた場合のメール送信先設定。

【メール送信の設定】
設定ファイル(/etc/munin/munin.conf)に記述する。設定項目は以下の4項目。
contact.(contact).command 実行されるコマンドを記述。
contact.(contact).text コマンドにパイプで渡される文字列を記述。
contact.(contact).max_messages 同時に送信される報告の最大数。
1だと各報告は個別のメールで送信される。 未設定の場合は、同時に検出された内容が(監視ノード毎に)1つのメールにまとめて送信される。 デフォルトは未設定。
contact.(contact).always_send 送信される障害レベルを設定。「warning」「critical」のいずれか、または空白区切りでどちらも記述する。 デフォルトは「critical warning」。

設定例。
contact.email.command mail -s "Munin ${var:group}::${var:host}" email@example.com contact.email.max_messages 1 contact.email.always_send warning critical
contact.(contact).textはメールで送信される文字列の変更。
/usr/share/munin/munin-limits で定義されている初期値(%default_textのdefault)を解読すれば編集できるけど、結構面倒なのでデフォルト推奨。 文字列内で使用可能な変数や制御構文はmunin-limitsの書式を参照。


システム管理者(admin)にはwarning以上、上司(manager)にはcritical以上が報告されるような設定例。
contact.admin.command mail -s "Munin ${var:group}::${var:host}" admin@example.com contact.manager.command mail -s "Munin ${var:group}::${var:host}" manager@example.com contact.admin.always_send warning critical contact.manager.always_send critical

全体/グループ/ノード/プラグイン単位で、それぞれ送信先や送信の可否を個別に設定可能。
何も指定しない場合、デフォルトで全ての送信先が有効になる。
contact.admin.command mail -s "Munin ${var:group}::${var:host}" admin@example.com contact.web_staff.command mail -s "Munin ${var:group}::${var:host}" web_staff@example.com contact.db_staff.command mail -s "Munin ${var:group}::${var:host}" db_staff@example.com

contacts admin adminに通知を送信する(全体設定)
[WebSvr;] contacts admin web_staff WebSvrグループの場合は、adminとweb_staffに通知
[DbSvr;] contacts admin db_staff DbSvrグループの場合は、adminとdb_staffに通知
[WebSvr;foo.example.com] (WebSvrグループ → adminとweb_staffに通知) address 10.1.1.101 use_node_name yes
[WebSvr;bar.example.com] address 10.1.1.102 use_node_name yes contacts no 通知しない
[DbSvr;baz.example.com] (DbSvrグループ → adminとdb_staffに通知) address 10.1.1.103 use_node_name yes load.contacts no LoadAverageの警告は通知しない
[qux.example.com] (指定のない場合は全体設定が反映 → adminに通知) address 10.1.1.104 use_node_name yes


ちなみに、commandにはメール以外のコマンドも記述できるので、ファイルにログ出力するような設定も可能。
contact.log.command > /var/log/munin/alert.log
Muninでアラートメールの送信 (監視項目の設定編)
鯖のリソース監視をMRTGからMuninにしてみた。
アラートの送信方法が、公式ドキュメントの情報だと分散しているので、個人的まとめ。
OSはCentOS4.4。Muninはyumでさっくりインストールです。初期設定等は割愛。
# yum --enablerepo=rpmforge install munin munin-node

【監視項目の閾値を設定】
各プラグインで監視できる値について、レベル(warning/critical)とその上限値・下限値がそれぞれ設定できる。 現在インストールされているプラグインは /etc/munin/plugins 以下を参照。
$ ls -1 /etc/munin/plugins
cpu
df
forks
hddtemp_smartctl
if_err_eth0
if_eth0
interrupts
iostat
load
memory
...
munin-run にプラグイン名を渡して実行すると、プラグインで取得できる値が列挙される。
$ /usr/sbin/munin-run cpu user.value 1962350 nice.value 2526264 system.value 912873 idle.value 5334455082 iowait.value 307709 irq.value 16025 softirq.value 0


閾値の設定は /etc/munin/munin.conf の監視ノードの定義に記述。 書式は以下の通り。
[plugin].[field].(warning|critical)    value
フィールド名はさっき表示した項目名の「.value」より前の部分。
warningにすると警告検知の閾値、criticalにすると重障害検知の閾値が設定される。
[foo.example.com] address 127.0.0.1 use_node_name yes load.load.warning 5 LoadAverageが5未満でwarning load.load.critical 10 LoadAverageが10を超えるとcritical cpu.user.warning 90 userのCPU使用率が90%を超えるとwarning df._dev_hda1.warning 80 /dev/hda1の使用量が80%を超えるとwarning hddtemp_smartctl.hda.warning 41 HDD(hda)の温度が41度を超えるとwarning
閾値の設定は「:」で区切って、上限値と下限値を設定する。省略した場合は、無制限となる。
「:」を使用せずに数値を記述した場合は、上限値のみが設定されたのと同じ。
hddtemp_smartctl.sda.warning 10:40 HDD温度が10~40度の範囲内でない場合はwarning apcupsd_ww.timeleft.critical 30: UPSの電源供給時間が30分を切ったらcritical memory.apps.warning :300000000 アプリケーションのメモリ使用量が300MBを超えたらwarning memory.apps.warning 300000000 ↑と同じ

ちなみに、閾値のデフォルト値はmunin-run configで確認できる。
$ /usr/sbin/munin-run load config ... load.warning 10 load.critical 120
各設定値はmunin-node起動時に設定ファイルに書き出されるので、こんなコマンドで一括確認できるかも。
$ cat /var/lib/munin/datafile | grep 'warning\|critical'

munin-limitsの挙動を見る限りでは、閾値を全ノード(ホスト)に一括して設定することはできないので、 デフォルト値から変更したい場合はホスト毎にいちいち記述する必要がある。 どうしてもという場合は、プラグイン自体を編集するしかないっぽい。
$ /usr/sbin/munin-run load config ... load.warning 10 load.critical 120
munin-run config で表示される値がechoで直接記述されているので、それを書きなおす。 munin-node起動時に、その出力値が解析されてデフォルト値としてセットされる。なんか珍しい仕様。。。
$ cat /etc/munin/plugins/load ... echo 'load.warning 10' ←この辺を直接編集する echo 'load.critical 120' ←この辺を直接編集する