Icinga - 如何为每台主机的服务设置自定义联系人

时间:2012-12-07 19:34:19

标签: nagios

我想根据调用服务的主机为同一服务设置不同的联系人。

我尝试使用宏,但只有在调用命令时才会被翻译。 然后我尝试编辑命令本身,但我认为变量CONTACTEMAIL由icinga内部管理。我只是将纯电子邮件添加到HOST中定义的某个自定义宏中感觉不舒服。

define command{
    command_name    notify-service-by-email
    command_line    /usr/bin/printf "%b" "***** Icinga *****\n\nNotification Type: $NOTIFICATIONTYPE$\n\nService: $SERVICEDESC$\nHost: $HOSTALIAS$\nAddress: $HOSTADDRESS$\nState: $SERVICESTATE$\n\nDate/Time: $LONGDATETIME$\n\nAdditional Info:\n\n$SERVICEOUTPUT$\n" | /bin/mail -s "** $NOTIFICATIONTYPE$ Service Alert: $HOSTALIAS$/$SERVICEDESC$ is $SERVICESTATE$ **" $CONTACTEMAIL$
    }

有人试过/解决这个问题吗?

2 个答案:

答案 0 :(得分:0)

您可以在主机上定义联系人,并将其从服务中删除。这样,该主机中的每个服务都将继承其联系人,如果您在服务中再次定义联系人,它将忽略前一个联系人。

如果联系人依赖于每个服务而不是主机,则必须为每个主机/联系人定义相同的服务。

答案 1 :(得分:0)

$ CONTACTEMAIL $是联系人对象的宏,引用属性“email”。您的“通过邮件通知服务”命令将被分配给“service_notification_command”等联系人,以及分配给服务的联系人(或通过联系人组)。因此,一旦通知发生,所有必需的信息都可用,核心将宏$ CONTACTEMAIL $转换为实际值,然后将转换后的字符串传递给shell执行。

我会选择2个选项

  • 使用隐含继承(http://docs.icinga.org/latest/en/objectinheritance.html),并且只定义主机的联系人,而不是下面的服务。配置解析器将识别应继承联系人,然后您的服务将只获取相关主机的已分配联系人。但是,就不希望将主机警报通知给与服务本身相同的联系人而言,这可能会变得很丑陋。

  • 使这更加动态,即根据主机名设置服务联系人,我建议使用配置(生成)工具,例如然后操纵与定义的联系人的service->主机关系。虽然,似乎没有真正的通用解决方案...我会给自己的ldap树尝试LConf,但不确定这是否会在这里工作,而不是编写自定义脚本,或使用一些木偶魔法。 / p>