0

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

我尝试使用宏,但只有在调用命令时才会翻译它。然后我尝试编辑命令本身,但我认为变量 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$
    }

有没有人尝试/解决这个问题?

4

2 回答 2

0

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

我会选择 2 个选项

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

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

于 2013-06-08T14:39:41.633 回答
0

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

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

于 2012-12-12T10:27:18.307 回答