我有一个要求,检查间隔为 180 分钟,通知间隔为 10 分钟。这意味着服务所有者希望如果他错过了通常在 180 分钟后发出的任何警报(如果服务至关重要),那么 Icinga 会继续每 10 分钟检查并通知他们一次,直到服务恢复正常。
我尝试了interval = 0
notification.conf中的参数,但它不能满足要求。
如果服务不正常,它会每 10 分钟发送一次警报,但它不会检查服务。
例如,如果服务在 180 分钟(即下次检查)之前恢复正常,它将持续发出警报直到下次检查。
在这里发现了类似的问题 但它适用于 Nagios 并且我无法将它与 Icinga2 合并。
我确信它将通过使用CHANGE_NORMAL_SVC_CHECK_INTERVAL
参数来完成,但不知道如何实现它。
我还发现以下 Icinga 页面:
请帮忙。
答案1
这就是我为解决问题所做的事情。
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 分钟运行一次。