3 低级发现

概述

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

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

发现过程的一般架构如下。

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

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

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

当服务器接收到发现监控项的值时,它会查看宏→值对,并根据它们的原型为每对生成实际的监控项、触发器和图形。在上面的"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系统发现的示例来说明低级发现机制.

配置发现规则需执行以下步骤:

  • 前往: Configuration模板主机
  • 在相应模板/主机的行中点击Discovery

  • 点击屏幕右上角的Create discovery rule
  • 在发现规则表单中填写必要信息

发现规则

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

  • 发现规则 - 最重要的是指定用于获取发现数据的内置监控项或自定义脚本

  • 预处理 - 对发现的数据应用预处理

  • LLD宏 - 允许提取某些宏值用于发现的监控项、触发器等

  • 过滤器 - 允许筛选发现的值

  • 覆盖 - 允许修改监控项、触发器、图形或主机

    prototypes when applying to specific discovered objects

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

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

参数 描述
Name 发现规则的名称。
Type 执行发现的检查类型。
本例中使用的是Zabbix agent 监控项类型。
发现规则也可以是dependent item,取决于常规监控项。它不能依赖另一个发现规则。对于依赖型监控项,需选择相应类型(依赖型监控项)并在'主监控项'字段中指定主监控项。主监控项必须存在。
Key 输入发现监控项键(最多2048字符)。
例如,可使用内置的"vfs.fs.discovery" 监控项键返回包含计算机上存在的file系统及其类型的JSON string。
注意另一种文件系统发现方式是使用自Zabbix 4.4.5起支持的"vfs.fs.get" agent键的发现结果(参见example)。
Update interval 该字段指定Zabbix执行发现的频率。初始设置file系统发现时,可设为较小间隔,确认工作正常后可设为30分钟或更长,因为file系统通常不会频繁变化。
自Zabbix 3.4.0起支持Time suffixes,如30s、1m、2h、1d。
自Zabbix 3.4.0起支持User macros
注意:仅当存在非零值的自定义间隔时,update间隔才能设为'0'。若设为'0'且存在非零值的自定义间隔(弹性或计划),将在自定义间隔期间轮询监控项。
注意对于现有发现规则,可通过点击立即检查按钮立即执行发现。
Custom intervals 可为监控项检查create自定义规则:
弹性 - 为更新间隔create例外(不同频率的间隔)
调度 - create自定义轮询计划。
详情参见Custom intervals。自Zabbix 3.0.0起支持调度。
Keep lost resources period 该字段可指定发现实体状态变为"不再被发现"后的保留时长(1小时至25年;或"0")。
自Zabbix 3.4.0起支持Time suffixes,如2h、1d。
自Zabbix 3.4.0起支持User macros
注意:若设为"0",实体将立即删除。不建议使用"0",因为仅错误编辑过滤器就可能导致实体及其历史数据被删除。
Description 输入描述。
Enabled 勾选后规则将被处理。

发现规则历史不被保留。

预处理

预处理选项卡允许定义转换规则以应用于发现结果。此步骤可应用一个或多个转换。转换按定义顺序执行。所有预处理均由Zabbix server完成。

另请参阅:

类型
转换 描述
Text
正则表达式 将接收值匹配<pattern>正则表达式并用提取的<output>替换值。该正则表达式支持通过\N序列提取最多10个捕获组。
参数:
pattern - 正则表达式
output - 输出格式化模板。\N(其中N=1…9)转义序列将被第N个匹配组替换。\0转义序列将被匹配文本替换。
若勾选失败时自定义复选框,可指定自定义错误处理选项:丢弃值、设置指定值或设置指定错误消息。
替换 查找搜索string并替换为另一个(或空)。所有出现的搜索string都将被替换。
参数:
搜索string - 要查找和替换的string,区分大小写(必填)
替换内容 - 用于替换搜索string的string。替换string可为空,从而在找到时delete搜索string。
可使用转义序列搜索或替换换行符、回车符、制表符和空格"\n \r \t \s";反斜杠可转义为"\\",转义序列可转义为"\\n"。低级发现期间会自动转义换行符、回车符和制表符。
自5.0.0版本起支持。
Structured data
JSONPath 使用JSONPath functionality从JSON数据提取值或片段。
若勾选失败时自定义复选框,可指定自定义错误处理选项:丢弃值、设置指定值或设置指定错误消息。
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>
注意不支持命名空间。
自4.4.0版本起支持。
若勾选失败时自定义复选框,可指定自定义错误处理选项:丢弃值、设置指定值或设置指定错误消息。
CSV转JSON 将CSVfile数据转换为JSON格式。
详见: 5-csv-到-json-预处理.
自4.4.0版本起支持。
XML转JSON 将XML格式数据转换为JSON。
详见: 序列化规则.
若勾选失败时自定义复选框,可指定自定义错误处理选项:丢弃值、设置指定值或设置指定错误消息。
Custom scripts
JavaScript 在参数字段或铅笔图标点击后出现的块中输入JavaScript代码。
注意可用JavaScript长度取决于自定义脚本限制.
详见: Javascript preprocessing
Validation
不匹配正则表达式 指定值不得匹配的正则表达式。
例如Error:(.*?)\.
若勾选失败时自定义复选框,可指定自定义错误处理选项:丢弃值、设置指定值或设置指定错误消息。
检查JSON错误 检查位于JSONPath的应用级错误消息。若成功且消息非空则停止处理;否则继续使用此预处理步骤前的值处理。注意这些外部服务错误将按原样报告给用户,不添加预处理步骤信息。
例如$.errors。若收到如{"errors":"e1"}的JSON,则不会执行下一个预处理步骤。
若勾选失败时自定义复选框,可指定自定义错误处理选项:丢弃值、设置指定值或设置指定错误消息。
检查XML错误 检查位于xpath的应用级错误消息。若成功且消息非空则停止处理;否则继续使用此预处理步骤前的值处理。注意这些外部服务错误将按原样报告给用户,不添加预处理步骤信息。
解析无效XML失败时不会报告错误。
自4.4.0版本起支持。
若勾选失败时自定义复选框,可指定自定义错误处理选项:丢弃值、设置指定值或设置指定错误消息。
Throttling
心跳式丢弃未变更值 若值在定义时间段(秒)内未变更则丢弃。
支持正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](/manual/discovery/low_level_discovery/examples/mounted_filesystems), but without any pre-defined LLD macros. In this case you may define the macros yourself, and map them to the values in the JSON using 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 可用的筛选条件运算符包括:匹配不匹配存在不存在
匹配不匹配运算符需要输入Perl Compatible Regular Expression(PCRE)。例如,若仅需监控C:、D:和E:的file系统,可在"宏"字段填入{#FSNAME},并在"正则表达式"文本框中输入"^C\

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

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

覆盖

覆盖选项卡允许设置规则来修改满足特定条件的已发现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。

其他发现类型

关于其他类型的开箱即用发现的更多细节和操作指南 可在以下章节中找到:

For more detail on the JSON format for discovery items and an example of how to implement your own file system discoverer as a Perl script, see creating custom LLD rules的发现.