通知のエスカレーション


序文

Nagiosはオプションでホストやサービスの通知先をエスカレーションする機能をサポートしています。自明の通りとは思いますがここで簡単に機能を説明します。

サービス通知エスカレーション

サービス通知のエスカレーションはオブジェクト設定ファイルにサービスエスカレーション定義を定義することで可能になります。サービスエスカレーション定義は特定のサービスの通知をエスカレーションさせるために使用します。

ホスト通知エスカレーション

ホスト通知のエスカレーションはオブジェクト設定ファイルにホストもしくはホストグループのエスカレーション定義を定義することで可能になります。ホストエスカレーション定義は特定のホストの通知をエスカレーションさせるために使用され、一方ホストグループエスカレーション定義は特定のホストグループの全ホストの通知ををエスカレーションさせるために使用されます。下で示す例ではサービスエスカレーションで使用する定義ですが、ホストとホストグループのエスカレーションも同じように働きます(ただしサービスエスカレーションではなくホスト用のエスカレーションになりますが)。

通知がエスカレーションされるタイミング

通知は送信される現在の通知が1つ以上のエスカレーション定義にマッチした場合もしくは場合にのみエスカレーションします。もしホスト、またはサービスの通知が有効なエスカレーション定義にマッチしない場合はホストグループまたはサービス定義で指定した通知先に通知が送られます。では例を見ていきましょう:

define serviceescalation{
	host_name		webserver
	service_description	HTTP
	first_notification	3
	last_notification	5
	notification_interval	90
	contact_groups		nt-admins,managers
	}

define serviceescalation{
	host_name		webserver
	service_description	HTTP
	first_notification	6
	last_notification	10
	notification_interval	60
	contact_groups		nt-admins,managers,everyone
	}

上の通知エスカレーション定義には"穴"があることに注意してください。特に、1通目と2通目の通知はエスカレーションされません。また10通目以降も同じくエスカレーションされません。1通目と2通目の通知、そして10通目以降はサービス定義で指定したデフォルトの通知先に送られます。ここで使用している例ではサービス定義で指定したデフォルトの通知先グループはnt-adminsということにします。

通知先グループ

通知エスカレーションを定義する際、エスカレーションの"低い"段階(通知回数番号が低い)に属する通知先グループはエスカレーションの"高い"段階にも属すべきだというこが大事です。というのは通知がエスカレーションしたときに今まで受け取っていたメンバーも続けて通知が行われるべきだからです。例えば:

define serviceescalation{
	host_name		webserver
	service_description	HTTP
	first_notification	3
	last_notification	5
	notification_interval	90
	contact_groups		nt-admins,managers
	}

define serviceescalation{
	host_name		webserver
	service_description	HTTP
	first_notification	6
	last_notification	0
	notification_interval	60
	contact_groups		nt-admins,managers,everyone
	}

最初の("最も低い")エスカレーションレベルではnt-adminsmanagersという通知先グループが含まれています。最後の("最も高い")エスカレーションレベルではnt-adminsmanagersそしてeveryoneという通知先グループが含まれています。nt-admins通知先グループはどちらのエスカレーションレベルにも含まれていることに注意してください。これは最初の2通のサービス通知が送られた後障害が続いているようであれば続けて通知を受け取ることを意味しています。"低い"エスカレーションレベルの定義に初めて出てくるmanagers通知先グループは3通目の通知以降の通知を受け取ります。managers通知先グループは6通目以降も障害が継続していれば継続して通知を受け取りたいため"高い"エスカレーションレベルの定義にも含まれています。

エスカレーション範囲のオーバーラップ

通知エスカレーション定義はその範囲をオーバーラップしていても良いです。例を見てみましょう:

define serviceescalation{
	host_name		webserver
	service_description	HTTP
	first_notification	3
	last_notification	5
	notification_interval	20
	contact_groups		nt-admins,managers
	}

define serviceescalation{
	host_name		webserver
	service_description	HTTP
	first_notification	4
	last_notification	0
	notification_interval	30
	contact_groups		on-call-support
	}

上の例では:

復旧通知

復旧の通知はエスカレーションする際、障害の通知とは多少動きが異なります。次の例を見てみましょう:

define serviceescalation{
	host_name		webserver
	service_description	HTTP
	first_notification	3
	last_notification	5
	notification_interval	20
	contact_groups		nt-admins,managers
	}

define serviceescalation{
	host_name		webserver
	service_description	HTTP
	first_notification	4
	last_notification	0
	notification_interval	30
	contact_groups		on-call-support
	}

