在 Icinga2 中根据 Service_State 动态设置 check_interval 参数

在 Icinga2 中根据 Service_State 动态设置 check_interval 参数

我有一个要求,检查间隔为 180 分钟,通知间隔为 10 分钟。这意味着服务所有者希望如果他错过了通常在 180 分钟后发出的任何警报(如果服务至关重要),那么 Icinga 会继续每 10 分钟检查并通知他们一次,直到服务恢复正常。

我尝试了interval = 0notification.conf中的参数,但它不能满足要求。

如果服务不正常,它会每 10 分钟发送一次警报,但它不会检查服务。

例如,如果服务在 180 分钟(即下次检查)之前恢复正常,它将持续发出警报直到下次检查。

在这里发现了类似的问题 但它适用于 Nagios 并且我无法将它与 Icinga2 合并。

我确信它将通过使用CHANGE_NORMAL_SVC_CHECK_INTERVAL参数来完成,但不知道如何实现它。

我还发现以下 Icinga 页面:

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 分钟运行一次。

相关内容