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

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

Nagios 检查通知间隔必须大于等于检查间隔,因为这样可以防止 Nagios 在服务在检查之间返回 UP 状态时发出错误警报通知。我理解这背后的原因。

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

我需要的是能够在检查进入 HARD DOWN/CRITICAL 状态后每两分钟继续骚扰值班管理员传呼机。我无法做到这一点,因为下一个通知只会在下一次检查时发出,即 30 分钟后。

我们旧监控系统上的一个功能是,一旦检查结果为“严重故障/严重”,就会设置一个新的较低检查间隔。这意味着我们可以每两分钟重新检查一次(并发送警报),直到警报被人确认或状态变为“正常”,之后检查间隔将恢复为 30 分钟。

有没有办法在 Nagios 上实现这一点?

我曾想过编写一个事件处理程序,当检查变为 HARD DOWN/CRITICAL 后(通过直接向 Nagios 发送命令),该事件处理程序将重新安排两分钟后的检查。

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

我正在运行 Nagios Core 3.2.3。

答案1

您可以使用更改正常SVC检查间隔更改正常主机检查间隔

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

define service {
    host_name              ...
    service_description    ...
    check_command          ...
    contact_groups         ...
    event_handler          change_check_interval
}

定义change_check_intervalcommands.cfg

define command {
    command_name    change_check_interval
    command_line    $USER1$/eventhandlers/change_check_interval.sh $SERVICESTATE$ $SERVICESTATETYPE$ $SERVICEATTEMPT$ $HOSTADDRESS$
}

内容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

确保外部命令已启用nagios.cfg

check_external_commands=1

相关内容