ホストとサービスの依存関係


イントロダクション

サービスとホストの依存関係は1つ以上のホストやサービスのステータスからホストやサービスの挙動を制御することができる上級者向け機能です。ここではホストやサービスの依存関係の違いでどのように依存機能が働くのか説明します。

依存サービスオーバービュー

次に示す画像を依存サービスの論理図として例に挙げます。ここではいくつか注意すべきポイントがあります:

  1. Aサービスは1つまたは複数の他のサービスに依存することができる。
  2. AサービスはAサービスが所属していない異なるホストのサービスでも依存することができる。
  3. サービスの依存関係は継承されません。
  4. サービスの依存関係は異なる状態(OK,WARNING,UNKNOWN,CRITICALステート)内でサービス実行とサービス通知を省略するために使用することができます。。

Service Dependencies

サービス依存関係の定義

First, the basics. You create service dependencies by adding service dependency definitions in your object config file(s). In each definition you specify the dependent service, the service you are depending on, and the criteria (if any) that cause the execution and notification dependencies to fail (these are described later). まず、基本的に、オブジェクト設定ファイルにサービス依存定義を追加することでサービスの依存関係を作成できます。それぞれの定義の中で依存しているサービスと依存されているサービスを定義し、実行と通知の依存関係を壊す(後述します)基準を(もしあれば)定義します。

1つのサービスに対し複数の依存関係を定義することができますが、それぞれの依存関係毎に定義を分けなくてはなりません。

上の画像では、ホストCサービスFの依存定義は次のようになります:

define servicedependency{
	host_name			Host B
	service_description		Service D
	dependent_host_name		Host C
	dependent_service_description	Service F
	execution_failure_criteria	o
	notification_failure_criteria	n
	}

define servicedependency{
	host_name			Host B
	service_description		Service E
	dependent_host_name		Host C
	dependent_service_description	Service F
	execution_failure_criteria	n
	notification_failure_criteria	w,u,c
	}

define servicedependency{
	host_name			Host B
	service_description		Service C
	dependent_host_name		Host C
	dependent_service_description	Service F
	execution_failure_criteria	w
	notification_failure_criteria	c
	}

サービス依存性のチェック方法

Nagiosがサービスに対してサービスチェックや通知を行う前に、そのサービスが何か依存関係を持っていないかチェックします。もしなにも依存関係を持っていないのであれば、通常通りチェックは実行され、通知が送られます。もしそのサービスが何か1つ以上の依存関係を持っている場合、Nagiosは依存関係ぞれぞれの次のエントリをチェックします:

  1. Nagiosは依存されているサービスの現在の状態*を取得します。
  2. Nagiosは依存定義の中の実行または通知失敗オプション(そのとき適切ないずれかのもの)の状態と依存されているそのサービスの現在の状態を比較します。
  3. もしその依存されているサービスの現在の状態が失敗オプションの1つにでもマッチしたら、その依存関係は崩れたと言え、Nagiosは依存関係チェックのループに入ります。
  4. 依存されているそのサービスの現在の状態が、依存関係のエントリの失敗オプションのいずれにもマッチ内場合は、その依存関係は正常と言え、Nagiosは次の依存エントリをチェックします。

このサイクルはそのサービスのための依存関係がすべてチェックされるか、依存チェックが失敗するまで続きます。

*1つ重要なことは、デフォルトでは依存チェックを行う際に依存されているそのサービスのもっとも最近の ハードステートを使用します。もしNagiosに(ハードステート・ソフトステートにかかわらず)もっとも最近のステートを使用させたい場合は、soft_service_dependenciesオプションをゆこうにしてください。

サービス実行依存

そのサービスの実行依存テストがパスした場合、Nagiosはそのサービスを通常通りのサービスチェックを実行します。サービスの実行依存テストのいずれかにも失敗した場合、Nagiosはその(依存している)サービスのチェックを一時的に停止します。後に、その実行依存テストがすべてパスするかもしれません。そうなった場合、Nagiosは通常通りのサービスチェックを再開します。チェックスケジューリングロジックのより詳しい情報は こちらです。

上の例では、もし サービスBがWARNINGもしくはUNKNOWNステートになった場合、サービスEは実行依存テストに失敗します。そうなった場合、そのサービスチェックは実行されず、チェックのスケジュールは後に回されます。

サービス通知依存

そのサービスの通知依存テストがパスした場合、Nagiosはそのサービスを通常通りの通知を実行します。サービスの通知依存テストのいずれかにも失敗した場合、Nagiosはその(依存している)サービスの通知を一時的に停止します。後に、その通知依存テストがすべてパスするかもしれません。そうなった場合、Nagiosは通常通りの通知を再開します。通知ロジックに関する詳しい説明はこちらです。

上の例では サービスCがCRITICAL、または/もしくはサービスDがWARNINGもしくはUNKNOWNステート、または/もしくはサービスEがWARNING、UNKNOWN、CRITICALステートの場合にサービスFは通知依存テストに失敗します。そうなった場合、そのサービスの通知は送られません。

サービス依存関係の継承

前述しましたが、サービス依存関係は継承されません。上の例ではサービスFはサービスEに依存しています。しかし、サービスEがサービスBとサービスCに依存していると依存関係が自動で継承されることはありません。サービスBの依存定義が存在しないため、サービスFはサービスBには依存しない事になります。 あるケースでは、サービス依存が自動で継承されないために、設定ファイルの中に追加で依存定義をしてやる必要が出てくるでしょう。しかし、これはよりフレキシブルな設定が可能であることを意味しています。例えば、上の例ではおそらくサービスFがサービスBに依存しないようにする方が良い十分な理由があるのかも知れません。もし自動的に依存関係が継承されると、こういう設定は不可能です。

ホスト依存関係

期待しているとおり、ホスト依存関係はサービス依存関係と似た動きをします。大きな違いは、サービスではなくホストであると言うことです。他に違いと言えば、ホスト依存関係はホスト通知を停止することしか行わず、ホストチェックを停止させることはできません。

下の画像はホスト依存関係の論理図のサンプルです。

Host Dependencies

上の画像のホストCの依存定義は次のようになります:

define hostdependency{
	host_name			Host A
	dependent_host_name		Host C
	notification_failure_criteria	d
	}

define hostdependency{
	host_name			Host B
	dependent_host_name		Host C
	notification_failure_criteria	d,u
	}

サービス依存関係と同じように、ホスト依存関係も継承されません。上の図ではホストCがホストBのホスト依存関係を継承していません。ホストCがホストAに依存関係を作るためには、新しいホスト依存定義を作成しなくてはなりません。

ホスト通知依存関係はサービス依存関係のそれと同じような働きをします。そのホストの通知依存テストがパスした場合、Nagiosはそのホストの通常通りの通知を実行します。ホストの通知依存テストのいずれかに失敗した場合、Nagiosはその(依存している)ホストの通知を一時的に停止します。後に、その通知依存テストがすべてパスするかもしれません。そうなった場合、Nagiosは通常通りの通知を再開します。通知ロジックに関する詳しい説明はこちらです。