web-dev-qa-db-ja.com

Icinga2のService_Stateに基づいてcheck_intervalパラメーターを動的に設定する

チェック間隔が180分で、通知間隔が10分であるという要件があります。サービスの所有者は、サービスが重要である場合に通常180分後に表示されるアラートを見逃した場合、サービスが通常に戻るまで10分ごとにチェックと通知を続けます。

私はnotification.confでinterval = 0パラメータを試しましたが、それは要件を満たしていません。

サービスに問題がある場合は10分ごとにアラートを送信しますが、サービスはチェックしません。

例えば。 180分前にサービスが正常になった場合(つまり、次のチェック)、次のチェックまでアラートを出し続けます。

ここで同様の質問が見つかりました しかし、それはNagios用であり、Icinga2とマージすることはできません。

CHANGE_NORMAL_SVC_CHECK_INTERVALパラメータを使用して実行されると確信していますが、実装方法がわかりません。

Icingaページの下にもあります:

Icinga外部コマンドリンク

親切に助けてください。

3
Manii

これは私の問題を解決するために私がしたことです。

1。作成されたスクリプト/icinga/plugins/change_check_interval.sh

#!/bin/bash

now=`date +%s`
commandfile='/var/run/icinga2/cmd/icinga2.cmd'
case "$1" in
    OK)
        /usr/bin/printf "[%lu] CHANGE_NORMAL_SVC_CHECK_INTERVAL;servername;servicename;180\n" $now >> $commandfile
    ;;
    WARNING)
        ;;
    UNKNOWN)
        ;;
    CRITICAL)
        /usr/bin/printf "[%lu] CHANGE_NORMAL_SVC_CHECK_INTERVAL;servername;servicename;10\n" $now >> $commandfile
        ;;
esac

exit 0

2。次に、このスクリプトを使用して、commands.confでevent_commandを定義しました

object EventCommand  "change_check_interval"{
  import "plugin-event-command"
    command = [ "/icinga/plugins/change_check_interval.sh", "$service.state$" ]
}

。services.confでevent_commandを使用

apply Service "Service-Name" {
 import "template"
  check_command = "nrpe-arg"
  vars.remote_nrpe_command = "nrpe command"
  vars.remote_nrpe_arguments = "arg1"
  event_command = "change_check_interval"
  assign where Host.name == "servername"
}

このイベントハンドラーは、サービスが正常な場合は180分ごとに実行され、サービスが重要な場合は10分ごとに実行されます。

0
Manii