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_interval
在commands.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