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


序文

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

フレッシュネスチェックの目的は、定期的に外部アプリケーションによってホストチェック、 サービスチェックが受動的に提供されることを確実にすることです。 もし、(フレッシュネスチェックが有効になっている)特別なホスト・チェックやサービス・チェックが 「古い(新鮮でない)」と決められた際に、 Nagiosはそのホスト、サービスのアクティブチェックを強要するでしょう。

ホスト vs サービス フレッシュネスチェック

以下の文書はサービスフレッシュネスチェックについて述べています。 ホストフレッシュネスチェック(文書を分けていません)はサービスフレッシュネスチェック とよく似た方法で動作します - 勿論例外がありますが、サービスの代わりにホストが対象となります。

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

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

では、特定のサービスの為にむけてフレッシュネスチェックをどのように有効にしますか? 続けてサービス定義を設定する必要があるのです。

フレッシュネス閾値はどのように働くのか

Nagiosは、フレッシュネスチェック可能な全サービスに対しての結果の “フレッシュネス”度をチェックします。 各サービス定義中のfreshness_thresholdオプションは、 各サービスに対してどれほど“フレッシュ”な結果であるか決定する為に使用されます。 例えば、あなたがたくさんあるサービスのうちの1つに対してfreshness_thresholdオプションを 60にセットすれば、Nagiosは結果の経過時間が60秒(1分)以上経っている場合 そのサービスが「古くなっている」と考えるでしょう!

サービスチェック結果が"古い"状態になった時には何が起こるのか

サービスチェックの結果が、上記で述べてきたように“古い”場合、 Nagios はサービス定義中の check_commandにより特定されるコマンドを実行して サービスにアクティブチェックを強制的に行います。 アクティブサービスチェックが強制的に行われるのは、サービスが“古い”とみなされるからであり、 例えアクティブサービスチェックがプログラムワイド?またはサービス特定の基礎上で 不可能である場合にも行われることに注意しておくのは重要です。

パッシブのみのチェックと併用する

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

パッシブオンリーチェックは、夜間のバックアップジョブの状態を報告する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 スクリプトが実行され、クリティカル状態の結果を返答します。そのサービスが(例え既に回復していたとしても)クリティカル状態に陥り、誰かがその問題に気付くことでしょう。