[comment]: # translation:outdated

[comment]: # ({c176fd71-2d9d6e33})
# 5 低级别自动发现宏

[comment]: # ({/c176fd71-2d9d6e33})

[comment]: # ({182d347f-bb12a85a})
#### 概述

[low-level] (/manual/discovery/low_level_discovery)中使用了一种宏发现](LLD) 功能：

 · {#MACRO} 

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

这些宏可用于创建监控项、触发器和图形*原型*。然后，当发现真正的文件系统时，网络接口等，这些宏被替换为实数值并且是创建真实监控项、触发器和图表的基础。

这些宏也用于创建主机和主机组 *prototypes*在虚拟机 [发现](/manual/vm_monitoring#host_prototypes) 中。

一些低级别自动发现宏与 LLD “预打包”Zabbix 中的函数 - {\#FSNAME}, {\#FSTYPE}, {\#IFNAME}, {\#SNMPINDEX},{\#SNMPVALUE}。然而，遵守这些名称不是强制性的，当创建一个[自定义](/manual/discovery/low_level_discovery#creating_custom_lld_rules)低级别自动发现规则。然后您可以使用任何其他 LLD 宏名称和参考那个名字。

[comment]: # ({/182d347f-bb12a85a})

[comment]: # ({new-ab24d69c})
#### Supported data types

When defining custom discovery rules, property values returned in JSON objects for LLD macros must be one of the following primitive types:

-   string; 
-   number;
-   boolean.

Arrays, objects, and null values are not supported. Any LLD macro referring to such a value will remain unexpanded and will appear literally (e.g. `'{#MY_MACRO}'`) during item preprocessing and creation.

[comment]: # ({/new-ab24d69c})

[comment]: # ({fd59648e-fc325ce1})
#### 支持的位置

可以使用 LLD 宏：

- 在低级别自动发现规则过滤器中
- 对于监控项原型
    -   姓名
    - 关键参数
    -   单元
    - 更新间隔^[1](lld_macros#footnotes)^
    - -超时^[1](lld_macros#footnotes)^
    - 历史存储期^[1](lld_macros#footnotes)^
    - 趋势存储期^[1](lld_macros#footnotes)^
    - 监控项值预处理步骤
    - SNMP OID
    - IPMI 传感器领域
    - 计算监控项公式
    - 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 agent字段
    - HTTP agent HTTP SSL 证书文件字段
    - HTTP agent HTTP SSL 密钥文件字段
    - HTTP agent HTTP SSL 密钥密码字段
    - 标签
- 用于触发器原型
    -   姓名
    - 运营数据
    - 表达式（仅在常量和函数参数中）
    - 网址
    -   描述
    - 标签
- 对于图形原型
    -   姓名
- 对于主机原型
    -   姓名
    - 可见名称
    - 自定义接口字段：IP、DNS、端口、SNMP v1/v2 社区、
        SNMP v3 上下文名称、SNMP v3 安全名称、SNMP v3
        身份验证密码，SNMP v3 隐私密码
    - 主机组原型名称
    - 主机标签值
    - 主机宏值
    - (参见[完整列表](/manual/vm_monitoring/discovery_fields))

在所有这些地方，LLD 宏都可以在静态用户 [macro上下文](/manual/config/macros/user_macros_context)。

[comment]: # ({/fd59648e-fc325ce1})

[comment]: # ({d7d5227f-5b26ab61})
#### 使用宏函数

低级别自动发现宏支持宏功能（在低级别自动发现规则过滤器），允许提取某个部分使用正则表达式的宏值。

例如，您可能想要提取客户名称和接口用于事件标记的以下 LLD 宏中的编号：

· {#IFALIAS}=customername_1

为此，可以将 `regsub` 宏函数与触发器原型的事件标签值字段：

![](../../../../assets/en/manual/config/macros/lld_macro_function.png)

请注意，未引用的监控项中不允许使用逗号 [key参数](/manual/config/items/item/key#key_parameters)，所以必须引用包含宏函数的参数。反斜杠(`\`) 字符应用于转义范围。例子：

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

有关宏函数语法的更多信息，请参阅：[宏函数](/manual/config/macros/macro_functions)

自 Zabbix 以来，低级别自动发现宏支持宏功能4.0。

[comment]: # ({/d7d5227f-5b26ab61})

[comment]: # ({573cd0dc-573cd0dc})
##### 脚注

^**1**^ 在标有 ^[1](lld_macros#footnotes)^ 的字段中，单个宏必须填充整个字段。一个或多个字段中的多个宏不支持与文本混合。

[comment]: # ({/573cd0dc-573cd0dc})
