Nagios检查通知间隔必须大于等于检查时间间隔,因为如果服务在检查之间返回到UP状态,则可以防止Nagios发出虚假警报通知。 我理解这背后的原因。
我们有许多检查每30分钟运行一次。 这意味着如果检查失败,每次在重试用完后检查服务时只发送一个通知。
我需要的是在检查结束后每隔两分钟就能维持一个值classpipe理员的寻呼机。 我不能这样做,因为下一次通知只会在下一次检查中结束,即在另外30分钟内。
我们旧监控系统的一项function是,一旦检查结果变为“HARD DOWN / CRITICAL”,就立即设置一个新的检查间隔。 这意味着我们可以每隔两分钟重新检查一次(并发送警报),直到警报被人确认或将其状态更改为UP,之后检查间隔将恢复为30分钟。
有没有办法在Nagios上做到这一点?
我有一些关于编写一个事件处理程序的想法,这个事件处理程序在一个检查已经过了HARD DOWN / CRITICAL(通过直接发送一个命令到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 }
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