dynamic设置Nagios检查的新testing时间间隔

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_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