ステートタイプ
序文
サービスやホストの現在の状態には2つのコンポーネントが定義されている:
サービスやホストの状態(例 OK, WARNING, UP, DOWN, など)と
それらの状態のタイプによって決定されます。
Nagiosのステートタイプには2つの種類のものがあります。
-ひとつは"ソフト"ステートでもうひとつは"ハード"ステートです。
ステートタイプはNagiosの監視ロジックの重要な部分です。
それらはいつイベントハンドラを実行し、
いつ警告を発するか決定しています。
サービスとホストチェックの再試行
Nagiosは誤報を防ぐために、
サービスやホストが本当に問題があると思う前に何度サービスやホストチェックを再試行するか定義できます。
本当に問題と判断する前の再試行の最大回数はサービス、
ホスト定義の中の <max_check_attempts>オプションでそれぞれ制御できます。
サービスまたはホストのチェックがどの再施行に依存しているかということは
それらが現在どのステートタイプであるかということで決定されます。
サービス・モニタリング・ロジックには少数の例外があります。
しかし、今のところそれらを無視するでしょう。
ではサービスステートのタイプを見ていきましょう・・・
ソフトステート
ホストやサービスのソフトステートは以下の状況で発生します・・・
- サービス、ホストチェックの結果がnon-OK状態でサービス、ホスト定義の中の<max_check_attempts>オプションで指定した(再)試行数に達していないとき。これをソフトエラーステートと称します。
- サービスやホストがソフトエラーステートから復旧したとき。これをソフトリカバリーと称します。
ソフトステートイベント
サービスやホストのソフトエラーステートやソフトリカバリーが発生した際に何が起こるのでしょう?
- ソフトエラーまたはリカバリはメイン設定ファイルのlog_service_retriesやlog_host_retriesオプションを有効にしていればログに記録されます。
- サービスやホストのソフトエラーもしくはリカバリの際にはイベントハンドラが(定義されていれば) 実行されます。
(どんなイベントハンドラが実行される前でも、$HOSTSTATETYPE$や$SERVICESTATETYPE$マクロには"SOFT"がセットされます)。
- Nagiosはどんな通知先にも通知しません。なぜなら実際にはホストやサービスに問題が無い(無かった)からです。
これから分かるようにソフトステート時に発生する重要項目はイベントハンドラの実行の1点です。
もしその問題がハードステートになる前に解決しようと試みたいのであればイベントハンドラを
使用することが非常に役立つでしょう。イベントハンドラに関する詳しい情報は
こちらです。
ハードステート
サービスのハードステートは以下の状況で発生します(ホストのハードステートは後述します)・・・。
- サービスチェックの結果がnon-OK状態でかつサービス定義の中の<max_check_attempts>で指定した(再)試行数に達した時。これをハードエラーステートと称します。
- サービスがハードエラーステートから復旧した時。これをハードリカバリーと称します。
- サービスチェックの結果がnon-OK状態で、それに対応するホストがDOWNもしくはUNREACHABLEな状態の時。これは一般的な監視ロジックでの例外ですが、完全に意味をなします。ホストが稼働していない時に、どうしてサービスの再チェックを試みなくてはならないのでしょう?
ホストがハードステートは以下の状況で発生します
- ホストチェックの結果がnon-OK状態でホスト定義の中の<max_check_attempts>で指定した(再)試行数に達した時。これはハードエラーステートと言っています。
- ホストがハードエラーステートから復旧したとき。これをハードリカバリーと称します。
ハードステートの変化
ホスト、サービスがハードステートになったときに何が起こるのかを議論する前に、ハードステートチェンについて知る必要があります。ハードステートチェンジはサービスやホストが以下のようになった際に発生します・・・
- ハードOKステートからハードnon-OKステートに変化したとき
- ハードnon-OKステートからハードOKステートに変化したとき
- なんらかのハードnon-OKステートからなんらかの異なるハードnon-OKステートに変化したとき(例:ハードWARNINGステートからハードUNKNOWNステート)
ハードステートイベント
サービスやホストがハードエラーステートやハードリカバリになった際になにが起こるのでしょう? それはハードステートチェンジ(上述)が発生したかどうかに依存します。
もしハードステートチェンジが発生し、かつサービスやホストがnon-OK状態の時は以下の事が起こります・・・
- そのハードサービス、ホストエラーがログに記録されます。
- イベントハンドラが(定義していれば)サービスやホストのソフトエラー、リカバリにハンドルされます。(どんなイベントハンドラが実行される前でも、 $STATETYPE$ マクロは"HARD"にセットされます)
- 通知先にサービスやホストの問題を通知します。(もし通知ロジックでそれが許可されていた場合)
もしハードステートチェンジが発生し、かつサービスやホストがOK状態の時は以下のことが起こります・・・
- サービスやホストのハードリカバリがログされます。
- イベントハンドラが(定義されていれば)実行されます。(どんなイベントハンドラが実行されるより前に、$HOSTSTATETYPE$や$SERVICESTATETYPE$マクロは"HARD"にセットされます)。
- 通知者にサービスやホストのリカバリを通知します(通知ロジックでそれが許可されていれば)。
もしハードステートチェンジが発生せず、かつサービスやホストがnon-OK状態の場合は以下のことが起こります・・・
- 通知者にサービスやホストの問題が再通知されます(通知ロジックが許可されているなら)。
もしハードステートチェンジが発生せず、かつサービスやホストがOK状態の場合はなにも起こりません。なぜならこれはサービスやホストがOK状態で依然チェックしたときと変わってないと言うことだからです。