Icinga

基於 Icinga2 中的 Service_State 動態設置 check_interval 參數

  • July 17, 2018

我有一個要求,檢查間隔為 180 分鐘,而通知間隔為 10 分鐘。意味著服務所有者希望如果他錯過任何通常在 180 分鐘後出現的警報,如果服務很關鍵,那麼 Icinga 會繼續檢查並每 10 分鐘通知他們一次,直到服務恢復正常。

我嘗試interval = 0了 notification.conf 中的參數,但這不符合要求。

如果服務不正常,它每 10 分鐘發送一次警報,但它不檢查服務。

例如。如果服務在 180 分鐘之前恢復正常(即下一次檢查),它將繼續提醒直到下一次檢查。

在這裡找到了類似的問題, 但它是針對 Nagios 的,我無法將它與 Icinga2 合併。

我確定它將使用CHANGE_NORMAL_SVC_CHECK_INTERVAL參數完成,但不知道如何實現它。

我還在 Icinga 頁面下方找到:

Icinga 外部命令連結

請幫忙。

這就是我為解決我的問題所做的。

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$" ]
}

3.並在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 分鐘執行一次。

引用自:https://serverfault.com/questions/779932