もし3回通知が行われた後に復旧した場合、そのサービスの復旧通知は誰に送られるのでしょう? その復旧は実際には4回目の通知になります。しかし通知のプログラムコードは3回目まで通知された通知先に復旧の通知を送るようなスマートな形にしています。この例ではnt-adminsmanagers通知先グループ に復旧通知が送られます。

通知間隔

ホストグループやサービス通知エスカレーション定義のnotification_intervalオプションを使い、特定のホストやサービスの通知間隔を変更できるようになっています。例:

define serviceescalation{
	host_name		webserver
	service_description	HTTP
	first_notification	3
	last_notification	5
	notification_interval	45
	contact_groups		nt-admins,managers
	}

define serviceescalation{
	host_name		webserver
	service_description	HTTP
	first_notification	6
	last_notification	0
	notification_interval	60
	contact_groups		nt-admins,managers,everyone
	}

この例ではこのサービスのデフォルトの通知間隔は240分(この値はサービス定義にあります)です。このサービスの通知が3,4,5回目の通知にエスカレーションした時は、その間隔は45分になります。同じように6回目の通知とそれ以降になると、通知間隔は2つ目のエスカレーション定義で指定した60分になります。

特定のホストグループやサービスのエスカレーション定義はオーバーラップすることができ、また複数のホストグループに1つのホストが所属できるため、Nagiosはエスカレーション定義がオーバーラップしている場合、通知間隔に限りどれを採用するか決めなくてはなりません。特定の通知用の適切なエスカレーション定義が複数オーバーラップしているどんな場合でも、Nagiosは最も短い通知間隔を採用します。例を見てみましょう:

define serviceescalation{
	host_name		webserver
	service_description	HTTP
	first_notification	3
	last_notification	5
	notification_interval	45
	contact_groups		nt-admins,managers
	}

define serviceescalation{
	host_name		webserver
	service_description	HTTP
	first_notification	4
	last_notification	0
	notification_interval	60
	contact_groups		nt-admins,managers,everyone
	}

上の例は2つの4回目と5回目がオーバーラップしているエスカレーション定義です。4回と5回目の通知に関してNagiosは45分の通知間隔を採用します。なぜなら、上の2つの通知エスカレーション定義の内もっとも短い値だからです。

最後に、通知間隔が0に設定されている場合について説明します。通知間隔が0の場合、Nagiosはそのエスカレーション定義内の最初の通知のみ送ることを意味します。それ以降すべての通知はスキップされます。例を見てみましょう。

define serviceescalation{
	host_name		webserver
	service_description	HTTP
	first_notification	3
	last_notification	5
	notification_interval	45
	contact_groups		nt-admins,managers
	}

define serviceescalation{
	host_name		webserver
	service_description	HTTP
	first_notification	4
	last_notification	6
	notification_interval	0
	contact_groups		nt-admins,managers,everyone
	}
	
define serviceescalation{
	host_name		webserver
	service_description	HTTP
	first_notification	7
	last_notification	0
	notification_interval	30
	contact_groups		nt-admins,managers
	}

上の例では、そのサービスの障害通知が送られる最大回数は4です。なぜなら、2つ目のエスカレーション定義で通知インターバルが0秒になっているため通知が1回しか送られないと言うことと、3つ目のサービスエスカレーション定義はなんの意味も持っていないため、4通目以降の通知は送られないと言うことになります。

時間帯の制限

通常の状況下で、サービスが送出した通知はいつでもエスカレーションする事ができます。 この"通知時間枠"はサービス定義notification_periodディレクティブで定義されます。

オプションとしてサービスエスカレーション定義のescalation_periodディレクティブを使って 指定した秒数の間はエスカレーションを制限できます。 エスカレーションが有効な間でescalation_periodディレクティブを時間帯で指定しているなら、 エスカレーションはこの時間帯のみ行われます。 もしescalation_periodディレクティブを指定していないのであれば、 サービス"通知時間枠"の範囲内でいつでもエスカレーションされます。

通知はまだ通常時の、サービスエスカレーション中のnotification_periodディレクティブが課される対象である事を注意して下さい。 なのでエスカレーションにて指定された時間帯は、"通知時間枠"より大きな部分集合になりえます。

状態の制限

エスカレーション定義を制限したければ、サービスが特定の状態にある時だけ サービスエスカレーション定義の escalation_optionsディレクティブを使用できます。 escalation_optionsディレクティブを使わないのであれば、 サービスがどんな状態であろうとエスカレーションは行われます。