check_multiで複数あるnagiosの監視項目を一つにまとめてみた

たぶんどこの現場でもあると思いますが、障害発生時にnagiosから大量にメールが来ます。
自社はgmailを利用しているため、ついうっかりnagiosからメールが大量にgmailに送られてしまうと、しばらくメールが滞留してしまいます。
また、nagios以外のメールも滞ってしまうため、影響範囲がでかいです。

メールをやめて一度ファイルに書き出してからバッチを回すとか、postfixでなんとか加工するとか、ログ監視デーモンを使うとかいろいろ考えたんですが、check_mutlというプラグインを見つけました。

これを使うと、サービスごとに個別に発行していたコマンドを一つのコマンド内で実行して、すべての出力がnagiosのwebuiから見ることができます。
サービスの個数分来ていたアラートメールを、check_multiの一通にすることができます。
アラートが来た際も、どの監視項目が引っかかっているのかちゃんと知らせてくれます。

nagiosへの出力や、引数など自由度が高いみたいですが、とりあえずシンプルな設定を用意して試験的に投入してみました。
Ubuntuはオフィシャルのリポジトリにcheck_multiがあるので、apt-getでインストールするだけでパスが通るので何も考えずにそのまま使えます。

まずcheck_multiのcommandファイルを用意します。
ほとんどnagiosのcommandと変わりはありません。引数はcheck_multiから受け取るように変更します。

base.cmd

command [ ping ] = check_ping -H $HOST$ -w 100.0,20% -c 500.0,60% -p 5
command [ cpu ]  = check_snmp -H $HOST$ -C $SNMP_COM$ -o .1.3.6.1.4.1.2021.11.9.0,.1.3.6.1.4.1.2021.11.10.0,.1.3.6.1.4.1.2021.11.11.0 -l 'CPU usage (user system idle)' -u '%,%,%' -w 60 -c 80
command [ hdd ]  = check_snmp_storage.pl -H $HOST$ -C $SNMP_COM$ -m / -r -w 75 -c 85
command [ load ] = check_snmp_load.pl -H $HOST$ -C $SNMP_COM$ -T netsl -w 8,8,8 -c 20,20,20
command [ swap ] = check_snmp_mem.pl -H $HOST$ -C $SNMP_COM$ -w 80,5 -c 85,10
command [ ntp ]  = check_ntp -H $HOST$ -w 5 -c 10
command [ smtp ] = check_smtp -H $HOST$
command [ ssh ]  = check_ssh -H $HOST$

check_multiのcommandへの引数は –set オプションで定義できるので、nagiosからそのままcheck_multiへ引数を渡します。

commands.cfg

define command{
    command_name    check_multi_base_database
    command_line    $USER1$/check_multi -f /etc/nagios/check_multi_base.cmd --set HOST=$HOSTADDRESS$ --set SNMP_COM=hogehoge
}

監視項目の追加変更があったときに、check_multiのコマンドを書き換えるだけなので、変更や追加が非常に楽です。

また基本セットや、投入しているサービス、サーバの用途ごとに監視項目をグループ化すると捗りそうですね。
もうちょっとcheck_multiのかっこいい使い方を追求してみようと思います。