我想全天候检查服务,但只想在营业时间内检查某些阈值。 我可以使用check_period,但是这意味着这些服务在工作时间以外不会被检查。 或者,我可以使用notification_period,但这意味着,当notification_period开始时,将发送任何警报,然后我不希望这样。
有没有什么办法与Nagios 3实现(实际上我正在使用icinga)?
我可以想到两种方法:(a)使用外部命令来改变检查命令(Nagios称之为“自适应监视”)或(b)使用不同的检查命令和句点将服务分成两部分。
我将使用check_load作为和这些(骨架)服务和命令定义的例子:
define service{ name load host_name foohost check_command check_load!1,1,1!2,2,2 ... (all other options) } define command{ name check_load command_line $USER1$/check_load -w $ARG1$ -c $ARG2$ }
对于(a)假设你想在晚上8点改变这些值,早上8点返回。 在cron中添加
0 20 * * * /some/path/change_load_check 3,3,3 4,4,4 0 8 * * * /some/path/change_load_check 1,1,1 2,2,2
其中change_load_check是
#!/bin/sh now=`date +%s` commandfile='/usr/local/nagios/var/rw/nagios.cmd' W=$1 C=$2 /bin/printf "[%lu] CHANGE_SVC_CHECK_COMMAND;foohost;load;check_load!$W!$C\n" \ $now > $commandfile
您需要启用外部命令。
对于(b)你将采取原来的服务,把它变成一个模板,并创build两个新的服务,指定不同的时期,并像这样检查命令:
define service{ name load_template host_name foohost ... (all other options) register 0 } define service{ name load_workhours use load_template check_period workhours notification_period workhours check_command check_load!1,1,1!2,2,2 } define service{ name load_offhours use load_template check_period offhours notification_period offhours check_command check_load!3,3,3!4,4,4 }