我认为有一个常见的 Nagios 设置:当主机或服务出现问题时,它会向值班人员发送电子邮件,然后每小时继续发送电子邮件,直到问题得到确认或自行消失。
我现在想将问题(和解决方案等)输入到日志系统中,我不想看到每小时一次的“服务仍然中断”消息。我只想看到最初的“服务中断”,然后(可能)是“问题已确认”,最后是“服务正常”。(具体来说,我正在登录到 Slack 频道,但我认为这个细节不会对解决方案产生影响。)
是否有一种简单的方法来设置“日志”联系人,该联系人会在第一次服务或主机故障时收到通知,但不会收到重复发生的通知?
理论上可行的方法是通过升级。以下是服务通知的示例:
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
}
不幸的是,这只能收到警告、严重、未知和恢复通知。我还想记录抖动和停机通知,这些通知似乎根本没有通过升级系统传递。
答案1
答案2
只要我没有误解这个问题,您可能需要查看主机和服务的对象定义:
您可以设置通知间隔值为 0,Nagios 将调用x_notification_commands当服务或主机离开 HARD 状态时。
模板示例:
define host{
notification_interval 0
...
_log_level 1
register 0
}
您甚至可以使用自定义变量来在此设置您自己的日志级别。
答案3
为什么不能直接为联系人编写自定义通知命令脚本?然后,您就可以使用宏以任何方式解析消息流。
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
}