Zabbix Action - 如何在自定义脚本中使用默认字段

Zabbix Action - How to use Default Field in Custom Script

我正在 python 中制作一些脚本,这是 Zabbix Action 的 运行。 我想增加价值 操作字段中的默认主题和默认消息,然后在我的脚本中使用这些值。所以我正在 运行ning 脚本并在脚本参数中转发所有需要的宏,例如:

python /path/script.py -A "{HOST.NAME}" -B "{ALERT.MESSAGE}" -C "{ALERT.SUBJECT}"

我只能得到 HOST.NAME 值,对于其他人我只能得到宏名称但没有值

你知道问题出在哪里吗?自定义脚本无法使用这些宏?

example

我自己做了一些研究和测试后,似乎 这些警报宏在自定义脚本操作中确实不可用。1

您有两种解决方法:


如果您需要能够在主机本身上执行此脚本,快速的选择是简单地将宏替换为主题和警报名称的实际文本。一些测试绝对是必要的,以确保它适用于您的环境,这不是最优雅的解决方案,但像这样的东西可能只需一点额外的努力就可以工作:

python /path/script.py -A "{HOST.NAME}" -B "Problem: {EVENT.NAME}" -C "Problem started at {EVENT.TIME} on {EVENT.DATE}
Problem name: {EVENT.NAME}
Host: {HOST.NAME}
Severity: {EVENT.SEVERITY}

Original problem ID: {EVENT.ID}
{TRIGGER.URL}"

当然要验证例如换行符不会破坏您环境中的自定义脚本。
它看起来不漂亮,但它可能是最简单的选择。


如果您可以 运行 任何主机上的命令,更好的选择是创建一个新的媒体类型,这将允许您使用这些变量,甚至可能使将此脚本添加到其他主机更容易。这些宏绝对可以用作自定义媒体类型的一部分(请参阅 Zabbix Documentation - Media Types),其中可以包含自定义脚本。

你需要为 Zabbix server 制作一个 bash 或类似的脚本文件到 运行 (这意味着在外部主机上做任何事情Zabbix 服务器本身会更加困难,但并非不可能。

设置媒体类型后,作为一种解决方法(当然不理想),您需要 user 到 'send' 到;将该媒体类型分配给用户,然后 'sending' 向具有该媒体类型的用户发出警报应该像执行自定义命令一样使用宏执行您的脚本。


1:虽然我确实对此进行了自己的测试,但我找不到任何文档专门声明在这种情况下不支持这些宏,而且它们肯定看起来他们 应该 - 如果有人能找到证实或否认这一点的文档,他们会非常高兴 edit/revoke 这个答案。

我现在也应该解释一下它是如何工作的,所以我做了一些事情:

python /path/script.py -A "{HOST.NAME}" -B "Problem: {EVENT.NAME}" -C "Problem started at {EVENT.TIME} on {EVENT.DATE}
Problem name: {EVENT.NAME}
Host: {HOST.NAME}
Severity: {EVENT.SEVERITY}

Original problem ID: {EVENT.ID}
{TRIGGER.URL}"

适合我 :)