![Nagios:是否可以在特定时间之间发出警报,而不是在 notification_period 恢复时发出警报?](https://linux22.com/image/531928/Nagios%EF%BC%9A%E6%98%AF%E5%90%A6%E5%8F%AF%E4%BB%A5%E5%9C%A8%E7%89%B9%E5%AE%9A%E6%97%B6%E9%97%B4%E4%B9%8B%E9%97%B4%E5%8F%91%E5%87%BA%E8%AD%A6%E6%8A%A5%EF%BC%8C%E8%80%8C%E4%B8%8D%E6%98%AF%E5%9C%A8%20notification_period%20%E6%81%A2%E5%A4%8D%E6%97%B6%E5%8F%91%E5%87%BA%E8%AD%A6%E6%8A%A5%EF%BC%9F.png)
我想全天候检查服务,但只想在工作时间内检查某些阈值。我可以使用 check_period,但这意味着在工作时间之外不会检查服务。或者我可以使用 notification_period,但这意味着当 notification_period 开始时,任何警报都会发送,而我不希望这样。
有没有办法用 Nagios 3 实现这一点(实际上我正在使用 icinga)?
答案1
我能想到两种方法来做到这一点:(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),您需要采用原始服务,将其转变为模板,并创建两个指定不同时间段和检查命令的新服务,如下所示:
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
}