サーバーの配列があり、いずれもダウンして中優先度の通知を生成する可能性があります。
define Host {
Host_name foo1
contacts medium-priority
use default-Host
}
...
ただし、2つ以上このようなサーバーで問題が発生した場合は、優先度の高い通知が必要です。そのために、Nagiosの/ Icingaのcheck_cluster
-ユーティリティを使用して、個別のサービス定義を設定しました。
define service {
service_description foo-cluster
servicegroups cluster-checks
display_name Foo Cluster
check_command check_cluster_Host!Foo Cluster!0!3!$HOSTSTATEID:foo1$,$HOSTSTATEID:foo2,...$HOSTSTATEID:fooN$
contacts high-priority
hostgroup_name clusters
notes Check, that no more than 2 hosts in group foo are in trouble
use default-service
}
上記はおそらく機能しますが、このサービスチェックは時間ではなく、「基になる」ホストのいずれかのステータスの変更によってのみトリガーされるようにしたいと思います。
Ansibleを使用してIcingaの構成ファイルを生成するため、プログラムで複雑な依存関係を構築できますが、そのようなトリガーを実装することはできますかまったく?
ホスト上でイベントハンドラーを定義できます。これは基本的に「パラメーターに基づいて何かを行う」小さなスクリプトです。ホストの状態属性をランタイムマクロからコマンドパラメーターとして渡すことができます。
https://www.icinga.com/docs/icinga1/latest/en/eventhandlers.html
ルートに移動し、イベントハンドラーが起動されたときにトリガーするサービスを定義するカスタム変数をホストに定義します。そうすれば、スクリプト内でそれらをハードコーディングする必要はありません。
スクリプトは、外部コマンドパイプを介して新しいサービスチェックを強制することを決定する場合があります。おそらく、HARD状態とSOFT状態のどちらで十分かを定義する必要があります。ただし、イベントハンドラーは状態の変更時にのみ発生し、たとえばDOWN-> DOWN-> DOWNでは発生しないことに注意してください。
例: https://github.com/Icinga/icinga-core/blob/master/contrib/eventhandlers/submit_check_result.in
注:そのサービスでは、アクティブチェックを有効にしてはならず、ダミーコマンドを使用するのではなく、実際のサービスチェックコマンドを使用する必要があります。
(このようなチェック結果の送信は、コマンドパイプとイベントハンドラーを使用した他の例を探している場合は、ややハックな分散監視のために古いNagios/Icinga1の世界でも行われました)。