我有我认为是常见的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 }