導入
Nagiosは"正常な"サービスと"volatile"サービスとを区別できます。それぞれのサービス定義の中でis_volatileオプションを使えば特定のサービスがvolatileかどうか指定できます。ほとんどの人にとって監視しているすべてのサービスの大多数がvolatileではない("通常"のサービス)でしょう。しかしvolatileサービスは適切に使うと非常に便利です・・・
それは何の役に立つでしょう?
volatileサービスは以下の監視に便利です・・・
volatileサービスはなにがそんなに特別なのでしょう?
volatileサービスは"通常の"サービスとは重要な3つの点で異なります。監視対象がハードnon-OKステートの時には毎回チェックをnon-OKステートで返します(ステートの変化が発生しません)。
これらのイベントは通常non-OKステートでハードステートチェンジが発生したときだけ起こります。言い換えれば、サービスがnon-OKステートになった最初の時だけ起こると言うことです。もし、再チェックしたときの結果が同じnon-OKステートだったら、ハードステートチェンジは起こらないですし、イベントも発生しません。
2つの力
volatileサービスとパッシブサービスチェックを掛け合わせると、とても使えます。たとえばSNMPトラップやセキュリティアラートをハンドリングしたりです。
なにかサンプルを挙げると…Psionic Software'sの PortSentryを稼働させて(ところでこれはフリーソフトウェアです)ファイアウォールへの侵入者がやるポートスキャンをかけてみましょう。もしNagiosにポートスキャンを検知させたければ、以下のように行います・・・
Nagiosでの作業:
PortSentryでの作業:
/usr/local/nagios/libexec/eventhandlersディレクトリにsubmit_check_resultという名前のシェルスクリプトを作成します。シェルスクリプトは以下のような感じにします:
#!/bin/sh
# Write a command to the Nagios command file to cause
# it to process a service check result
echocmd="/bin/echo"
CommandFile="/usr/local/nagios/var/rw/nagios.cmd"
# get the current date/time in seconds since UNIX epoch
datetime=`date +%s`
# create the command line to add to the command file
cmdline="[$datetime] PROCESS_SERVICE_CHECK_RESULT;$1;$2;$3;$4"
# append the command to the end of the command file
`$echocmd $cmdline >> $CommandFile`
PortSentryをrootで動かしている場合は、コマンドファイルをNagiosとCGIが読み書きできるようにオーナーとパーミッションをリセットさせるようにしなくてはならないでしょう。コマンドファイルのパーミッションとオーナーについての詳細はここにあります。
それでPortSentryがその機器でポートスキャンを検出したらどうなるのでしょう?