3 低级发现

概述

低级发现(LLD)提供了一种自动create监控项、触发器以及为计算机上不同实体创建图形的方法。 例如,Zabbix可以自动开始监控file系统或机器上的网络接口,而无需手动为每个file系统或网络接口create监控项。 LLD还可以create主机,例如为populate virtual machines在虚拟化管理程序上发现的实体创建主机。 此外,可以配置Zabbix根据定期执行发现的实际结果自动删除不需要的实体。

用户可以定义自己的发现类型,前提是遵循特定的JSON协议。

发现过程的总体架构如下。

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

发现必要实体的监控项与其他地方看到的常规监控项类似:服务器向Zabbix agent(或监控项设置的任何类型)请求该监控项的值,agent以文本值响应。 不同之处在于agent响应的值应包含JSON格式的发现实体列表。 虽然此格式的细节仅对自定义发现检查的实现者重要,但有必要知道返回值包含宏→值对的列表。 例如,监控项 "net.if.discovery"可能返回两对:"{#IFNAME}" → "lo"和"{#IFNAME}" → "eth0"。

这些宏用于名称、键和其他原型字段中,然后替换为接收到的值,为每个发现的实体创建实际的监控项、触发器、图形甚至主机。 查看options以了解使用LLD宏的完整列表。

当服务器接收到发现监控项的值时,它会查看宏→值对,并根据它们的原型为每对生成实际的监控项、触发器和图形。 在上面的"net.if.discovery"示例中,服务器将为环回接口"lo"generate一组监控项、触发器和图形,为接口"eth0"创建另一组。

请注意,自Zabbix 4.2起,低级发现规则返回的JSON格式已更改。 不再期望JSON包含"data"object。 低级发现现在接受包含array的正常JSON,以支持新功能,如监控项值预处理和JSON文档中低级发现宏值的自定义路径。

