テンプレートベースを使用したオブジェクト定義による時間の節約

またの名を...
"あなたの正気を保つ方法"


序文

このドキュメントではテンプレートベースオブジェクト定義の隠された特徴(の何か)をゲットしてあなたの正気を保つ方法について説明を試みています。いくつかのオブジェクトでは複数のホスト名やホストグループ名を1つの定義に含めることができます。つまり、ホストやサービスを「コピペ」できると言うことです。この機能に対応しているオブジェクトのタイプそれぞれについて説明していきます。まず始めに、この時間節約のTIPSが使えるオブジェクトタイプは次の通りです:

上にリストされていないオブジェクトタイプ(例えば、時間帯、コマンドなど)はこの機能に対応していません。

正規表現マッチ

私が以下に示す例はオブジェクト名の"標準的な"マッチングを使用しています。 お望みであれば、 use_regexp_matching オプションを使ってオブジェクト名の正規表現マッチを有効にする事が出来ます。 デフォルトでは、オブジェクト名として利用できる正規表現は*?などのワイルドカードだけです。全てのオブジェクト名で(*と?などのワイルドカードキャラクタを含んでいるかどうかにかかわらず)正規表現マッチを使えるようにしたいなら、 use_true_regexp_matching設定オプションを有効にすればよいです。

以下の例(ホスト名、ホストグループ名、サービス名、およびサービスグループ名)で 使用される分野のいずれでも正規表現を使用する事ができます。

注意: 正規表現マッチを有効にした時は注意して下さい。 - いくつかのディレクティブは、あなたが正規表現と解釈されたくないかもしれないいくつかの設定の為に、設定ファイルを変更しなければならないかもしれません。全ての問題はあなたが設定を確かめれば明白になるでしょう。

サービス定義

複数のホスト: もし複数のホストが同一のサービスがあるなら、次のようにhost_nameディレクティブに複数のホストを記述できます:

	define service{
		host_name		HOST1,HOST2,HOST3,...,HOSTN
		service_description	SOMESERVICE
		other service directives ...
		}

上の定義ではHOST1からHOSTNまでいずれもSOMESERVICEというサービスがあると言うことになります。SOMESERVICEに属しているすべてのホストが同一の定義を使用します(例:同じチェックコマンド、再試行回数、通知の時間帯など)。

複数のホストグループに全ホストを属させる: もし全ホストもしくは複数のホストグループに属した全ホストに同一のサービスがあるなら、同じように1つのサービス定義にまとめることができます。やりかた?それは次のようにサービス定義のhostgroup_nameにホストグループを書くことで可能です:

	define service{
		hostgroup_name		HOSTGROUP1,HOSTGROUP2,...,HOSTGROUPN
		service_description	SOMESERVICE
		other service directives ...
		}

上の例では、HOSTGROUP1 から HOSTGROUPNに属する全ホストが同一のSOMESERVICEを使用します。SOMESERVICEに属しているすべてのホストが同一の定義を使用します(例:同じチェックコマンド、再試行回数、通知の時間帯など)。

全ホスト: 設定ファイルに定義している全ホストに対して同一のサービスを作成したい場合は、次のようにhost_nameディレクティブにワイルドカードを使用することで可能です:

	define service{
		host_name		*
		service_description	SOMESERVICE
		other service directives ...
		}

上の定義では設定ファイルに定義された全ホストSOMESERVICEがあることになります。SOMESERVICEに属しているすべてのホストは同一の定義を使用します(例:同じチェックコマンド、再試行回数、通知の時間帯など)。

サービスエスカレーション定義

複数のホスト: 複数のホストに割り当てられる同じ名前/記述のサービスの為のservice escalations を作成したいなら、host_nameディレクティブで複数のホストを以下のように定義します:

	define serviceescalation{
		host_name		HOST1,HOST2,HOST3,...,HOSTN
		service_description	SOMESERVICE
		other escalation directives ...
		}

上の定義ではHOST1からHOSTNが属するSOMESERVICEというサービス用のサービスエスカレーション定義を作成したことになります。そのサービスエスカレーションの全インスタンスは同一です(例:同じ通知先グループ、通知間隔など)。

複数のホストグループの全ホスト:もし全ホストもしくは複数のホストグループに属した同一のサービスエスカレーションを作成したいならば、同じように1つのサービスエスカレーション定義にまとめることができます。これは次のようにサービス定義のhostgroup_nameにホストグループを書くことで可能です:

	define serviceescalation{
		hostgroup_name		HOSTGROUP1,HOSTGROUP2,...,HOSTGROUPN
		service_description	SOMESERVICE
		other escalation directives ...
		}

