私はIcingaスパゲッティをより扱いやすく繰り返しの少ないものに変えようとしています。これまでのところ、テンプレート、オブジェクト継承、多重継承、ホストグループ、サービスグループなどの機能は私のニーズを満たしていますが、私は1つの側面に固執しています。
TL; DR:そのホストが特定のホストグループのメンバーである場合、すべてのメンバーホストに新しい連絡先グループを追加したいことをIcingaに伝えるにはどうすればよいですかおよびサービス、別のホストグループに対して定義されたサービスもホストもメンバーですか?
2つの直交するホストグループのセットがあります。1つはサービスに関連付けられているホストタイプ用で、サービスの依存関係はホストタイプに関連付けられています。 「PostgreSQLサーバー」。別のグループのセットは、ノードの責任範囲と、各ノードを気にする必要がある人を識別します。
責任範囲を特定するホストグループに従ってサービスに連絡先仕様を適用する必要があります-そしてそうしたいなし各(ホストタイプ、責任範囲)ホストグループペアの各サービスをオーバーライドする必要があります。
したがって、ホストグループ「postgresql_servers」と関連サービス「postgresql_connection」を定義するとします。
define hostgroup {
hostgroup_name postgres_servers
alias All PostgreSQL servers
}
define service {
use some_service_template
hostgroup_name postgres_servers
contact_groups support_engineers_notifications
service_description POSTGRES_CONNECTION
check_command check_dummy!2!"Passive check failed"
}
次に、ホストグループ「servers_for_bob」と連絡先「bob」がありますが、これらはまだ相互に関連付けられていません。
define hostgroup {
hostgroup_name servers_for_bob,
alias These are for Bob
}
define contact {
contact_name bob
alias bob: Bob B.
use some_contact_template
}
define contactgroup {
contactgroup_name team_bob
members bob
}
これで、ホストを両方のホストグループのメンバーにするのは簡単です。
define Host {
use some_Host_template
Host_name buildingthings.example.com
hostgroups servers_for_bob, postgres_servers
alias The first thing bob built
}
...そしてその過程で、postgres_servers
のように、POSTGRES_CONNECTION
に対して定義されたすべてのサービスを取得します。ただし、サービス通知は、基本サービスsupport_engineers_notifications
で定義されているPOSTGRES_CONNECTION
にのみ送信されます。
ここで、ホストに問題が発生したときにteam_bob
に通知したいと思いますまたはそのサービスのいずれかに問題があります。これらすべてのサービスを再宣言することなく。
ホスト自体の場合、contact_groups
のオブジェクト継承でマージルールを使用できます。
define Host {
use some_Host_template
Host_name buildingthings.example.com
hostgroups servers_for_bob, postgres_servers
alias The first thing bob built
contact_groups +team_bob
}
さらに多くのホストの場合、複数のホストテンプレートの継承を使用して繰り返しを減らすことができます。
ただし、ホストをpostgres_servers
のメンバーにすることによって暗黙的に定義されたservicesを引き起こさないAFAIKは、team_bob
にも通知を送信します。
トポロジは次のとおりです。
+--------------------------------------+ +-----------+
| | | Contact: |
| Hostgroup: | | Team Bob |
| postgresql_servers <--????--+ |
| | ^^^^ | |
| | how? +-----------+
| |
| +----------------------------------------+
| | | |
| | | |
| | +-------------------------+ | |
| | |-------------------------| | |
| | || || | |
| | || Host buildingthings || | |
| | || hostgroups: || | |
| | || postgres_servers, || | |
| | || servers_for_bob || | |
| | || || | |
| | || || | |
| | || || | |
| | || || | |
| | || || | |
| | |-------------------------| | |
| | +-------------------------+ | |
| | | |
+--------------------------------------+ | +----------------------+
| | | |
| | | Service: |
| <-------+ POSTGRES_CONNECTION |
| | | |
| Hostgroup | | |
| servers_for_bob | +----------------------+
| ^ |
+----------------------------------------+ +---------+------------+
| | More services... |
+----------+ |
+----------------------+
(ありがとう http://asciiflow.com/ )
そのホストがホストグループservers_for_bob
のメンバーである場合、ホストグループの継承によって暗黙的に定義されているものも含め、すべてのメンバーのホストとサービスに連絡先bob
を追加したいことをIcingaに伝えるにはどうすればよいですか?
私は これを回避するためにホストエスカレーションとサービスエスカレーションを使用することについて漠然とした言及を見ました 、しかしその方法を理解することができませんでした。
これは一般的な要件のようですが、ここからどこに行くべきかわかりません。助けて?
あなたはエスカレーションでそれを行うことができます。これを使用して、SMSをNOCチームに送信します。
define serviceescalation {
service_description *
Host_name first_Host, second_Host
first_notification 4
last_notification 10
notification_interval 20
contacts NOC
}
これはケーキのように見えますが、明らかにそうではありません:)。ほとんどの場合、解決策は2つだけです。
1)各サーバー定義テンプレートが、より多くのサーバーグループ内のサーバーになっていないことを確認してください。その結果、サーバーテンプレートに連絡先が配置される可能性があります。
2)いくつかの自動化ツールを使用して構成を生成し、可能な限りふわふわのままにします(ツールでは簡単になります)。私たちはPuppetを使用してnagios構成を処理してきましたが、大量の構成を生成しますが、それを生成したコードはかなり単純なテンプレートに基づいているため、問題ありません。