2022 Zabbix中国峰会
2022 Zabbix中国峰会

4 低级别发现宏

概述

有一种在 低级别自动发现 函数中使用的宏:

{#MACRO} 

它是一个在低级别发现规则中使用的宏,其返回文件系统名称、网络接口和SNMP OIDs等的真实值。

这些宏可以用于创建监控项、触发器和图形原型。然后,当发现真实的文件系统、网络接口等时,这些宏将被替换为真实的值,并且以这些值来创建真实的监控项、触发器和图形。

这些宏还用于在虚拟机 自动发现 中创建主机和主机组原型

一些低级别发现宏在 Zabbix 中是已经预先内置了的,例如 {#FSNAME}、{#FSTYPE}、{#IFNAME}、{#SNMPINDEX}、{#SNMPVALUE} 这些宏。但是,在创建 自定义 低级别发现规则的时候,遵守这些宏名称并不是强制性的。所以,你可以使用任何其他的低级别发现宏名称并引用该名称。

可支持的位置

低级别发现宏可以用在:

  • 在低级别规则过滤器中
  • 用于监控项原型中:
    • names
    • key parameters
    • units
    • update intervals
    • history storage periods
    • trend storage periods
    • SNMP OIDs
    • IPMI sensor fields
    • calculated item formulas
    • SSH and Telnet scripts
    • database monitoring SQL queries
    • JMX item endpoint fields
    • descriptions
    • 从Zabbix 4.0开始,也适用于:
      • item value preprocessing steps
      • HTTP agent URL field
      • HTTP agent HTTP query fields field
      • HTTP agent request body field
      • HTTP agent required status codes field
      • HTTP agent headers field key and value
      • HTTP agent HTTP authentication username field
      • HTTP agent HTTP authentication password field
      • HTTP agent HTTP proxy field
      • HTTP agent HTTP SSL certificate file field
      • HTTP agent HTTP SSL key file field
      • HTTP agent HTTP SSL key password field
      • HTTP agent HTTP timeout field
  • 用于触发器原型中:
    • names
    • operational data
    • expressions(仅用于常量和函数参数中)
    • URLs
    • descriptions
    • event tag names and values
  • 用于图形原型中:
    • names
  • 用于主机原型中:
    • names
    • visible names
    • host group prototype names
    • host macro value
    • (详细查阅 完整列表)

在上述所有位置,低级别发现宏都可以在静态用户 宏上下文 中使用。

使用宏函数

宏函数支持低级别发现的宏(除了在低级别发现规则过滤器中),允许使用正则表达式提取宏值的特定部分。

比如,您可能希望从以下低级别发现宏中提取客户名称和接口编号,以便进行事件标记:

{#IFALIAS}=customername_1

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

注意, 在未加引号的监控项 键值参数 中不允许使用逗号, 因此,包含宏函数的参数必须用引号括起来。 反斜杠(\)字符用作于转义参数内的双引号。 例如:

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

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

从Zabbix 4.0开始,低级别发现宏就支持宏函数了。

脚注

1 在标记为单个宏的字段1中必须填满整个字段。字段中不支持多个宏或宏与文本的混合。