序文
このドキュメントではテンプレートベースオブジェクト定義の隠された特徴(の何か)をゲットしてあなたの正気を保つ方法について説明を試みています。いくつかのオブジェクトでは複数のホスト名やホストグループ名を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_nameとservice_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_nameとdependent_host_nameディレクティブに複数のホストを記述できます:
define servicedependency{ host_name HOST1,HOST2 service_description SERVICE1 dependent_host_name HOST3,HOST4 dependent_service_description SERVICE2 other dependency directives ... }
上の例では、ホスト HOST3とHOST4上のサービス、SERVICE2がHOST1とHOST2のSERVICE1に依存しているという設定になっています。 依存サービスの全インスタンスはホスト名を除き同一の物が使用されます(例:同じ障害通知基準など)。
複数のホストグループ内の全ホスト: もし1つまたは複数のホストグループ内の全ホストに同じサービス名/サービス説明の依存サービスを定義したいなら、次のようにhostgroup_nameとdependent_hostgroup_nameディレクティブに複数のホストグループを記述できます:
define servicedependency{ hostgroup_name HOSTGROUP1,HOSTGROUP2 service_description SERVICE1 dependent_hostgroup_name HOSTGROUP3,HOSTGROUP4 dependent_service_description SERVICE2 other dependency directives ... }
上の例では、ホストグループであるHOSTGROUP3とHOSTGROUP4にある全てのホスト上で動作するサービスSERVICE2はホストグループHOSTGROUP1とHOSTGROUP2上の全てのホストで動作するサービス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,HOST4とHOST5がHOST1とHOST2両方に依存しています。ホスト依存の全ての要素はホスト名をのぞいて同じになります(例:同じ障害通知基準など)。
複数のホストグループにいる全てのホスト:一つかそれ以上のホストグループにおける全てのホストのホストエスカレーション定義を作成したければ、hostgroup_nameそして/またはdependent_hostgroup_nameディレクティブを以下の通り定義できます:
define hostdependency{ hostgroup_name HOSTGROUP1,HOSTGROUP2 dependent_hostgroup_name HOSTGROUP3,HOSTGROUP4 other dependency directives ... }
上の例では,ホストグループHOSTGROUP3とHOSTGROUP4がホストグループHOSTGROUP1とHOSTGROUP2に依存しています。全てのホスト依存の要素はホスト名を除いて同じになります(例 同じ障害通知基準など)
ホストグループ
全てのホスト: 設定ファイルにメンバーとして定義した全てのホストをホストグループを作りたいなら、membersディレクティブに以下のようなワイルドカードを指定できます:
define hostgroup{ hostgroup_name HOSTGROUP1 members * other hostgroup directives ... }
上記の定義はホストグループ1には設定ファイルにメンバーとして定義されている全ホストが含まれます。