在 Nagios 中,如何才能让联系人在每次故障时只收到一次通知?

在 Nagios 中,如何才能让联系人在每次故障时只收到一次通知?

我认为有一个常见的 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

您可以在主配置文件中启用 syslog 日志记录,然后使用类似的工具系统松弛记录到空闲时间或类似方式发送至 Slack。

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

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

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

答案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
        }

相关内容