サービス結果のフレッシュネスチェック


イントロ

Nagios は、サービスチェックの結果のフレッシュさをチェックする特徴をサポートしています。この特徴は、  確実にパッシブチェック を行いたいと思う分だけ頻繁にしたい場合、有用です。 フレッシュネスチェックは、多くの状況で使用されるかもしれませんが、 分散監視環境を設定しようとするときにまず有用となります。

フレッシュネスチェックの目的は、定期的に外部アプリケーションによってサービスが受動的に提供されることを確実にすることです。 is to ensure that service checks are being provided passively by external applications on a regular basis. もし、(フレッシュネスチェックが可能である)特別なサービス・チェックが「古い(新鮮でない)」と決められた際に、Nagiosはそのサービスのアクティブチェックを強要するでしょう。

フレッシュネスチェックの設定

サービス毎の“フレッシュネス”しきい値を形成する前に、メイン設定ファイル内のチェックサービスフレッシュネスフレッシュネスチェックインターバルディレクティブを使用してフレッシュネスチェックを行なわなければなりません。

どのようにして特別なサービスに対してのフレッシュネスチェックを可能にしますか?えーっと、現時点では、 もし テンプレートベースのオブジェクト設定 を使用するのであれば、 サービスのフレッシュネスチェックを行うことができます。  オーダーオブジェクト設定 ファイルフォーマットは、フレッシュネスチェックをサポートするようには拡張しておりません。

テンプレートベースのオブジェクト設定ファイルを使っていると仮定して、以下のようにサービス設定を 行う必要があります。

フレッシュネスしきい値はどのように作動するか

Nagiosは、フレッシュネスチェック可能な全サービスに対しての結果の“フレッシュネス”度をチェックします。 各サービス定義中のfreshness_thresholdオプションは、各サービスに対してどれほど“フレッシュ”な結果であるか決定する為に使用されます。例えば、あなたがたくさんあるサービスのうちの1つに対してfreshness_thresholdオプションを60にセットすれば、Nagiosは結果が60秒(1分)より古い(FIXME!多い?)場合そのサービスが「古くなっている」と考えるでしょう! If you do not specify a value for the freshness_threshold option (or you set it to zero), Nagios will automatically calculate a "freshness" threshold to use by looking at either the normal_check_interval or retry_check_interval options (depending on what type of state the service is currently in).

サービスチェックの結果が“古い”となった時、どうなるか!?

サービスチェックの結果が、上記で述べてきたように“古い”場合、Nagios はサービス定義中の check_commandにより特定されるコマンドを実行してサービスにアクティブチェックを強制的に行います。アクティブサービスチェックが強制的に行われるのは、サービスが“古い”とみなされるからであり、例えアクティブサービスチェックがプログラムワイド?またはサービス特定の基礎上で不可能である場合にも行われることに注意しておくのは重要です。 It is important to note that an active service check which is being forced because the service was detected as being "stale" gets executed even if active service checks are disabled on a program-wide or service-specific basis.

パッシブオンリーチェックでの動作

以前述べたように、フレッシュネスチェックは、パッシブチェックからの結果を得るサービスを扱っている時に最も効果を発揮します。 ( 分散監視セットアップの場合のように)大抵の場合、これらのサービスはパッシブチェックからの結果のすべてを得ることが出来ていないかもしれませんが・・・アクティブチェックの結果も全く得ることができません。

パッシブオンリーチェックは、夜間のバックアップジョブの状態を報告する1つの手段になるかもしれません。おそらく、あなたは バックアップが完了したら、Nagiosにバックアップジョブの結果を伝える外部スクリプトを持っているかもしれません。 そのような場合には、サービスに対する全てのチェックや結果をパッシブチェックを使用する外部アプリケーションによって得ることができます。 確実に、バックアップジョブの状態を毎日報告させたいのであれば、サービスに対してフレッシュネスチェックを可能にしたいと思うかもしれません。 もし、外部スクリプトがバックアップジョブの結果を提出しないならば、Nagiosに以下のようなものをすることにより重大な結果を偽造させることができます...

ここに述べてあるのが、そのサービスに対しての定義のようなものです(ただし、いくつかの必要とされるオプションは省かれてます)

define service{
	host_name		backup-server
	service_description	ArcServe Backup Job
	active_checks_enabled	0			; active checks are NOT enabled
	passive_checks_enabled	1			; passive checks are enabled (this is how results are reported)
	check_freshness		1
	freshness_threshold	93600			; 26 hour threshold, since backups may not always finish at the same time
	check_command		no-backup-report	; this command is run only if the service results are "stale"
	...other options...
	}

アクティブチェックがこのサービスのために無効になることに注意してください。 これはサービスに対する結果が、パッシブチェックを使用する外部アプリケーションによって作られるだけだからです。 フレッシュネスチェックは可能になります。また、フレッシュネスしきい値は26時間にセットされました。 この時間は24時間よりも少し長くなっています。というのも、バックアップジョブは、日ごとに実行が遅れたりすることがある(バックアップすべきデータがどれだけあるか、どれだけのネットワークトラフィックがあるか、などに影響を受ける)からです。 ノーバックアップレポートコマンドも、もし、サービス結果が“古い”とみなされた場合に限って実行されます。ノーバックアップレポートの定義は、以下のようなコマンドになります。

define command{
	command_name	no-backup-report
	command_line	/usr/local/nagios/libexec/nobackupreport.sh
	}

nobackupreport.sh スクリプトは、 /usr/local/nagios/libexec ディレクトリに以下のようにあることでしょう!

#!/bin/sh

/bin/echo "CRITICAL: Results of backup job were not reported!"

exit 2

もし Nagios がサービス結果が“古い”と検出したら、Naigosは no-backup-report コマンドをアクティブサービスチェック(たとえアクティブチェックがこの特定のサービスのために無効になっても・・・これは極めて特別なケースということも同時に覚えておいて下さい。)として実行します。  このことで /usr/local/nagios/libexec/nobackupreport.sh スクリプトが実行され、クリティカル状態の結果を返答します。そのサービスが(例え既に回復していたとしても)クリティカル状態に陥り、誰かがその問題に気付くことでしょう。