上の例では、HOSTGROUP1 から HOSTGROUPNに属する全ホストが同一のSOMESERVICEを使用します。そのサービスエスカレーションの全インスタンスは同一です(例:同じ通知先グループ、通知間隔など)。

全ホスト: 設定ファイルに定義している全ホストに対して同一のサービスエスカレーションを作成したい場合は、次のようにhost_nameディレクティブにワイルドカードを使用することで可能です:

	define serviceescalation{
		host_name		*
		service_description	SOMESERVICE
		other escalation directives ...
		}

上の定義では設定ファイルに定義された全ホストの全SOMESERVICEがこのサービスエスカレーションに属していることになります。そのサービスエスカレーションの全インスタンスは同一です(例:同じ通知先グループ、通知間隔など)。

複数のサービス: 特定のホストの全サービスについて同一のサービスエスカレーションを作成したいときは、次のようにservice_descriptionディレクティブにワイルドカードを使用します:

	define serviceescalation{
		host_name		HOST1
		service_description	*
		other escalation directives ...
		}

上の定義ではHOST1サービスのサービスエスカレーションを作成したことになります。そのサービスエスカレーションの全インスタンスは同一です(例:同じ通知先グループ、通知間隔など)。

もっとチャレンジャー的なことをするならhost_nameservice_descriptionの両方のディレクティブにワイルドカードを使用することだってできます。そうすることで設定ファイルに定義した 全サービスのサービスエスカレーションを作成できます。

同じホストに複数のサービス: 特定のホストに割り当てられた全ての複数サービスの為のservice escalationsを作成するなら、service_descriptionディレクティブにひとつ以上のサービス定義を以下のように指定できます:

	define serviceescalation{
		host_name		HOST1
		service_description	SERVICE1,SERVICE2,...,SERVICEN
		other escalation directives ...
		}

上の例ではHOST1上のSERVICE1からSERVICENのサービスに対するサービスエスカレーションを定義できます。サービスエスカレーションの全インスタンスは同一です(つまり、同じ通知グループ、通知間隔、といった事です)

複数のサービスグループに全てのサービス: ひとつかそれ以上のサービスグループにある全てのサービスに対してサービスエスカレーションを作成するなら、以下のようにservicegroup_nameディレクティブを定義できます:

	define serviceescalation{
		servicegroup_name		SERVICEGROUP1,SERVICEGROUP2,...,SERVICEGROUPN
		other escalation directives ...
		}

上の定義例ではSERVICEGROUP1からSERVICEGROUPNまでのサービスグループのメンバーに含まれる全てのサービスの為にサービスエスカレーションを作成します。

依存サービス定義

複数のホスト: もし複数のホストに同じサービス名/サービス説明の依存サービスを設定したいなら、次のようにhost_namedependent_host_nameディレクティブに複数のホストを記述できます:

	define servicedependency{
		host_name			HOST1,HOST2
		service_description		SERVICE1
		dependent_host_name		HOST3,HOST4
		dependent_service_description	SERVICE2
		other dependency directives ...
		}

上の例では、ホスト HOST3HOST4上のサービス、SERVICE2HOST1HOST2SERVICE1に依存しているという設定になっています。 依存サービスの全インスタンスはホスト名を除き同一の物が使用されます(例:同じ障害通知基準など)。

複数のホストグループ内の全ホスト: もし1つまたは複数のホストグループ内の全ホストに同じサービス名/サービス説明の依存サービスを定義したいなら、次のようにhostgroup_namedependent_hostgroup_nameディレクティブに複数のホストグループを記述できます:

	define servicedependency{
		hostgroup_name			HOSTGROUP1,HOSTGROUP2
		service_description		SERVICE1
		dependent_hostgroup_name	HOSTGROUP3,HOSTGROUP4
		dependent_service_description	SERVICE2
		other dependency directives ...
		}

上の例では、ホストグループであるHOSTGROUP3HOSTGROUP4にある全てのホスト上で動作するサービスSERVICE2はホストグループHOSTGROUP1HOSTGROUP2上の全てのホストで動作するサービスSERVICE1に依存します。ホストグループ毎に5つのホストがあると仮定して、この定義は単に100のサービス依存定義をしているのと同等です!ホスト名をのぞいて、サービスの依存のすべての例が同じでしょう(例:同じ障害通知基準など)。

同じホストに全てのサービス:特定のホストに割り当てられた全てのサービスの為にサービスの依存関係を作成したいなら、service_descriptionそして/またはdependent_servcie_descriptionディレクティブへワイルドカードを用いて以下のように記述する事ができます:

	define servicedependency{
		host_name			HOST1
		service_description		*
		dependent_host_name		HOST2
		dependent_service_description	*
		other dependency directives ...
		}

