在Nagios中,我怎么能有一个联系人,每次失败都只能得到一个通知?

我有我认为是常见的Nagios设置:当主机或服务出现问题时,它会向应召人员发送电子邮件,然后每小时继续发送电子邮件,直到问题得到确认或自行消失。

我现在想把问题(和解决scheme等)input到日志系统中,我不想看到每小时“服务仍然中断”的消息。 我只想看到最初的“服务已经坏了”,接下来可能是“问题得到了承认”,最后是“服务还行”。 (具体来说,我正在login到Slack频道,但我不认为这个细节会对解决scheme产生影响。)

有没有简单的方法来build立一个“日志”的联系人,会得到第一个服务或主机故障的通知,但不是重复的?

一个理论上可行的方法是通过升级。 以下是服务通知的示例:

define serviceescalation { host_name * service_description * contacts slack first_notification 1 last_notification 1 escalation_options w,c,u } define serviceescalation { host_name * service_description * contacts slack first_notification 1 last_notification 0 escalation_options r } 

不幸的是,这只能得到警告,关键,未知和恢复通知。 我还想logging扑灭和停机通知,而这些通知似乎根本不通过升级系统。

您可以在主configuration文件中启用syslog日志logging,然后使用像syslack , log-to-slack或类似的工具发送到Slack。

此外,正如您怀疑/暗示的那样,您可以通过应用于主机组,服务组和/或使用通配符的主机/服务升级来执行此操作。

节省时间的技巧文档页面展示了可以广泛应用升级的一些方法。

您也可以编写自定义通知脚本(通常是解决复杂的通知需求),或使用事件处理程序 (如果您需要更多的灵活性)。

只要我没有误解这个问题,你可能想看看主机和服务的对象定义:

主机定义

您可以将notification_interval值设置为0,当服务或主机离开HARD状态时,Nagios将调用x_notification_commands

模板示例:

 define host{ notification_interval 0 ... _log_level 1 register 0 } 

你甚至可以玩弄自定义variables,在这里设置你自己的日志级别。

为什么不能为联系人编写自定义通知命令脚本? 然后你可以使用macros来parsing消息stream。

 define contact{ name log-contact service_notification_period 24x7 host_notification_period 24x7 service_notification_options w,u,c,r,f,s host_notification_options d,u,r,f,s service_notification_commands logger-notify-service host_notification_commands logger-notify-host register 0 }