web-dev-qa-db-ja.com

ホストステータスの変更によってサービスチェックをトリガーする方法は?

サーバーの配列があり、いずれもダウンして中優先度の通知を生成する可能性があります。

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の構成ファイルを生成するため、プログラムで複雑な依存関係を構築できますが、そのようなトリガーを実装することはできますかまったく

2
Mikhail T.

ホスト上でイベントハンドラーを定義できます。これは基本的に「パラメーターに基づいて何かを行う」小さなスクリプトです。ホストの状態属性をランタイムマクロからコマンドパラメーターとして渡すことができます。

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の世界でも行われました)。

1
dnsmichi