2 用户宏
概述
Zabbix除了 支持 开箱即用的宏外,还支持更为灵活的用户宏。
用户宏可以在全局、模板和主机级别进行定义。这些宏具有特殊的语法:
{$MACRO}
Zabbix 根据以下优先级来解析宏:
主机级别的宏 (首先检查);
为主机的第一级别模板定义的宏(即直接链接到主机的模板),按照模板ID来排序;
为主机的第二级别模板定义的宏,按照模板ID来排序;
为主机的第三级别模板定义的宏,按照模板ID来排序等;
全局宏 (最后检查)。
换言之,如果主机不存在宏,Zabbix将会尝试在级别递增的主机模板中找到它。如果仍然找不到,那么将会使用全局宏(如果全局宏存在的话)。
如果Zabbix不能找到宏,则将无法解析该宏。
为了使复杂的配置更为简洁易懂,在配置部分(例如,在触发器列表中)会保留未解析的宏(包括用户宏)。
用户宏可被用于:
全局和主机宏常用应用场景
在多个位置使用全局宏;然后一键更改宏值并将配置更改应用到所有位置
利用带有特定主机属性的模板:如密码、端口号、文件名、正则表达式等
配置
要定义用户宏,请转到Zabbix前端页面的如下位置:
对于全局宏,请访问 管理 → 常规 → 右上角下拉菜单选择 “宏”
对于主机和模板级别的宏,请打开主机或模板属性找到 宏 选项卡
如果在模板的监控项或触发器中使用用户宏,建议将该宏添加到模板中,即使它是在全局级别上定义的。这样,如果宏类型是 文本,将模板导出为XML并将其导入到其他系统中使用时,那么也会达到预期的使用效果。秘密宏值不会被导出 导出 。
用户宏具有以下属性:
包含秘密宏的URL将不起作用,因为其中的宏将被解析为”******“.
在触发器表达式中,如果引用参数或者常量,则用户宏将会解析。如果引用主机、监控项键值、函数、运算符或其他触发器表达式的话,他们将不会被解析。秘密宏不能在触发器表达式中使用。
示例
示例 1
在 “Status of SSH daemon” 监控项键值中使用主机级别的宏:
net.tcp.service[ssh,,{$SSH_PORT}]
该监控项可以分配给多个主机,前提是在这些主机上定义了 {$SSH_PORT} 的值。
示例 2
在 “CPU load is too high” 触发器上使用主机级别的宏:
{ca_001:system.cpu.load[,avg1].last()}>{$MAX_CPULOAD}
这样的触发器将会在模板上创建,而不是在单个主机中进行编辑。
如果要使用值的数量作为函数参数(例如,max(#3)),那么在宏定义中要包含井号(#),例如:SOME_PERIOD ⇒ #3
示例 3
在“CPU load is too high”触发器中使用两个宏:
{ca_001:system.cpu.load[,avg1].min({$CPULOAD_PERIOD})}>{$MAX_CPULOAD}
请注意,宏可以用作触发器函数的参数,如本例中的 min() 函数。
示例 4
使agent不可用条件与监控项更新时间间隔同步:
定义 {$INTERVAL} 宏并在监控项更新间隔时间中使用;
使用 {$INTERVAL} 作为agent不可用触发器的参数:
{ca_001:agent.ping.nodata({$INTERVAL})}=1
示例 5
工作时间集中配置:
创建一个全局宏 {$WORKING_HOURS} ,将值设置为例如
1-5,09:00-18:00
;在 管理 → 一般 → 工作时间 中使用;
在 用户 → 报警媒介 → When active 中使用;
在工作时间内设置更为频繁的监控项轮询:
在 时间段 动作条件中使用;
如果需要,在 管理 → 一般 → 宏 中调整工作时间。
示例 6
使用主机原型宏为已发现的主机配置监控项:
- 在主机原型上用 {#SNMPVALUE} 低级别发现 宏作为值来定义用户宏 {$SNMPVALUE}:
将 Template Module Generic SNMPv2 分配给主机原型;
在 Template Module Generic SNMPv2 监控项的 SNMP OID 字段使用 {$SNMPVALUE}。
用户宏上下文
请参考 上下文用户宏。