2 用户宏
概述
Zabbix 支持用户宏,以提供更高的灵活性,此外还支持开箱即用的宏 supported。
用户宏可以在全局、模板和主机级别定义。这些宏使用特殊语法:
{$MACRO}
Zabbix 按以下优先级解析宏:
- 主机级别宏(优先检查)。
- 为主机的一层模板定义的宏(即直接链接到主机的模板),按模板 ID 排序。
- 为主机的二层模板定义的宏,按模板 ID 排序。
- 为主机的三层模板定义的宏,按模板 ID 排序,依此类推。
- 全局宏(最后检查)。
换句话说,如果某个主机不存在该宏,Zabbix 会尝试在更深层级的主机模板中查找。如果仍未找到,则会使用全局宏(如果存在)。
如果在同一层级的多个已链接模板中存在同名宏,则会使用模板 ID 最小的模板中的宏。因此,在多个模板中使用同名宏存在配置风险。
如果 Zabbix 无法找到某个宏,则该宏将不会被解析。
出于设计考虑,宏(包括用户宏)会在配置部分中保持未解析状态(例如在触发器列表中),以便使复杂配置更加透明。
用户宏可用于:
全局和宿主宏的常见用例
- 在多个位置使用全局宏;然后更改宏值并一键将配置更改应用于所有位置
- 利用具有主机特定属性的模板:密码、端口号、文件名、正则表达式等。
建议使用主机宏而不是全局宏,因为添加、更新或删除全局宏会强制对所有主机进行增量配置更新。更多信息,请参见被动和主动 agent 检查。
配置
要定义用户宏,请转到前端中的相应位置:
- 对于全局宏,访问 Administration > Macros。
- 对于主机和模板级别的宏,打开主机或模板属性,并查找 Macros 选项卡。
用户宏具有以下属性:

| Parameter | Description |
|---|---|
| Macro | 宏名称。名称必须用花括号括起来,并以美元符号开头。 示例:{$FRONTEND_URL}。宏名称中允许使用以下字符:A-Z(仅大写)、0-9、_、. |
| Value | 宏值。支持三种值类型: Text(默认)- 纯文本值 Secret text - 值会以星号掩码显示 Vault secret - 值包含指向 vault secret 的路径/查询。 要更改值类型,请单击值输入字段末尾的按钮。 用户宏值的最大长度为 2048 个字符。 |
| Description | 用于提供有关此宏更多信息的文本字段。 |
配置用户宏时,请注意以下与上下文相关的行为:
- 如果在模板监控项或触发器中使用了用户宏,请考虑将这些宏也添加到模板中(即使它们是全局定义的);这样,在将模板导出为 XML 并导入到其他系统后,Text 类型宏仍可按预期工作(secret 宏值不会被 导出)
- 如果在触发器表达式中使用了用户宏,则这些宏只有在引用参数或常量时才会解析;如果引用主机、监控项键值、函数、运算符或另一个触发器表达式,则不会解析(secret 宏不能用于触发器表达式)
- 如果在具有主机原型的低级别发现规则的主机上使用了用户宏,发现的主机 将继承该主机上定义的所有用户宏
示例
示例 1
在“SSH daemon 状态”项键中使用主机级宏:net.tcp.service[ssh,,{$SSH_PORT}]
此项可以分配给多个主机,前提是{$SSH_PORT} 在这些主机上定义。
示例 2
在“CPU负载太高”触发器中使用主机级宏:last(/ca_001/system.cpu.load[,avg1])>{$MAX_CPULOAD}
这样的触发器将在模板上创建,而不是在个别主机。
如果要使用值的数量作为函数参数(例如,max(/host/key,#3)),在宏定义中包含如下哈希标记: SOME_PERIOD => #3
示例 3
在“CPU负载太高”触发器中使用两个宏:min(/ca_001/system.cpu.load[,avg1],{$CPULOAD_PERIOD})>{$MAX_CPULOAD}
注意宏可以作为触发函数的参数,在这个示例函数min()。
示例 4
将agent不可用条件与监控项更新同步间隔:
- 定义 {$INTERVAL} 宏并在监控项更新间隔中使用它;
- 使用 {$INTERVAL} 作为agent不可用触发器的参数:
nodata(/ca_001/agent.ping,{$INTERVAL})=1
示例 5
集中配置工作时间:
- 创建一个全局 {$WORKING_HOURS} 宏,值为
1-5,09:00-18:00; - 在 Administration > General > GUI 中的 Working time 字段使用它;
- 在 Users > Users 中用户的 Media 选项卡里的 When active 字段使用它;
- 使用它来在工作时间内设置更频繁的监控项轮询:

- 在 Time period 动作条件中使用它;
- 如有需要,在 Administration > Macros 中调整工作时间。
示例 6
使用主机原型宏为发现的主机配置监控项:
- 在主机原型上定义用户宏 {$SNMPVALUE}和{#SNMPVALUE} 低级别自动发现 宏作为值:

- 将 Generic SNMPv2 模板分配给主机原型;
- 在 Generic SNMPv2 的 SNMP OID 字段中使用 {$SNMPVALUE} 模板项。
用户宏语境
请参阅 带语境的用户宏。