ホストとサービスのパッシヴチェック


序文

Nagiosの機能の1つに外部アプリケーションから提示されたホストとサービスのチェック結果を処理する機能があります。 外部アプリケーションから受付けて処理したホストとサービスチェックのことを"パッシブ"チェックと称しています。 パッシブチェックはNagiosによって行われるホストやサービスチェックであるアクティブチェックと対照的です。

なぜパッシブチェックが必要なのでしょうか?

パッシブチェックは以下のような監視で有用です:

ホストとサービスのパッシブチェックは分散監視で構築されている時でも有用です。

パッシブサービスチェック vs パッシブホストチェック

ホストとサービスのパッシブチェック機能は似かよった作法ですが、パッシブホストチェックに関しては いくつかの重要な制限があります。 パッシブホストチェックに関する制限についてのより詳細な情報については以下を読んで下さい。

パッシブチェックはどのように働くのでしょう?

パッシブチェックとアクティブチェックの実際の違いはアクティブチェックはNagiosがチェックを開始するのに対し、パッシブチェックは外部アプリケーションがチェックを開始するというただ1点です。外部アプリケーションがサービスチェック(たとえばSNMPトラップやセキュリティアラートなどの非同期通信を受け取っているかとか)を開始すると、そのチェックの"結果"がNagiosの外部コマンドファイルに送られます。

次にNagiosは外部コマンドファイルの中身を処理します。Nagiosはパッシブチェックの結果を後処理へのキューへ入れます。アクティブチェックの結果を溜めるのと同じ様にがパッシブチェックからのキューも溜められます。

Nagiosはサービス修復イベントを周期的に実行し、キューにあるサービスチェック結果をスキャンします。それぞれのサービスチェックの結果は、アクティブチェックでもパッシブチェックでも同じように処理されます。サービスチェックのロジックはこの両方のチェックのタイプでも同じです。これはアクティブチェック、パッシブチェックの両方の結果で同じハンドリング方法を提供すると言うことです。

どうやって外部アプリケーションはサービスチェックの結果を登録するのでしょう?

外部アプリケーションはPROCESS_SERVICE_CHECK_RESULT外部コマンドを使って外部コマンドファイルに結果を登録することができます。

そのコマンドのフォーマットは以下の通りです:

[<timestamp>] PROCESS_SERVICE_CHECK_RESULT;<host_name>;<description>;<return_code>;<plugin_output>

そして...

Nagiosにサービスチェックを登録するには、サービス オブジェクト設定ファイルにそのサービスがすでに定義されていなくてはならないことに注意してください! Nagiosは(再)起動して、定義されていないサービスチェックの結果はすべて無視します。

もし特定のサービスだけパッシブチェックを使用したい場合(例:アクティブチェックがうまくいかない場合とか)は、サービス定義のactive_checks_enabledディレクティブを0に設定してください。 この設定ではNagiosが恒久的にサービスをアクティブチェックするのを防ぎます。サービス定義のpassive_checks_enabledが1になっているか確認してください。そうなっていなければNagiosはパッシブチェックをを処理しません!

Nagiosにパッシブサービスチェックの結果を登録するサンプルのシェルスクリプトが、volatileサービスドキュメントの中にあります。

リモートホストからパッシブチェックの結果を登録する

Nagiosにパッシブサービスチェックを送るアプリケーションが同じホストにある場合は、単純に上のアウトラインに沿っ手外部コマンドファイルに直に結果を書き出せば良いですが、リモートホストにアプリケーションがある場合は簡単にはいきません。Nagiosのホストにリモートホストからパッシブチェックの結果を送信するために、nscaアドオンを開発しました。このアドオンはNagiosホストでデーモンとして、リモートホストでクライアントとして実行されます。そのデーモンはリモートホストのクライアントからの接続をリスンし、登録されてくる結果を基本的な確認を行い、(上で説明したように)外部コマンドファイルに直接書き込みます。ncsaのより詳しい情報はこちらです・・・

アクティブとパッシブチェックの両方を使用する

