2 用户宏

概述

除了开箱即用的宏支持之外,Zabbix还支持用户宏,以提高灵活性。

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

{$MACRO}

Zabbix根据以下优先级解析宏: 1.主机级宏(先选中) 2.为主机的一级模板(即直接链接到主机的模板)定义的宏,按模板ID排序 3.为主机二级模板定义的宏,按模板ID排序 4.为主机的三级模板定义的宏,按模板ID等排序。 5.全局宏(最后选中)

换句话说,如果主机不存在宏,Zabbix将尝试在深度不断增加的主机模板中找到它。如果仍然找不到,将使用全局宏(如果存在)。

如果同一级别的多个链接模板上存在具有相同名称的宏,则将使用ID最低的模板中的宏。因此,在多个模板中使用相同名称的宏是一种配置风险。

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

宏(包括用户宏)在配置部分(例如,在触发器列表中)被设计为不可解析,以使复杂的配置更加透明。

用户宏可用于:

  • 监控项名称
  • 监控项key参数
  • 监控项更新间隔和灵活间隔
  • 触发器名称和描述
  • 触发器表达式参数和常量(参见示例)
  • 许多其他位置-请参阅完整列表
全局和宿主宏的常见用例
  • 在多个位置使用全局宏;然后更改宏值并一键将配置更改应用于所有位置
  • 利用具有主机特定属性的模板:密码、端口号、文件名、正则表达式等。

建议使用主机宏而不是全局宏,因为添加、更新或删除全局宏会强制对所有主机进行增量配置更新。更多信息,请参见被动和主动 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
  • AdministrationGeneralWorking time 字段中使用它 图形界面
  • UserUsers ,用户的媒体 页签中的当激活 字段使用;
  • 使用它在工作时间设置更频繁的监控项轮询:

  • 时间段动作条件下使用;
  • AdministrationGeneralMacros 中调整工作时间, 如果需要的话。
示例 6

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

  • Generic SNMPv2 模板分配给主机原型;
  • Generic SNMPv2SNMP OID 字段中使用 {$SNMPVALUE} 模板项。

用户宏语境

请参阅 带语境的用户宏