5 低级别自动发现宏

概述

低级发现(LLD)功能中,会使用一种宏:

{#MACRO} 

它是在 LLD 规则中使用的宏,返回文件系统名称、网络接口、SNMP OID 等的实际值。

这些宏可用于创建实体原型(监控项、触发器、图形、LLD 规则、主机和主机组原型)。 在发现实际的文件系统网络接口虚拟机等时,这些宏会被替换为实际值,并作为创建实际实体的基础。

有些低级发现宏是 Zabbix 中 LLD 功能“预置”的——{#FSNAME}、{#FSTYPE}、{#IFNAME}、{#SNMPINDEX}、{#SNMPVALUE}。 但是,在创建自定义低级发现规则时,并不强制要求遵循这些名称。 此时,您可以使用任何其他 LLD 宏名称,并引用该名称。

支持的数据类型

在定义自定义发现规则时,JSON 对象中为 LLD 宏返回的属性值必须是以下原始类型之一:

  • string
  • number
  • boolean

不支持数组、对象和 null 值。
任何引用此类值的 LLD 宏都将保持未展开状态,并会在监控项预处理和创建期间按字面显示(例如 '{#MY_MACRO}')。

支持的位置

LLD 宏可用于:

  • 低级别发现规则过滤器中
  • 嵌套的低级别发现规则中,在
    • JSONPath 预处理参数中
    • 用于自定义 LLD 宏的 JSONPath 字段中
  • 用于监控项原型和发现原型,在以下位置中
    • 名称
    • 键参数
    • 单位
    • 更新间隔1
    • 超时1
    • 历史数据存储期1
    • 趋势数据存储期1
    • 监控项值预处理步骤
    • SNMP OID
    • IPMI 传感器字段
    • calculated/aggregate 监控项表达式中,在:
      • 表达式常量和函数参数中
      • 监控项键参数中
    • aggregate 监控项过滤条件(主机组名称和标签名称)
    • SSH 脚本和 Telnet 脚本
    • 数据库监控 SQL 查询
    • JMX 监控项端点字段
    • 描述
    • HTTP agent URL 字段
    • HTTP agent HTTP 查询字段字段
    • HTTP agent 请求体字段
    • HTTP agent 所需状态码字段
    • HTTP agent 标头字段键和值
    • HTTP agent HTTP 认证用户名字段
    • HTTP agent HTTP 认证密码字段
    • HTTP agent HTTP proxy 字段
    • HTTP agent HTTP SSL 证书文件字段
    • HTTP agent HTTP SSL 密钥文件字段
    • HTTP agent HTTP SSL 密钥密码字段
    • 标签
  • 用于触发器原型,在以下位置中
    • 名称
    • 运行数据
    • 表达式(仅限常量和函数参数中)
    • URL
    • 描述
    • 标签
  • 用于图形原型,在以下位置中
    • 名称
  • 用于主机原型,在以下位置中
    • 名称
    • 可见名称
    • 自定义接口字段:IP、DNS、端口、SNMP v1/v2 community、SNMP v3 上下文名称、SNMP v3 安全名称、SNMP v3 认证口令、SNMP v3 隐私口令
    • 主机组原型名称
    • 主机标签值
    • 主机宏值
    • (请参见完整列表

在所有这些位置中,除了低级别发现规则过滤器外,LLD 宏还可在静态用户宏上下文中使用。

使用宏函数

宏函数支持与低级发现宏一起使用(低级发现规则的 filter 除外),允许使用正则表达式提取宏值中的某一部分。

例如,出于事件标签的目的,你可能希望从以下 LLD 宏中提取客户名称和接口编号:

{#IFALIAS}=customername_1

为此,可以在触发器原型的事件标签值字段中,将 regsub 宏函数与该宏一起使用:

请注意,未加引号的监控项 key parameters 中不允许使用逗号,因此包含宏函数的参数必须加引号。 参数内部的双引号应使用反斜杠(\)字符进行转义。 示例:

net.if.in["{{#IFALIAS}.regsub(\"(.*)_([0-9]+)\", \1)}",bytes]

有关宏函数语法的更多信息,请参见:Macro functions

自 Zabbix 4.0 起,低级发现宏支持宏函数。

不带键参数的监控项原型

当未使用监控项键参数时,请将 LLD 宏放在监控项键参数方括号 [...] 内,这样它会被视为一个参数,并在发现期间被替换:

v_[{#MACRO}]
注释

1 在标有 1 的字段中,单个宏必须填充整个字段。 不支持在一个字段中使用多个宏,也不支持将宏与文本混合使用。