上の例では、ホストHOST2上の全てのサービスがホストHOST1上の全てのサービスに依存する事になります。サービスの依存の全ての例が同じでしょう(例:同じ障害通知基準など)。

同じホストに複数のサービス:特定のホストに割り当てられた複数のサービスのためのサービスの依存を作成したいなら、あなたは1つのサービスの記述よりservice_description、そして/または、dependent_service_descriptionディレクティブを以下のように指定できます:

	define servicedependency{
		host_name			HOST1
		service_description		SERVICE1,SERVICE2,...,SERVICEN
		dependent_host_name		HOST2
		dependent_service_description	SERVICE1,SERVICE2,...,SERVICEN
		other dependency directives ...
		}

複数のサービスグループに全てのサービス:1つまたはそれ以上のサービスグループにはあるすべてのサービスのためにサービスの依存を作成するなら、あなたは以下のようにservicegroup_name)そして/または、dependent_servicegroup_nameディレクティブを使用することができます: -->

	define servicedependency{
		servicegroup_name		SERVICEGROUP1,SERVICEGROUP2,...,SERVICEGROUPN
		dependent_servicegroup_name	SERVICEGROUP3,SERVICEGROUP4,...SERVICEGROUPN
		other escalation directives ...
		}

ホストエスカレーション定義

複数のホスト:複数のホストでホストエスカレーションを作成したければ、以下の通りhost_nameに複数のホストを指定すればいいです

	define hostescalation{
		host_name		HOST1,HOST2,HOST3,...,HOSTN
		other escalation directives ...
		}

上の定義ではHOST1からHOSTNまでのホストに対するエスカレーションを作成します。ホストエスカレーションの全ての例が同じになります(例 同じ通知グループ、通知間隔を持つ)

複数のホストグループに全てのホスト: 一つかそれ以上のホストグループの中にいる全ホストのエスカレーションを定義したければ、hostgroup_nameディレクティブを以下のように利用できます:

	define hostescalation{
		hostgroup_name		HOSTGROUP1,HOSTGROUP2,...,HOSTGROUPN
		other escalation directives ...
		}

上の定義はホストエスカレーションをホストグループHOSTGROUP1からHOSTGROUPNまで作成します。ホストエスカレーションの全ての要素が同じになります(例 同じ通知グループ、通知間隔を持つ、など)

全てのホスト:設定ファイルに記載されたホスト全てに同じホストエスカレーションを定義したいなら、次の通りhost_nameディレクティブでワイルドカード指定できます:

	define hostescalation{
		host_name		*
		other escalation directives ...
		}

上の定義では設定ファイルに定義された全てのホストでホストエスカレーションを作成します。全てのホストエスカレーションの要素は同じになります(例 同じ通知グループを持ち、通知間隔を持つ)

ホスト依存定義

複数のホスト: 複数のホストに対するホスト依存が作成したければ、host_nameと/またはdependent_host_nameディレクティブで以下のように指定できます:

	define hostdependency{
		host_name		HOST1,HOST2
		dependent_host_name	HOST3,HOST4,HOST5
		other dependency directives ...
		}

上の定義では6つのホスト依存をバラバラに定義したのと同じ事になります。例では、ホストHOST3,HOST4HOST5HOST1HOST2両方に依存しています。ホスト依存の全ての要素はホスト名をのぞいて同じになります(例:同じ障害通知基準など)。

複数のホストグループにいる全てのホスト:一つかそれ以上のホストグループにおける全てのホストのホストエスカレーション定義を作成したければ、hostgroup_nameそして/またはdependent_hostgroup_nameディレクティブを以下の通り定義できます:

	define hostdependency{
		hostgroup_name			HOSTGROUP1,HOSTGROUP2
		dependent_hostgroup_name	HOSTGROUP3,HOSTGROUP4
		other dependency directives ...
		}

上の例では,ホストグループHOSTGROUP3HOSTGROUP4がホストグループHOSTGROUP1HOSTGROUP2に依存しています。全てのホスト依存の要素はホスト名を除いて同じになります(例 同じ障害通知基準など)

ホストグループ

全てのホスト: 設定ファイルにメンバーとして定義した全てのホストをホストグループを作りたいなら、membersディレクティブに以下のようなワイルドカードを指定できます:

	define hostgroup{
		hostgroup_name		HOSTGROUP1
		members			*
		other hostgroup directives ...
		}

上記の定義はホストグループ1には設定ファイルにメンバーとして定義されている全ホストが含まれます。