Nagios 检查通知间隔必须 >= 到检查间隔,因为如果服务在检查之间返回 UP 状态,这可以防止 Nagios 发送错误警报通知。我明白这背后的原因。
我们有许多检查每 30 分钟运行一次。这意味着如果检查失败,则在重试用完后每次检查服务时仅发送一个通知。
我需要的是能够在支票变得困难/关键后每两分钟继续纠缠值班管理员寻呼机。我不能这样做,因为下一个通知只会在下一次检查时发出,即再过 30 分钟。
我们在旧监控系统上的一个功能是,一旦检查变得困难/关键,就设置一个新的较低检查间隔。这意味着我们可以每两分钟重新检查一次(并发送警报),直到警报被人类确认或将其状态更改为 UP,之后检查间隔将恢复为 30 分钟。
有没有办法在 Nagios 上促进这一点?
我有一些关于编写事件处理程序的想法,该处理程序将在检查变得困难/关键(通过直接向 Nagios 发送命令)之后重新安排检查两分钟。
我想知道是否有其他人不得不做类似的事情?
我正在运行 Nagios Core 3.2.3。
您可以通过使用CHANGE_NORMAL_SVC_CHECK_INTERVAL和CHANGE_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)