动态设置 Nagios 检查的新测试间隔

Kev*_*Kev 4 nagios

Nagios 检查通知间隔必须 >= 到检查间隔,因为如果服务在检查之间返回 UP 状态,这可以防止 Nagios 发送错误警报通知。我明白这背后的原因。

我们有许多检查每 30 分钟运行一次。这意味着如果检查失败,则在重试用完后每次检查服务时仅发送一个通知。

我需要的是能够在支票变得困难/关键后每两分钟继续纠缠值班管理员寻呼机。我不能这样做,因为下一个通知只会在下一次检查时发出,即再过 30 分钟。

我们在旧监控系统上的一个功能是,一旦检查变得困难/关键,就设置一个新的较低检查间隔。这意味着我们可以每两分钟重新检查一次(并发送警报),直到警报被人类确认或将其状态更改为 UP,之后检查间隔将恢复为 30 分钟。

有没有办法在 Nagios 上促进这一点?

我有一些关于编写事件处理程序的想法,该处理程序将在检查变得困难/关键(通过直接向 Nagios 发送命令)之后重新安排检查两分钟。

我想知道是否有其他人不得不做类似的事情?

我正在运行 Nagios Core 3.2.3。

qua*_*nta 5

您可以通过使用CHANGE_NORMAL_SVC_CHECK_INTERVALCHANGE_NORMAL_HOST_CHECK_INTERVAL来做到这一点。

为您的服务添加事件处理程序:

define service {
    host_name              ...
    service_description    ...
    check_command          ...
    contact_groups         ...
    event_handler          change_check_interval
}
Run Code Online (Sandbox Code Playgroud)

change_check_interval定义的commands.cfg

define command {
    command_name    change_check_interval
    command_line    $USER1$/eventhandlers/change_check_interval.sh $SERVICESTATE$ $SERVICESTATETYPE$ $SERVICEATTEMPT$ $HOSTADDRESS$
}
Run Code Online (Sandbox Code Playgroud)

内容change_check_interval.sh

#!/bin/bash

now=`date +%s`
commandfile='/usr/local/nagios/var/rw/nagios.cmd'

case "$1" in
    OK)
        ;;
    WARNING)
        ;;
    UNKNOWN)
        ;;
    CRITICAL)
        /bin/printf "[%lu] CHANGE_NORMAL_SVC_CHECK_INTERVAL;host1;service1;2\n" $now > $commandfile
        ;;
esac

exit 0
Run Code Online (Sandbox Code Playgroud)

确保在nagios.cfg以下位置启用了外部命令:

check_external_commands=1
Run Code Online (Sandbox Code Playgroud)