もし、センターサーバでパッシブチェックのみ受け付ける(アクティブチェックは処理しない)分散監視環境を構築しているのでなければ、アクティブとパッシブの両方のチェックがおそらく使えるでしょう。前述したように、アクティブチェックは周期的にチェックを行うのにより適しています(FTPやウェブサーバなどが挙げられます)が、パッシブチェックは様々な間隔で発生する非同期のイベントをハンドリングするのに適しています(セキュリティアラートなど)。

下の図はアクティブとパッシブチェックの両方がネットワークリソースをどのように環視しているか表したものです(画像をクリックすると大きな図が見られます)。

右のオレンジの雲のような図がNagiosにパッシブチェックの結果を登録している外部アプリケーションです。一方の外部アプリケーションはNagiosと同じホストにあり、コマンドファイルに直に結果を書いています。もう一方のアプリケーションはリモートホストにあり、ncsaクライアントとデーモンを使用してパッシブチェックの結果をNagiosへ転送しています。

左側の図がNagiosが稼働してるアクティブサービスチェックを表しています。また、それにはロカールリソース(ディスク使用率など)と"公開された"リモートホストのリソース(ウェブサーバやFTPサーバなど)、ししてリモートの"プライベート"のリソース(リモートホストのディスク使用量、CPU使用率)のそれぞれをどのように環視しているかということも表しています。この例では、リモートホストのプライベートリソースは実際にはリモートホスト上でプラグインを実行する機能を持ったnrpeアドオンを使用してチェックされています。

パッシブホストチェックはどのように働くのでしょう?

パッシブホストチェックはパッシブサービスチェックの作法と似ている。 一旦外部アプリケーションがホストチェックを遂行すると、ホスト"チェック"の結果を外部コマンドファイル を通してNagiosへ送信します。次にNagiosは外部コマンドファイルのコンテンツを処理し、送信されたホストチェックの結果を処理します。

警告! パッシブホストチェックはいくつかの制限があります。アクティブホストチェックと違って、 NagiosはホストのDOWNやUNREACHABLEをパッシブチェックからは決定しようとしません。 むしろ、Nagiosはホストがいる実際の状態になるように受け身のチェック結果を取って、実際の状態を決定しようとしません。 対照的に、Nagiosはホストチェックが(Nagiosによって開始される)アクティブの時、UPでないホストの為に適切な状態(DOWNかUNREACHABLE)を決定するように試みます。 もしあなたがリモートホストからパッシブチェックを発行しているなら、もしくはホストの親子関係が異なる分散監視構築をしているなら、これが問題を引き起こすだろう。 どのようにDOWNとUNREACHABLE状態がアクティブチェックで決定されるのか、に関する詳細な情報はホスト到達ドキュメントを参照してください。

どのように外部アプリケーションはホストチェック結果を送信するのでしょう?

外部アプリケーションは、外部コマンドファイル外部コマンドでPROCESS_HOST_CHECK_RESULTを書くことによってNagiosにホストチェック結果を送信することができます。

コマンドの書式は次の通りです:

[<timestamp>] PROCESS_HOST_CHECK_RESULT;<host_name>;<host_status>;<plugin_output>

そして...

Note that in order to submit host checks to Nagios, a host must have already been defined in the object configuration file! Nagios will ignore all check results for hosts that had not been configured before it was last (re)started.

リモートホストからのパッシブホストチェック結果の送信

Nagiosと同じホスト上にあるアプリケーションがパッシブチェックを送るのであれば、 上述の通り外部コマンドファイルに直接結果を書き込む事が出来ます。 しかし、リモートホスト上にあるアプリケーションの場合はそう簡単にはいきません。 リモートホスト上で稼動するNagiosのパッシブホストチェック結果を許可する為、 nscaアドオンを利用する事ができます。 このアドオンはNagiosのホストで稼動するデーモンと、リモートホストから実行するクライアントで構成されます。 デーモンはリモートクライアントからの接続を待ち、 送られた結果にいくらかの基本的な処理を施し、 直接(上述の)外部コマンドファイルに書き出します。 nscaアドオンに関する詳細はここです。