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



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

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

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

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

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

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

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

我会选择2个选项

  • 使用隐含继承(http://docs.icinga.org/latest/en/objectinheritance.html),并且只定义主机的联系人,而不定义下面的服务。配置解析器将识别出应该继承联系人,然后您的服务将只获得相关主机分配的联系人。不过,这可能会变得很糟糕,因为它不想向主机通知与服务本身相同的联系人的警报。

  • 为了使其更加动态,即根据服务联系人的主机名设置服务联系人,我建议使用config(generation)工具,允许您操作服务->主机与已定义联系人的关系。尽管如此,似乎并没有真正的通用解决方案。。。我会让LConf自己尝试ldap树,但不确定这在这里是否可行,而不是编写自定义脚本或使用一些木偶魔术。

最新更新