我在 nagios 中配置并运行了一个事件处理程序,每当给定的服务处于 CRITICAL 状态时就会触发该事件处理程序。
问题是,我们决定在正常工作时间不需要运行事件处理程序,因为我们可以手动以更有效的方式解决问题。
问题是,我有什么办法可以设置此事件处理程序仅在给定的时间段内运行,但通常会收到 CRITICAL 状态的通知?比如说在非工作时间?
在此先感谢您的帮助。
答案1
看看 Nagios 宏有效时间。
This is a special on-demand macro that returns a 1 or 0 depending on whether or not a particular time is valid within a specified timeperiod. There are two ways of using this macro:
$ISVALIDTIME:24x7$ will be set to "1" if the current time is valid within the "24x7" timeperiod. If not, it will be set to "0".
$ISVALIDTIME:24x7:timestamp$ will be set to "1" if the time specified by the "timestamp" argument (which must be in time_t format) is valid within the "24x7" timeperiod. If not, it will be set to "0".
不知道这是否存在于服务上下文中,但您可以测试它。定义一个时间段“非工作时间”,并将 ISVALIDTIME 作为事件处理程序脚本的参数。当在工作时间调用脚本时,让它不执行任何操作并退出。
如果这不起作用,您只需在事件处理程序脚本中验证一天中的时间即可。
答案2
在我开始实际回答之前,请注意一个问题:当我将我们的呼叫路由系统设置为智能地(而不是手动地)处理“工作时间”时,我完全忘记考虑公共假期,导致紧急客户的电话在接下来的银行假期星期一有一半时间都在空荡荡的办公室里响起。
我相信你会更加小心:-)
除了这个警告之外,从文档中可以看出,您需要在 Nagios 配置中定义一些时间段对象,例如:
define timeperiod{
timeperiod_name workhours
alias "Normal" Working Hours
monday 08:00-17:00
tuesday 08:00-17:00
wednesday 08:00-17:00
thursday 08:00-17:00
friday 08:00-17:00
}
然后在您的服务配置中使用 check_period 调用它们:
define service{
use some-service
name service-name
...
check_period 24x7
...
}
答案3
如果你真的想这样做,我有一个想法(这是我首先想到的):
- 将服务定义放在单独的文件中,以使其更容易
- 编写脚本来检查当前时间
- 在工作时间开始时,您将注释掉
event_handler
配置文件中的行,并在工作时间结束时注释掉该行。(您可以使用sed
)
尝试一下并告诉我是否有效。