2 用户宏

概述

Zabbix除了 支持 开箱即用的宏外,还支持更为灵活的用户宏。

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

  1. {$MACRO}

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

  1. 主机级别的宏 (首先检查);

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

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

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

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

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

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

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

用户宏可被用于:

  • 监控项名称

  • 监控项键值参数

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

  • 触发器名称和描述

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

  • 其他位置 (请参见 完整列表)

全局和主机宏常用应用场景
  • 在多个位置使用全局宏;然后一键更改宏值并将配置更改应用到所有位置

  • 利用带有特定主机属性的模板:如密码、端口号、文件名、正则表达式等

配置

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

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

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

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

用户宏具有以下属性:

2 用户宏 - 图1

参数描述
宏的名称。必须用花括号括起来。括号内的文本必须以美元符号($)开头。例如: {$FRONTENDURL}。宏名称中可以使用以下字符:A-Z (仅大写字母) , 0-9 , , .
宏的内容。从Zabbix 5.0开始,用户宏中支持两种类型的值:文本 (默认) 和 Secret textSecret text 模式中,宏的内容将显示为星号,这对于保护诸如密码或共享密钥等敏感信息很有用。

注意 尽管秘密宏的值不可见,但可以通过在监控项中使用来显示其值。例如,在外部脚本中,引用秘密宏的’echo’语句可用于向前端显示其宏值,因为Zabbix server可以访问到真实的宏值。

点击“值”输入框右侧的按钮来选择宏值类型:
2 用户宏 - 图2 图标表示文本宏
2 用户宏 - 图3 图标表示一个秘密文本宏。悬停时, 字段变成 2 用户宏 - 图4 按钮, 此时可以输入新的宏值 (要退出而不保存新值,请单击向后箭头 (2 用户宏 - 图5)
描述文本字段。用于提供有关此宏的更多信息。

包含秘密宏的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 中使用;

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

2 用户宏 - 图6

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

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

示例 6

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

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

2 用户宏 - 图7

  • Template Module Generic SNMPv2 分配给主机原型;

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

用户宏上下文

请参考 上下文用户宏