概述

    用户宏可以在全局、模板和主机级别进行定义。这些宏具有特殊的语法:

    Zabbix 根据以下优先级来解析宏:

    1. 为主机的第一级别模板定义的宏(即直接链接到主机的模板),按照模板ID来排序;

    2. 为主机的第二级别模板定义的宏,按照模板ID来排序;

    3. 为主机的第三级别模板定义的宏,按照模板ID来排序等;

    4. 全局宏 (最后检查)。

    换言之,如果主机不存在宏,Zabbix将会尝试在级别递增的主机模板中找到它。如果仍然找不到,那么将会使用全局宏(如果全局宏存在的话)。

    如果Zabbix不能找到宏,则将无法解析该宏。

    为了使复杂的配置更为简洁易懂,在配置部分(例如,在触发器列表中)会保留未解析的宏(包括用户宏)。

    用户宏可被用于:

    • 监控项名称

    • 监控项键值参数

    • 监控项更新间隔及自定义时间间隔

    • 触发器名称和描述

    • 触发器表达式参数和常量(详细查阅下文的 示例)

    • 其他位置 (请参见 )

    全局和主机宏常用应用场景

    配置

    要定义用户宏,请转到Zabbix前端页面的如下位置:

    • 对于全局宏,请访问 管理 → 常规 → 右上角下拉菜单选择 “宏”

    • 对于主机和模板级别的宏,请打开主机或模板属性找到 选项卡

    如果在模板的监控项或触发器中使用用户宏,建议将该宏添加到模板中,即使它是在全局级别上定义的。这样,如果宏类型是 文本,将模板导出为XML并将其导入到其他系统中使用时,那么也会达到预期的使用效果。秘密宏值不会被导出 导出

    用户宏具有以下属性:

    包含秘密宏的URL将不起作用,因为其中的宏将被解析为”******“.

    在触发器表达式中,如果引用参数或者常量,则用户宏将会解析。如果引用主机、监控项键值、函数、运算符或其他触发器表达式的话,他们将不会被解析。秘密宏不能在触发器表达式中使用。

    示例

    示例 1

    在 “Status of SSH daemon” 监控项键值中使用主机级别的宏:

    net.tcp.service[ssh,,{$SSH_PORT}]

    该监控项可以分配给多个主机,前提是在这些主机上定义了 {$SSH_PORT} 的值。

    示例 2

    在 “CPU load is too high” 触发器上使用主机级别的宏:

    这样的触发器将会在模板上创建,而不是在单个主机中进行编辑。

    如果要使用值的数量作为函数参数(例如,max(#3)),那么在宏定义中要包含井号(#),例如:SOME_PERIOD ⇒ #3

    示例 3

    在“CPU load is too high”触发器中使用两个宏:

    请注意,宏可以用作触发器函数的参数,如本例中的 min() 函数。

    示例 4

    使agent不可用条件与监控项更新时间间隔同步:

    • 定义 {$INTERVAL} 宏并在监控项更新间隔时间中使用;

    • 使用 {$INTERVAL} 作为agent不可用触发器的参数:

    示例 5

    工作时间集中配置:

    • 创建一个全局宏 {$WORKING_HOURS} ,将值设置为例如 1-5,09:00-18:00

    • 管理一般工作时间 中使用;

    • 用户报警媒介When active 中使用;

    • 在工作时间内设置更为频繁的监控项轮询:

    2 用户宏 - 图6

    • 时间段 动作条件中使用;

    • 如果需要,在 管理一般 中调整工作时间。

    示例 6

    使用主机原型宏为已发现的主机配置监控项:

    • 在主机原型上用 {#SNMPVALUE} 低级别发现 宏作为值来定义用户宏 {$SNMPVALUE}:

    • Template Module Generic SNMPv2 监控项的 SNMP OID 字段使用 {$SNMPVALUE}。

    用户宏上下文