这是原厂英文文档的翻译页面. 欢迎帮助我们 完善文档.
2022 Zabbix中国峰会
2022 Zabbix中国峰会

2 用户宏

概述

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

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

{$MACRO}

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

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

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

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

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

用户宏可用于: - 项目关键参数 - 项目更新间隔和灵活间隔 - 触发器名称和描述 - 触发器表达式参数和常量(参见示例) - 许多其他位置-请参阅完整列表

全局和宿主宏的常见用例
  • 在多个位置使用全局宏;然后更改宏值并一键将配置更改应用于所有位置
  • 利用具有主机特定属性的模板:密码、端口号、文件名、正则表达式等。

It is advisable to use host macros instead of global macros because adding, updating or deleting global macros forces incremental configuration update for all hosts. For more information, see Upgrade notes for 6.4.0.

配置

要定义用户宏,请转到前端中的相应位置:

  • 有关全局宏,请访问管理→ 一般→ 宏
  • 对于主机和模板级宏,请打开主机或模板属性,然后查找macros选项卡

如果用户宏用于模板中的监控项或触发器,建议将该宏添加到模板中,即使该宏是在全局级别定义的。这样,如果宏类型为text,则将模板导出为XML并将其导入另一个系统仍将允许其按预期工作。秘密宏的值不会导出

用户宏具有以下属性:

参数 描述
宏名称。名字必须用花括号括起来,并以美元符号开头
示例:{$FRONTEND_URL}。宏名称中允许使用以下字符:A-Z(仅大写),0-9_.
宏值。支持三种值类型:
Text(默认)-纯文本值
Secret Text-该值用星号屏蔽,可用于保护密码或共享密钥等敏感信息
Vault secret-该值包含指向Vault secret的参考路径(如“path:key”,例如“secret/zabbix:password”)

注意当secret宏的值隐藏在视线之外时,可以通过在监控项中使用来显示该值。例如,在外部脚本中,可以使用引用秘密宏的“echo”语句向前端显示宏值,因为Zabbix服务器可以访问真正的宏值

要选择值类型,请单击值输入字段末尾的按钮:
图标表示文本宏
图标表示密文宏。悬停时,值字段将转换为按钮,用于输入宏的新值(要退出而不保存新值,请单击向后箭头()
图标表示秘密vault宏

用户宏值的最大长度为2048个字符(在5.2.0之前的版本中为255个字符)
Description 用于提供有关此宏的更多信息的文本字段

包含秘密宏的URLs将无法工作,因为其中的宏将解析为“*******”。

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

示例

示例 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

将代理不可用条件与项目更新同步间隔:

  • 定义 {$INTERVAL} 宏并在项目更新间隔中使用它;
  • 使用 {$INTERVAL} 作为代理不可用触发器的参数:

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

示例 5

集中配置工作时间:

  • 创建一个全局 {$WORKING_HOURS} 宏,等于 1-5,09:00-18:00
  • AdministrationGeneralWorking time 字段中使用它 图形界面
  • AdministrationUserWhen active 字段中使用它 媒体;
  • 使用它在工作时间设置更频繁的项目轮询:

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

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

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

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

用户宏上下文

请参阅 用户宏上下文