2 用户宏

概述

除了开箱即用的宏supported外,Zabbix还支持用户宏以实现更高的灵活性。

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

{$MACRO}

Zabbix按照以下优先级解析宏:

  1. 主机级别宏(首先检查)
  2. 为主机的一级模板(即直接链接到主机的模板)定义的宏,按模板ID排序
  3. 为主机的二级模板定义的宏,按模板ID排序
  4. 为主机的三级模板定义的宏,按模板ID排序,以此类推
  5. 全局宏(最后检查)

换句话说,如果一个主机不存在某个宏,Zabbix将尝试在主机的逐级深层模板中查找。如果仍未找到,将使用全局宏(如果存在)。

如果同名宏存在于同一级别的多个链接模板中,将使用ID最小的模板中的宏。因此在多个模板中使用同名宏存在配置风险。

如果Zabbix无法找到宏,则该宏不会被解析。

在配置部分(例如触发器列表)中,宏(包括用户宏)按设计保持未解析状态,以使复杂配置更加透明。

用户宏可用于:

  • 监控项名称
  • 监控项键参数
  • 监控项update间隔和灵活间隔
  • 触发器名称和描述
  • 触发器表达式参数和常量(参见示例
  • 许多其他位置 - 详见full list
全局宏与主机宏的常见应用场景
  • 在多个位置使用全局宏;然后更改宏的值,并通过一次点击将配置更改应用到所有位置
  • 利用带有主机特定属性的模板:密码、端口号、file名称、正则表达式等

建议使用 主机宏 而不是全局宏,因为添加、更新或删除全局宏会强制对所有 主机 进行增量配置 update。有关更多信息,请参见 主动检查

配置

定义用户宏时,请在前端转至相应位置:

  • 对于全局宏,请访问 Administration → Macros
  • 对于主机和模板级别的宏,请打开主机或模板属性,然后查找 Macros 标签页

用户宏具有以下属性:

参数 描述
Macro 宏名称。名称必须用花括号括起,并以美元符号开头。
示例:{$FRONTEND_URL}。宏名称中允许使用的字符包括:A-Z(仅大写)、0-9_.
Value 宏值。支持三种值类型:
Text(文本,默认)- 纯文本值
秘密文本 - 值使用星号掩码
vault秘密 - 值包含指向vault secret的路径/query。

要更改值类型,请点击值输入字段末尾的按钮。

用户宏值的最大长度为2048个字符。
Description 用于提供有关此宏的更多信息的文本字段。

配置用户宏时,请注意以下上下文相关的特性:

  • 如果模板的监控项或触发器中使用了用户宏,建议也将这些宏添加到模板中(即使它们是在全局定义的);这样,导出模板到XML并导入到另一个系统后,Text 类型的宏可以按预期工作(秘密宏值不会被exported
  • 如果触发器表达式中使用了用户宏,只有在引用参数或常量时才会解析;如果引用的是一个主机、监控项键、函数、运算符或其他触发器表达式,则不会解析(触发器表达式中不能使用秘密宏)
  • 如果在具有低级别自动发现规则和主机原型的一个主机上使用了用户宏,则发现的主机将继承该主机上定义的所有用户宏

示例

示例1

在“SSH守护进程状态”监控项键中使用主机级别宏:

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

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

示例2

在“CPU负载过高”触发器中使用主机级别宏:

last(/ca_001/system.cpu.load[,avg1])>{$MAX_CPULOAD}

此类触发器将在模板上创建,而不是在各个主机中进行编辑。

如果您希望使用值的数量作为函数参数(例如,max(/主机/key,#3)),请在宏定义中包含井号,如下所示:SOME_PERIOD => #3

示例3

在“CPU负载过高”触发器中使用两个宏:

min(/ca_001/system.cpu.load[,avg1],{$CPULOAD_PERIOD})>{$MAX_CPULOAD}

请注意,宏可以用作触发器函数的参数,在 此示例中为函数 min()

示例4

将 agent 不可用条件与 监控项 update 间隔同步:

  • 定义 {$INTERVAL} 宏,并在 监控项 update 间隔中使用它;
  • 使用 {$INTERVAL} 作为 agent 不可用触发器的参数:

nodata(/ca_001/agent.ping,{$INTERVAL})=1

示例5

集中配置工作时间:

  • create 一个全局的 {$WORKING_HOURS} 宏,其值等于 1-5,09:00-18:00
  • AdministrationGeneralGUI 中的 Working time 字段中使用它;
  • UsersUsers 中用户的 Media 标签页的 When active 字段中使用它;
  • 在设置工作时间内的更频繁的 监控项 轮询时使用它:

  • Time period 动作条件中使用它;
  • 如有需要,在 AdministrationMacros 中调整工作时间。
示例6

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

  • 在 一个主机 原型上定义用户宏 {$SNMPVALUE} 使用{#SNMPVALUE} low-level discovery宏作为值:

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

用户宏上下文

参见 user macros with context