3 自定义告警脚本
概述
如果您对现有的用于发送告警的媒介类型不满意,还有一种替代方式可以实现这一点。 您可以创建一个脚本,以您自己的方式处理通知。
自定义告警脚本在 Zabbix 服务器上执行。 这些脚本必须位于服务器配置文件中 AlertScriptsPath 参数指定的目录中。
以下是一个自定义告警脚本示例:
#!/bin/bash
to=$1
subject=$2
body=$3
host=$4
value=$5
cat <<EOF | mail -s "$subject" "$to"
$body
Host: $host
Value: $value
EOF
Zabbix 会检查已执行命令和脚本的退出代码。 任何不等于 0 的退出代码都会被视为命令执行错误。 在这种情况下,Zabbix 将尝试重复执行失败的操作。
不会为脚本保留或创建环境变量,因此应显式处理它们。
配置
要将自定义告警脚本配置为媒体类型:
- 前往 告警 → 媒体类型。
- 单击 创建媒体类型。
媒体类型 选项卡包含媒体类型的一般属性:

所有必填输入字段都以红色星号标记。
以下参数是脚本媒体类型特有的:
| 参数 | 说明 |
|---|---|
| 脚本名称 | 输入脚本文件的名称(例如 notification.sh)。该文件位于服务器配置参数 AlertScriptsPath 指定的目录中。 |
| 脚本参数 | 添加可选的脚本参数,这些参数将按照定义顺序作为命令行参数传递给脚本。 脚本参数支持 {ALERT.SENDTO}、{ALERT.SUBJECT}、{ALERT.MESSAGE} 宏,以及通知中支持的所有宏和用户宏。 |
有关如何配置默认消息和告警处理选项的详细信息,请参见通用媒体类型参数。
即使告警脚本不使用默认消息,仍必须定义此媒体类型所使用的操作类型的消息模板。 否则,将不会发送通知。
如果配置了多个脚本媒体类型,这些脚本可能会由 alerter 进程并行处理。
alerter 进程的总数受服务器配置文件中的 StartAlerters 参数限制。
测试
要测试已配置的脚本媒介类型:
-
在媒介类型列表中找到相应的脚本。
-
点击列表最后一列中的 测试;测试表单将在弹出窗口中打开。
测试表单将包含与该脚本媒介类型中配置的参数数量相同的参数。 -
如有需要,编辑脚本参数值。编辑仅影响测试过程;实际值不会被更改。
-
点击 测试。

测试已配置的脚本媒介类型时,{ALERT.SENDTO}、{ALERT.SUBJECT}、{ALERT.MESSAGE} 和用户宏将解析为其对应的值,
但与事件相关的宏(例如 {HOST.HOST}、{ITEM.LASTVALUE} 等)将不会被解析,因为在测试期间没有相关事件可供获取详细信息。
请注意,{ALERT.SUBJECT} 和 {ALERT.MESSAGE} 宏中的宏同样不会被解析。
例如,如果 {ALERT.SUBJECT} 的值为 "Problem: {EVENT.NAME}",则 {EVENT.NAME} 宏不会被解析。
用户媒介
配置好媒介类型后,进入 用户 → 用户 部分,通过将此媒介类型分配给用户来编辑用户资料。 设置用户媒介的步骤对所有媒介类型都通用,详见媒介类型页面。
请注意,在定义用户媒介时,发送到 字段不能为空。 如果告警脚本中未使用此字段,请输入任意受支持字符的组合以绕过验证要求。