内置发现键已更新为在JSON文档的根目录返回LLD行的array。 如果array字段使用{#MACRO}语法作为键,Zabbix将自动提取宏和值。 任何新的本机发现检查将使用不带"data"元素的新语法。 在处理低级发现值时,首先定位根(array在$.$.data)。

虽然"data"元素已从所有与发现相关的本机监控项中删除,但为了向后兼容,Zabbix仍将接受带有"data"元素的JSON表示法,但不鼓励使用。 如果JSON包含仅有一个"data"array元素的object,则它将使用JSONPath $.data自动提取元素的内容。 低级发现现在接受可选的用户定义LLD宏,其自定义路径以JSONPath语法指定。

由于上述更改,较新的agents将不再能够与较旧的Zabbix server一起工作。

另请参阅:发现的实体

配置低级发现

我们将通过file系统发现的示例来说明低级发现机制.

要配置发现规则,请执行以下操作:

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

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

发现规则

发现规则表单包含五个标签页,从左至右分别代表发现过程中的数据流:

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

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

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

参数 描述
Name 发现规则的名称。
Type 执行发现的检查类型。
本例中使用的是Zabbix agent 监控项类型。
发现规则也可以是dependent item,取决于常规监控项。它不能依赖于另一个发现规则。对于依赖型监控项,需选择相应类型(依赖型监控项)并在'主监控项'字段中指定主监控项。主监控项必须存在。
Key 输入发现监控项键(最多2048字符)。
例如,可使用内置"vfs.fs.discovery"监控项键返回包含计算机上存在的file系统列表、其类型及挂载选项的JSONstring。
注意文件系统发现的另一种选择是使用"vfs.fs.get"agent键的发现结果(参见example)。
Update interval 此字段指定Zabbix执行发现的频率。初始设置file系统发现时,可设为较小间隔,确认工作正常后可调整为30分钟或更长,因为file系统通常不会频繁变更。
支持Time suffixes,如30s、1m、2h、1d。
支持User macros
注意:仅当存在非零值的自定义间隔时,update间隔可设为'0'。若设为'0'且存在非零值的自定义间隔(弹性或计划),监控项将在自定义间隔期间轮询。
新建发现规则将在创建后60秒内检查,除非它们具有调度或弹性update间隔且更新间隔设为0。
注意可通过点击立即执行按钮立即执行现有发现规则的发现。
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转义序列将被替换为匹配的文本。
如果勾选Custom on fail复选框,则可以指定自定义错误处理选项:丢弃值、设置指定值或设置指定错误消息。
替换 查找搜索string并将其替换为另一个(或空)。搜索string的所有出现都将被替换。
参数:
search string - 要查找和替换的string,区分大小写(必需)
replacement - 用于替换搜索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 将CSVfile数据转换为JSON格式。
更多信息,请参阅:5-csv-到-json-预处理
XML转JSON 将XML格式的数据转换为JSON。
更多信息,请参阅:序列化规则
如果勾选Custom on fail复选框,则可以指定自定义错误处理选项:丢弃值、设置指定值或设置指定错误消息。
SNMP
SNMP walk值 按指定的OID/MIB名称提取值并应用格式化选项:
未更改 - 返回Hex-string作为未转义的hex 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值步骤类似的格式化选项。
如果勾选Custom on fail复选框,则可以指定自定义错误处理选项:丢弃值、设置指定值或设置指定错误消息。
SNMP get值 对SNMP get值应用格式化选项:
从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复选框,则可以指定自定义错误处理选项:丢弃值、设置指定值或设置指定错误消息。
Custom scripts
JavaScript 在点击参数字段或旁边的铅笔图标时打开的模态编辑器中输入JavaScript代码。
注意可用的JavaScript长度取决于自定义脚本限制
更多信息,请参阅:Javascript preprocessing
Validation
不匹配正则表达式 指定一个值必须不匹配的正则表达式。
例如Error:(.*?)\.
如果勾选Custom on fail复选框,则可以指定自定义错误处理选项:丢弃值、设置指定值或设置指定错误消息。
检查JSON中的错误 检查位于JSONPath的应用级错误消息。如果成功且消息不为空,则停止处理;否则继续使用此预处理步骤之前的值进行处理。注意这些外部服务错误将按原样报告给用户,不添加预处理步骤信息。
例如$.errors。如果接收到类似{"errors":"e1"}的JSON,则不会执行下一个预处理步骤。
如果勾选Custom on fail复选框,则可以指定自定义错误处理选项:丢弃值、设置指定值或设置指定错误消息。
检查XML中的错误 检查位于Xpath的应用级错误消息。如果成功且消息不为空,则停止处理;否则继续使用此预处理步骤之前的值进行处理。注意这些外部服务错误将按原样报告给用户,不添加预处理步骤信息。
解析无效XML失败时不会报告错误。
如果勾选Custom on fail复选框,则可以指定自定义错误处理选项:丢弃值、设置指定值或设置指定错误消息。
匹配正则表达式 指定一个值必须匹配的正则表达式。
如果勾选Custom on fail复选框,则可以指定自定义错误处理选项:丢弃值、设置指定值或设置指定错误消息。
Throttling
心跳丢弃未更改值 如果值在定义的时间段(以秒为单位)内未更改,则丢弃该值。
支持正integer值以指定秒数(最小1秒)。此字段可以使用时间后缀(例如30s、1m、2h、1d)。此字段可以使用用户宏和低级发现宏。
每个发现监控项只能指定一个节流选项。
例如1m。如果在60秒内两次传入相同的文本,它将被丢弃。
注意:更改监控项原型不会重置节流。只有在更改预处理步骤时才会重置节流。
Prometheus
Prometheus转JSON 将所需的Prometheus指标转换为JSON。
更多详情,请参阅Prometheus checks

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

自定义宏

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

当返回的JSON未定义所需宏时,自定义宏非常有用。 例如:

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

提取的值可用于发现的监控项、触发器等。 注意,值将从发现结果及当前所有预处理步骤中提取。

参数 说明
LLD macro 低级发现宏的名称,使用以下语法:{#MACRO}。
JSONPath 用于从LLD行提取LLD宏值的路径,使用JSONPath语法。
从返回的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会被自动处理(为了与Zabbix 4.2版本之前的低级发现实现向后兼容)。

过滤器

过滤器可用于generate仅匹配条件的实体对应的真实监控项、触发器及图表。 Filters选项卡包含发现规则过滤器定义,可用于筛选发现值:

参数 描述
Type of calculation 提供以下过滤器计算选项:
And - 必须通过所有过滤器;
Or - 只需通过一个过滤器;
And/Or - 对不同的宏名使用And,对相同宏名使用Or
Custom expression - 支持自定义过滤器计算逻辑。公式必须包含列表中的所有过滤器。限制为255个字符。
Filters 提供以下过滤条件运算符:matches(匹配)、does not match(不匹配)、exists(存在)、does not exist(不存在)。
matchesdoes not match运算符需要Perl Compatible Regular Expression(PCRE)。例如,若仅需监控C:、D:和E:的file系统,可在"Macro"中输入{#FSNAME},在"Regular expression"文本框中输入"^C\

LLD规则中使用的正则表达式存在错误或拼写错误(例如错误的"File systems for discovery"正则表达式)可能导致删除数千个配置元素、历史数据及多个主机的事件记录。

若需正确发现仅大小写不同的file系统名称,MySQL中的Zabbix数据库必须设置为区分大小写。

覆盖

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

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

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

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

配置操作

要配置新操作的详细信息,请点击操作区块中的。 要编辑现有操作,请点击操作旁边的。 将弹出窗口允许编辑操作详细信息。

参数 描述
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: 主机原型
创建启用 勾选复选框后,将出现按钮允许覆盖原始主机原型设置:
- 主机将以启用状态创建。
- 主机将以禁用状态创建。
发现 勾选复选框后,将出现按钮允许覆盖原始主机原型设置:
- 主机将被发现。
- 主机将不被发现。
链接模板 勾选复选框后,将出现用于指定模板的输入字段。开始输入模板名称或点击字段旁的选择,从弹出窗口的列表中选择模板。
此覆盖中的模板将添加至主机原型已链接的所有模板。
标签 勾选复选框后,将出现新区块允许指定标签-值对。
这些标签将追加至主机原型中指定的标签,即使标签名称相同。
主机资产清单 勾选复选框后,将出现按钮允许为主机原型选择不同的资产清单mode
禁用 - 不填充主机资产清单
手动 - 手动提供详细信息
自动 - 基于收集的指标自动填充主机资产清单数据。

表单按钮

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

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

发现的实体

以下截图展示了在主机配置中发现的监控项、触发器和图形的显示效果。 发现的实体前缀带有橙色链接,指向其来源的发现规则。

请注意,如果已存在具有相同唯一性标准的实体(例如具有相同键的监控项或同名的图形),则不会创建发现的实体。 在这种情况下,前端会显示错误消息,指出低级发现规则无法create某些实体。 然而,发现规则本身不会因为某些实体无法创建而被迫跳过就变为不支持状态。 发现规则将继续创建/更新其他实体。

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

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

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

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

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

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

其他发现类型

关于其他类型开箱即用发现的更多细节及操作指南,请参阅以下章节:

有关发现监控项的JSON格式详情及如何通过Perl脚本实现自定义file系统发现器的示例,请参阅creating custom LLD rules