3 低级发现

概述

低级别自动发现提供了一种自动create 监控项的方法, 计算机上不同实体的触发器和图形。例如, Zabbix 可以自动开始监控 file 系统或网络 接口,无需为每个接口单独配置 create 监控项。 file 系统或网络接口。此外,还可以手动配置 根据需要自动删除不必要的实体来配置Zabbix 定期执行的发现操作的实际结果。

用户可以定义自己的发现类型,只要他们遵循以下规则: 特定的 JSON 协议。

发现流程的总体架构如下所示。

首先,用户在 数据收集 → 模板 中创建一个发现规则, 发现 列。一个发现规则由(1)一个 监控项 组成, 发现必要的实体(例如,file 系统或网络 接口)以及2的监控项、触发器和图形的原型 应根据该 监控项 的值来创建。

发现必要实体的 监控项 就像一个常规的 监控项 其他地方见过:服务器会询问一个Zabbix agent(或 whatever 类型的 对于该监控项的值设置为时,监控项的值为,agent会响应一个 文本值。区别在于agent返回的值 应包含以 JSON 格式表示的已发现实体列表。而 此格式的详细信息仅对自定义实现者重要 发现检查,需要知道返回值 包含宏 → 值对的列表。例如,监控项 "net.if.discovery" 可能会返回两对结果:"{#IFNAME}" → "lo" 和 "{#IFNAME}" → "eth0"

这些宏用于名称、键和其他原型字段中 它们随后会被接收到的值替换以创建实际内容。 监控项、触发器、图形,甚至每个已发现实体的主机。请参见 使用options的完整列表 LLD 宏。

当服务器接收到一个发现 监控项 的值时,它会查看 宏 → 值对,并为每对生成实际的 监控项、触发器 以及基于其原型的图形。在该示例中 如上所述的“net.if.discovery”,服务器将generate一组监控项, 环回接口“lo”的触发器和图形,以及另一组 对于接口 "eth0"。

请注意,自 Zabbix 4.2 以来,由其返回的 JSON 格式已发生变化。 低级别自动发现规则已更改。不再支持以下预期功能 JSON将包含"data" object。低级别自动发现将 现在接受一个包含 array 的普通 JSON,以支持新功能 诸如 监控项 值的预处理以及自定义路径等功能 低级别自动发现宏值在JSON文档中。

内置的自动发现键已更新为返回LLD行的array 在 JSON 文档的根目录处。Zabbix 将自动提取宏 并且如果一个array字段的值使用{#MACRO}语法作为键。任何新的 原生自动发现检查将使用不带“data”的新语法 元素。在处理低级别发现值时,首先处理根元素 位于 array$.$.data 处。

虽然“data”元素已从所有本机 监控项 相关内容中移除 用于发现,为了向后兼容,Zabbix 仍将接受 包含“data”元素的JSON表示法,尽管不推荐使用。如果 JSON 包含一个 object,其中只有一个 "data" array 元素,然后它 将自动使用JSONPath提取元素的内容 $.data. 低级别自动发现(LLD)现在接受可选的用户自定义LLD 使用 JSONPath 语法指定自定义路径的宏。

::: notewarning 由于上述更改的结果,较新的 agents 不再 更长的将能够与旧的 Zabbix server 一起工作。 仅返回OutputFormat格式要求结果

另请参阅:已发现的实体

配置低级发现

我们将通过一个 file 系统发现的示例来说明低级别自动发现功能。

要配置自动发现,请执行以下步骤:

  • 前往:数据收集模板主机
  • 在相应模板/主机 所在行点击 发现

  • 点击屏幕右上角的 创建发现规则
  • 填写发现规则表单中的必要详细信息

发现规则

发现规则表单包含五个标签页,从左到右依次表示发现过程中的数据流:

  • 发现规则 - 最重要的是指定用于获取发现数据的内置 监控项 或自定义脚本
  • 预处理 - 对发现的数据进行一些预处理
  • LLD宏 - 允许提取一些宏值,用于发现的 监控项、触发器等
  • 过滤器 - 允许过滤发现的值
  • 覆盖 - 允许在将发现的 objects 应用于特定原型时修改 监控项、触发器、图表或 主机 原型

发现规则 标签页包含用于发现的 监控项 键(以及一些通用的发现规则属性):

所有必填输入字段均以红色星号标记。

参数 描述
Name 发现规则的名称。
Type 执行发现的检查类型。
在此示例中,我们使用的是 Zabbix agent 监控项 类型。
发现规则也可以是依赖于常规 监控项 的 dependent item。它不能依赖于其他发现规则。对于依赖的 监控项,请选择相应的类型(Dependent 监控项),并在“主 监控项”字段中指定主 监控项。主 监控项 必须存在。
Key 输入发现 监控项 键(最多2048个字符)。
例如,您可以使用内置的“vfs.fs.discovery” 监控项 键返回一个包含计算机上存在的 file 系统列表及其类型和挂载选项的 JSON string。
请注意,文件系统发现的另一个选项是使用“vfs.fs.get” agent 键的发现结果(参见 example)。
Update interval 此字段指定 Zabbix 执行发现的频率。在开始时,当您刚刚设置 file 系统发现时,可能希望将其设置为较短的间隔,但一旦知道它正常工作后,可以将其设置为 30 分钟或更长,因为 file 系统通常不会经常更改。
支持 Time suffixes,例如 30s、1m、2h、1d。
支持 User macros
注意:只有在存在非零值的自定义间隔时,才能将 update 间隔设置为 '0'。如果设置为 '0',并且存在非零值的自定义间隔(灵活或计划),则将在自定义间隔期间轮询 监控项。
除非发现规则具有调度或灵活的 update 间隔且 更新间隔 设置为 0,否则新发现规则将在创建后的 60 秒内进行检查。
注意,对于现有的发现规则,可以通过点击 立即执行 按钮 立即执行发现。
Custom intervals 您可以为检查 监控项 create 自定义规则:
灵活 - create 更新间隔 的例外情况(不同频率的间隔)
调度 - create 自定义轮询计划。
详细信息请参见 Custom intervals
Timeout 设置发现检查的超时时间。选择超时选项:
全局 - 使用 proxy/全局超时(显示在灰色的 超时 字段中);
覆盖 - 使用自定义超时(在 超时 字段中设置;允许范围:1 - 600秒)。支持 时间后缀,例如 30s、1m,以及 user macros
点击 超时 链接可以配置 配置 超时或 超时 超时(如果未使用 proxy)。请注意,只有具有 超级管理员 类型且具有 管理General管理Proxies 前端部分权限的用户才能看到 超时 链接。
Delete lost resources 指定一旦发现实体的发现状态变为“不再发现”,它将被删除的时间:
从不 - 不会删除;
立即 - 立即删除;
之后 - 在指定的时间段后删除。该值必须大于 禁用丢失资源 的值。
支持 Time suffixes,例如 2h、1d。
支持 User macros
注意:不建议使用“立即”,因为错误地编辑过滤器可能会导致实体及其所有历史数据被删除。
请注意,手动禁用的资源不会通过低级别发现删除。
Disable lost resources 指定一旦发现实体的发现状态变为“不再发现”,它将被禁用的时间:
从不 - 不会禁用;
立即 - 立即禁用;
之后 - 在指定的时间段后禁用。该值应大于发现规则的 update 间隔。
请注意,自动禁用的资源如果通过低级别发现重新发现,将再次启用。手动禁用的资源如果重新发现,将不会再次启用。
如果 删除丢失资源 设置为“立即”,则不会显示此字段。
支持 Time suffixes,例如 2h、1d。
支持 User macros
Description 输入描述。
Enabled 如果选中,规则将被处理。

发现规则的历史记录不会被保留。

预处理

预处理选项卡允许定义应用的转换规则 发现结果。可以进行一次或多次转换 在此步骤中,转换将按照它们的顺序执行 定义。所有预处理均由 Zabbix server 完成。

另请参阅:

类型
转换 说明
Text
正则表达式 将接收到的值与 <pattern> 正则表达式匹配,并用提取的 <output> 替换值。正则表达式支持使用 \N 序列提取最多 10 个捕获组。
参数:
pattern - 正则表达式
output - 输出格式模板。\N(其中 N=1…9)转义序列为第 N 个匹配组替换。\0 转义序列为匹配文本替换。
如果勾选 自定义失败处理 复选框,可以指定自定义错误处理选项:丢弃该值、设置指定值或设置指定错误消息。
替换 查找搜索 string 并将其替换为其他内容(或为空)。将替换所有出现的搜索 string。
参数:
搜索 string - 要查找并替换的 string,区分大小写(必填)
替换内容 - 用于替换搜索 string 的 string。替换 string 也可以为空,从而在找到搜索 string 时有效地将其 delete。
可以使用转义序列为换行符、回车符、制表符和空格进行搜索或替换为 "\n \r \t \s";反斜杠可以转义为 "\\",转义序列可以转义为 "\\n"。在低级别发现期间会自动对换行符、回车符、制表符进行转义。
Structured data
JSONPath 使用 JSONPath functionality 从 JSON 数据中提取值或片段。
如果选中 Custom on fail 复选框,可以指定自定义错误处理选项:丢弃该值、设置指定值或设置指定的错误消息。
XML XPath 使用 XPath 功能从 XML 数据中提取值或片段。
要使此选项生效,Zabbix server 必须使用 libxml 支持进行编译。
示例:
number(/document/item/value) 将从 <document><item><value>10</value></item></document> 中提取 10
number(/document/item/@attribute) 将从 <document><item attribute="10"></item></document> 中提取 10
/document/item 将从 <document><item><value>10</value></item></document> 中提取 <item><value>10</value></item>
请注意,不支持命名空间。
如果选中 Custom on fail 复选框,则可以指定自定义错误处理选项:丢弃该值、设置指定值或设置指定的错误消息。
CSV 到 JSON 将 CSV file 数据转换为 JSON 格式。
有关更多信息,请参见:5-csv-到-json-预处理
XML 到 JSON 将 XML 格式的数据转换为 JSON。
有关更多信息,请参见:序列化规则
如果勾选 自定义失败处理 复选框,可以指定自定义错误处理选项:丢弃该值、设置指定值或设置指定的错误消息。
SNMP
SNMP walk 值 通过指定的 OID/MIB 名称提取值并应用格式化选项:
未更改 - 返回 Hex-string 作为未转义的十六进制 string(注意显示提示仍会应用);
从 Hex-string 转换为 UTF-8 - 将 Hex-string 转换为 UTF-8 string;
从 Hex-string 转换为 MAC 地址 - 将 Hex-string 转换为 MAC 地址 string(其中 ' ' 将被替换为 ':');
从 BITS 转换为 integer - 将以十六进制字符序列(例如 "1A 2B 3C 4D")表示的位 string 的前 8 字节转换为 64 位无符号 integer。对于超过 8 字节的位字符串,后续字节将被忽略。
如果选中 Custom on fail 复选框,可以指定自定义的错误处理选项:丢弃该值、设置指定值或设置指定的错误消息。
SNMP walk 转 JSON 将 SNMP 值转换为 JSON。在 JSON 中指定一个字段名以及对应的 SNMP OID 路径。字段值将由指定 SNMP OID 路径中的值填充。
您可以在此预处理步骤中使用 SNMP OID discovery
SNMP walk 值 步骤中类似的值格式化选项可用。
如果勾选 自定义失败处理 复选框,则可以指定自定义错误处理选项:丢弃该值、设置指定值或设置指定的错误消息。
SNMP get 值 对 SNMP get 值应用格式化选项:
UTF-8 从 Hex-string - 将 Hex-string 转换为 UTF-8 string;
MAC 从 Hex-string - 将 Hex-string 转换为 MAC 地址 string(其中 ' ' 将被 ':' 替换);
integer 从 BITS - 将以十六进制字符序列(例如 "1A 2B 3C 4D")表示的位 string 的前 8 字节转换为 64 位无符号 integer。对于长于 8 字节的位字符串,后续字节将被忽略。
如果勾选 Custom on fail 复选框,可以指定自定义的错误处理选项:丢弃该值、设置指定值或设置指定的错误消息。
Custom scripts
JavaScript 在单击参数字段或其旁边的铅笔图标时打开的模态编辑器中输入 JavaScript 代码。
请注意,可用的 JavaScript 长度取决于 自定义脚本限制
更多信息,请参见:Javascript preprocessing
Validation
不匹配正则表达式 指定一个值不得匹配的正则表达式。
例如:Error:(.*?)\.
如果选中“自定义失败处理”复选框,则可以指定自定义错误处理选项:丢弃该值、设置指定值或设置指定的错误消息。
检查 JSON 中的错误 检查位于 JSONPath 的应用级错误消息。如果检查成功且消息非空,则停止处理;否则继续处理此预处理步骤之前的值。请注意,这些外部服务错误将原样报告给用户,不会添加预处理步骤信息。
例如:$.errors。如果收到类似 {"errors":"e1"} 的 JSON,则不会执行下一个预处理步骤。
如果选中 Custom on fail 复选框,可以指定自定义错误处理选项:丢弃该值、设置指定值或设置指定的错误消息。
检查 XML 中的错误 检查位于 Xpath 的应用级别错误消息。如果检查成功且消息不为空,则停止处理;否则继续处理此前预处理步骤前的值。请注意,这些外部服务错误会原样报告给用户,不会添加预处理步骤信息。
如果无法解析无效 XML,则不会报告错误。
如果选中 自定义失败处理 复选框,可以指定自定义错误处理选项:丢弃该值、设置指定值或设置指定错误消息。
匹配正则表达式 指定一个值必须匹配的正则表达式。
如果勾选了 自定义失败处理 复选框,则可以指定自定义错误处理选项:丢弃该值、设置指定值或设置指定的错误消息。
Throttling
Discard unchanged with heartbeat 在定义的时间段内(以秒为单位)若值未发生变化则丢弃该值。
支持使用正数 integer 来指定秒数(最小值为 1 秒)。此字段中可以使用时间后缀(例如:30s, 1m, 2h, 1d)。此字段中也可以使用用户宏和低级别自动发现宏。
对于一个自动发现 监控项,只能指定一个节流选项。
例如:1m。如果在 60 秒内两次传递相同的文本到此规则中,该文本将被丢弃。
注意:更改 监控项原型 不会重置节流。只有在更改预处理步骤时才会重置节流。
Prometheus
Prometheus 转 JSON 将所需的 Prometheus 指标转换为 JSON。
有关更多详细信息,请参见 Prometheus checks

请注意,如果发现规则已通过以下方式应用于主机: 模板后,此选项卡的内容为只读。

自定义宏

LLD宏选项卡允许指定自定义的低级别自动发现宏。

在返回的JSON中没有预先定义所需宏的情况下,自定义宏非常有用。例如:

  • 文件系统发现的原生宏vfs.fs.discovery键返回一个包含一些预定义LLD宏(如{#FSNAME}、{#FSTYPE})的JSON。这些宏可直接用于监控项、触发器原型(参见本页后续章节);无需定义自定义宏;
  • vfs.fs.get agent 监控项也返回一个包含filesystem data的JSON,但没有任何预定义的LLD宏。在这种情况下,您可以自行定义宏,并使用JSONPath将其映射到JSON中的值:

提取的值可用于发现的监控项、触发器等。请注意,值将从发现结果以及迄今为止的任何预处理步骤中提取。

参数 描述
LLD macro 低级别自动发现宏的名称,使用以下语法:{#MACRO}。
JSONPath 使用JSONPath语法从LLD行中提取LLD宏值的路径。
从返回的JSON中提取的值用于替换监控项、触发器等原型字段中的LLD宏。
JSONPath可以使用点表示法或方括号表示法。在存在特殊字符或Unicode的情况下应使用方括号表示法,例如:$['unicode + special chars #1']['unicode + special chars #2']

例如,$.foo将从此JSON中提取"bar"和"baz":[{"foo":"bar"}, {"foo":"baz"}]
请注意,$.foo也将从此JSON中提取"bar"和"baz":{"data":[{"foo":"bar"}, {"foo":"baz"}]},因为单个"data" object会自动处理(为了与4.2之前Zabbix版本中的低级别自动发现实现保持向后兼容)。

过滤器

过滤器可用于仅针对符合特定条件的实体,来generate真实监控项、触发器和图形。过滤器选项卡包含发现规则的过滤定义,允许对发现值进行过滤:

参数 描述
Type of calculation 提供以下用于计算过滤器的选项:
And(与) - 所有过滤器都必须通过;
Or(或) - 只要有一个过滤器通过即可;
And/Or(与/或) - 对不同宏名称使用And(与),对相同宏名称使用Or(或)
自定义表达式 - 提供定义自定义过滤器计算方式的可能性。公式必须包含列表中的所有过滤器。长度限制为255个字符。
Filters 提供以下过滤条件运算符:匹配不匹配存在不存在
匹配不匹配运算符需要一个Perl Compatible Regular Expression(PCRE)。例如,如果您只对C:、D:和E: file系统感兴趣,可以将{#FSNAME}填入“宏”字段,并将正则表达式“^C\

LLD规则中使用的正则表达式(例如,“用于发现的文件系统”正则表达式)中的错误或拼写错误可能导致成千上万的配置元素、历史值和多个主机的事件被删除。

如果需要正确发现仅大小写不同的file系统名称,则MySQL中的Zabbix数据库必须创建为区分大小写的。

覆盖

覆盖 选项卡允许设置规则以修改 监控项 列表。 触发器、图形和主机原型或其属性用于发现 满足给定条件的objects。

覆盖项(如果存在)将以可重新排序的拖放列表形式显示,并 按照定义的顺序执行。要配置详细信息 新建覆盖,点击 Overrides 中的 块。要编辑现有覆盖,请点击覆盖名称。弹出窗口 窗口将打开,允许编辑覆盖规则的详细信息。

所有必填参数均以红色星号标记。

参数 描述
Name 唯一的(每个LLD规则)覆盖名称。
If filter matches 定义在满足过滤条件时是否处理后续的覆盖规则:
继续覆盖 - 将处理后续的覆盖规则。
停止处理 - 将执行此覆盖规则以及之前(如果有)的操作,后续的覆盖规则将被忽略(针对匹配的LLD行)。
Filters 确定应将覆盖应用于哪些已发现的实体。覆盖筛选器在发现规则 过滤器 之后进行处理,并具有相同的功能。
Operations 覆盖操作将显示以下详细信息:
条件 - 一个 object 类型(监控项 原型/触发器原型/图形原型/主机 原型)以及需要满足的条件(等于/不等于/包含/不包含/匹配/不匹配)
操作 - 显示用于编辑和删除操作的链接。

配置操作

要配置新操作的详细信息,请单击 操作中的 块。要编辑现有操作,请单击 旁边 操作。将弹出一个窗口,您可以在其中编辑操作的详细信息。 open.

参数 描述
Object 提供四种类型的 objects:
监控项 原型
触发器原型
图形原型
主机 原型
Condition 允许过滤操作应应用到的实体。
操作符 支持的操作符:
等于 - 应用于此原型
不等于 - 应用于所有原型,除了此原型
包含 - 如果原型名称包含此 string,则应用
不包含 - 如果原型名称不包含此 string,则应用
匹配 - 如果原型名称匹配正则表达式,则应用
不匹配 - 如果原型名称不匹配正则表达式,则应用
模式 要搜索的regular expression或string。
object:监控项 原型
创建启用 当复选框被选中时,按钮将显示出来,允许覆盖原始 监控项 原型设置:
- 监控项 将以启用状态被添加。
- 监控项 将被添加到已发现的实体中,但处于禁用状态。
发现 当复选框被选中时,按钮将会出现,允许覆盖原始 监控项 原型设置:
- 将会添加该 监控项。
- 将不会添加该 监控项。
更新间隔 当复选框被选中时,将出现两个选项,允许为监控项设置不同的间隔:
延迟 - 监控项 update 间隔。支持 User macrostime suffixes(例如 30s, 1m, 2h, 1d)。如果使用自定义间隔,应将其设置为 0。
自定义间隔 - 点击 来指定灵活的/计划间隔。详细信息请参见 Custom intervals
历史 当复选框被勾选时,按钮将显示出来,允许为 监控项 设置不同的历史数据存储周期:
不存储 - 如果选择此项,则不会存储历史数据。
存储至多 - 如果选择此项,则右侧会出现一个输入字段用于指定存储周期。支持 User macrosLLD macros
趋势 当复选框被选中时,按钮将显示出来,允许为 监控项 设置不同的趋势存储周期:
不存储 - 如果选择此项,趋势将不会被存储。
存储至多 - 如果选择此项,右侧将出现一个输入字段用于指定存储周期。支持 User macrosLLD macros
标签 当复选框被选中时,将出现一个新的区块,允许指定标签-值对。
这些标签将追加到 监控项 原型中指定的标签中,即使标签名称相同。
object:触发器原型
创建启用 当复选框被选中时,按钮将显示出来,允许覆盖原始触发器原型设置:
- 触发器将以启用状态添加。
- 触发器将被添加到已发现的实体中,但处于禁用状态。
发现 当复选框被选中时,将显示按钮,允许覆盖原始触发器原型设置:
- 将添加触发器。
- 不会添加触发器。
严重性 当复选框被选中时,触发器严重性按钮将出现,允许修改触发器严重性。
标签 当勾选此复选框时,将出现一个新的区块,允许指定标签-值对。
这些标签将追加到触发器原型中指定的标签中,即使标签名称相同也会追加。
object:图表原型
发现 当复选框被选中时,按钮将出现,允许覆盖原始图形原型设置:
- 将添加该图形。
- 不会添加该图形。
object:主机 原型
创建启用 当复选框被勾选时,按钮将显示出来,允许覆盖原始 主机 原型设置:
- 主机 将以启用状态创建。
- 主机 将以禁用状态创建。
发现 当复选框被选中时,按钮将出现,允许覆盖原始 主机 原型设置:
- 主机 将被发现。
- 主机 将不会被发现。
链接模板 当复选框被选中时,将出现一个输入字段以指定模板。开始输入模板名称,或者点击字段旁边的 Select,并在弹出窗口中从列表中选择模板。
此覆盖中的模板将添加到所有已链接到 主机 原型的模板中。
标签 当复选框被选中时,将会出现一个新的区块,允许指定标签-值对。
这些标签将会追加到 主机 原型中指定的标签中,即使标签名称相同。
主机 清单 当复选框被选中时,按钮将显示出来,允许为 主机 原型选择不同的清单 mode
禁用 - 不填充 主机 清单
手动 - 手动提供详细信息
自动 - 根据收集的指标自动填充 主机 清单数据。

表单按钮

表单底部的按钮可用于执行多个操作。

添加发现规则。此按钮仅适用于新建的发现规则。
更新发现规则的属性。此按钮仅适用于已存在的发现规则。
基于当前发现规则的属性创建另一个发现规则。
立即根据发现规则执行发现操作。该发现规则必须已经存在。请参见 more details
注意:在立即执行发现操作时,configuration cache 不会更新,因此结果不会反映发现规则配置的最新更改。
测试发现规则配置。使用此按钮可以验证配置设置(例如连接性和参数正确性),而无需永久应用任何更改。
删除发现规则。
取消对发现规则属性的编辑。

发现的实体

以下屏幕截图说明了已发现的监控项、触发器和 graphs look like in 主机's configuration. Discovered entities are 以橙色链接开头,该链接指向它们来源的发现规则。

请注意,如果存在以下情况,将不会创建已发现的实体: 具有相同唯一性准则的已存在实体,用于 例如,具有相同键值的监控项或具有相同名称的图表。错误 在这种情况下,前端会显示此消息 发现规则无法create某些实体。该发现规则 其本身不会因此而变为不支持状态,因为某些实体可能无法 已创建并被跳过。发现规则将继续执行 创建/更新其他实体。

如果某个被发现的实体(主机,file 系统、接口等)停止被发现(或者不再通过过滤器),则基于该实体创建的实体可能会被自动禁用并最终删除。

根据“禁用丢失资源”参数的值,可能会自动禁用丢失的资源。这会影响丢失的 主机、监控项 以及触发器。

根据“Delete lost resources”参数的值,可能会自动删除丢失的资源。这会影响丢失的主机、主机组、监控项、触发器和图形。

当发现的实体变为“不再发现”时,其生命周期 指标显示在实体列表中。将鼠标指针悬停在其上 将显示一条消息,指示其状态详细信息。

如果实体被标记为删除,但尚未删除,则 预期时间(禁用的发现规则或 监控项 主机),它们将被 下次处理发现规则时将删除。

包含其他实体的实体,如果这些实体被标记为删除,则将 如果在发现规则级别上发生更改,则不适用 update。例如, 基于LLD的触发器如果包含标记为监控项的update,则不会生效。 用于删除。

其他发现类型

有关其他类型开箱即用发现的更多详细信息和操作指南,请参见以下章节:

有关发现的 JSON 格式的更多详细信息 监控项 以及如何实现您自己的 file 系统发现器的 Perl 脚本示例,请参见 creating custom LLD rules