ホストとサービスの依存
目次
- 1 導入 Introduction
- 2 Service Dependencies Overview
- 3 サービス依存の定義 Defining Service Dependencies
- 4 サービス依存の例 Example Service Dependencies
- 5 サービス依存性のチェック方法 How Service Dependencies Are Tested
- 6 サービス実行依存 Notification Dependencies
- 7 サービス依存関係の継承 Dependency Inheritance
- 8 ホスト依存関係 Host Dependencies
- 9 ホストの依存の実例 Example Host Dependencies
導入 Introduction
サービスとホスト依存は、2、3の他のホストやサービスの状態に基づいてホストとサービスの動作をコントロールできるNagiosの先進機能です。 ホストとサービス依存の違いとともに、依存がどのように動くのかについて説明します。
Service Dependencies Overview
あなたがサービス依存について知っておくべきこと少しのことがあります:
- サービスは1つ以上の他のサービスに依存することができます
- サービスは同じホストと連携していないサービスに依存することができます。
- サービス依存は引き継がれません (特に設定していない限り)
- サービス依存は、サービスチェックの実行とサービス通知を異なる状況下で抑制させることができます
- サービス依存は、特定の 時間帯 の間だけ有効になるかもしれません。
サービス依存の定義 Defining Service Dependencies
最初は基本。オブジェクト設定ファイルの中に[http://nagios.sourceforge.net/docs/3_0/objectdefinitions.html#servicedependency サービス依存定義} を追加することによって、サービス依存を作成します。依存サービスや、依存させたサービスと、実行や通知の依存関係の失敗(これらは後述します)の基準(いくらでも)を各々の定義の中で指定します。
与えられたサービスにいくつかの依存を作成することができますが、作成するそれぞれの依存ごとにサービス依存定義を追加しなければいけません。
サービス依存の例 Example Service Dependencies
下記の画像にサービス通知と実行の依存の論理レイアウトの例を示します。異なるサービスは他のサービスの通知とチェック実行に依存しています
この例の、ホスト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 w,u } 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 }
上図の他の依存関係定義は以下のようにして行います:
define servicedependency{ host_name Host A service_description Service A dependent_host_name Host B dependent_service_description Service D execution_failure_criteria u notification_failure_criteria n } define servicedependency{ host_name Host A service_description Service B dependent_host_name Host B dependent_service_description Service E execution_failure_criteria w,u notification_failure_criteria c } define servicedependency{ host_name Host B service_description Service C dependent_host_name Host B dependent_service_description Service E execution_failure_criteria n notification_failure_criteria w,u,c }
サービス依存性のチェック方法 How Service Dependencies Are Tested
Nagiosがサービスに対してサービスチェックや通知を行う前に、そのサービスが何か依存関係を持っていないかチェックします。もしなにも依存関係を持っていないのであれば、通常通りチェックは実行され、通知が送られます。もしそのサービスが何か1つ以上の依存関係を持っている場合、Nagiosは依存関係ぞれぞれの次のエントリをチェックします:
- Nagiosは依存されているサービスの現在の状態を取得します。
- Nagiosは依存定義における実行または通知失敗オプション(そのとき適切ないずれかのもの)の状態と依存されているそのサービスの現在の状態を比較します。
- もしその依存されているサービスの現在の状態が失敗オプションの1つにでもマッチしたら、その依存関係は崩れたと言え、Nagiosは依存関係チェックのループから抜け出すでしょう。
- 依存されているそのサービスの現在の状態が、依存関係のエントリの失敗オプションのいずれにもマッチしていない場合は、その依存関係は正常と言え、Nagiosは次の依存エントリをチェックします。
このサイクルはそのサービスのための依存関係がすべてチェックされるか、依存チェックが失敗するまで続きます。
注釈: * 1つ重要なことは、デフォルトでは依存チェックを行う際に依存されているそのサービスのもっとも最近のハードステートを使用します。もしNagiosに(ハードステート・ソフトステートにかかわらず)もっとも最近のステートを使用させたい場合は、soft_service_dependenciesオプションを有効にしてください。
サービス実行依存 Notification Dependencies
そのサービスの全通知依存テストがパスした場合、Nagiosはそのサービスを通常通りの通知を実行します。サービスの通知依存テストのいずれかにも失敗した場合、 Nagiosはその(依存している)サービスの通知を一時的に停止します。後に、その通知依存テストがすべてパスするかもしれません。そうなった場合、Nagiosは通常通りの通知を再開します。通知ロジックに関する詳しい説明はこちらです。
上の例では サービスCがCRITICAL、 または/もしくはサービスDがWARNINGもしくはUNKNOWNステート、 または/もしくはサービスEがWARNING、UNKNOWN、CRITICALステートの場合に サービスFは通知依存テストに失敗します。そうなった場合、そのサービスの通知は送られません。
サービス依存関係の継承 Dependency Inheritance
前述しましたが、サービス依存関係は継承されません。上の例ではサービスFはサービスEに依存しています。しかし、サービスEがサービスBとサービスCに依存していると依存関係が自動で継承されることはありません。サービスBの依存定義が存在しないため、サービスFはサービスBには依存しない事になります。
サービス依存の継承関係を作成するなら、サービス依存 定義中でinherits_parentディレクティブを使用しなければなりません。このディレクティブが有効な時、依存はサービスの依存を引き継ぐ事を意味します。言い換えれば、マスターサービスが他のサービスや依存の失敗をも依存しているとこの依存もまた失敗します。
上の例で、サービスFがサービスAに依存するようになるように新しい依存を加えたいと想像してください。あなたは、依存するサービスとして指定されたサービスFと、マスターサービス(すなわち依存されているサービス)としてのサービスA、と言う新しい依存定義を作成できました。あるいはまた、サービスDと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 inherits_parent 1 }
inerits_parentディレクティブが有効になっているので、サービスAとDの依存はサービスFとDが検証される時に検証されます。
依存は継承の複数のレベルを持つことができます。AとDのinherits_parentディレクティブの依存定義が有効になると、サービスAは他のサービス(サービスGと呼ぶ)に依存し、サービスFはサービスD、AとGに依存する (各々で異なった評価基準がある)。
ホスト依存関係 Host Dependencies
期待しているとおり、ホスト依存関係はサービス依存関係と似た動きをします。大きな違いは、サービスではなくホストであると言うことです。
注意! ホスト依存と親子関係を混同してはいけません。殆どの場面ではホスト依存ではなく、親子関係(ホストで親ディレクティブを定義する)を使用したほうがいいでしょう。 ネットワークの可到達性に関するドキュメンテーションにおいて親子関係がどのように働くかに関する記述を見つけることが出来ます。
ここに、ホストの依存に関する基礎があります。
- ホストは一つか、それ以上の他のホストに依存している場合があります。
- ホストの依存は引き継がれない。(明確に構成されていない限りは)
- ホストの依存は、異なった状況(UP、DOWN、そして/または未到達状態)の下で、ホストチェック実行とホスト通知が抑えられるようにするのに使用できます。
- ホストの依存は特定の期間 、有効であるだけであるかもしれません。
ホストの依存の実例 Example 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は通常通りの通知を再開します。通知ロジックに関する詳しい説明はこちらです。