低级发现提供了一种自动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系统发现的示例来说明低级发现机制.
配置发现规则需执行以下步骤:
发现规则表单包含五个标签页,从左至右分别代表发现过程中的数据流:
发现规则 - 最重要的是指定用于获取发现数据的内置监控项或自定义脚本
预处理 - 对发现的数据应用预处理
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 macros和time suffixes(例如30s、1m、2h、1d)。如果使用自定义间隔,应设置为0。 自定义间隔 - 点击 ![]() |
||
历史存储周期 | 勾选复选框后,将出现按钮,允许为监控项设置不同的历史存储周期: 不保留历史 - 如果选择,历史将不被存储。 存储周期 - 如果选择,右侧将出现用于指定存储周期的输入字段。支持User macros和LLD macros。 |
||
趋势存储周期 | 勾选复选框后,将出现按钮,允许为监控项设置不同的趋势存储周期: 不保留趋势 - 如果选择,趋势将不被存储。 存储周期 - 如果选择,右侧将出现用于指定存储周期的输入字段。支持User macros和LLD macros。 |
||
标签 | 勾选复选框后,将出现一个新块,允许指定标签-值对。 这些标签将附加到监控项原型中指定的标签,即使标签名称匹配。 |
||
object: 触发器原型 | |||
创建启用 | 勾选复选框后,将出现按钮,允许覆盖原始触发器原型设置: 是 - 触发器将以启用状态添加。 否 - 触发器将添加到发现的实体中,但处于禁用状态。 |
||
发现 | 勾选复选框后,将出现按钮,允许覆盖原始触发器原型设置: 是 - 触发器将被添加。 否 - 触发器将不被添加。 |
||
严重性 | 勾选复选框后,将出现触发器严重性按钮,允许修改触发器严重性。 | ||
标签 | 勾选复选框后,将出现一个新块,允许指定标签-值对。 这些标签将附加到触发器原型中指定的标签,即使标签名称匹配。 |
||
object: 图表原型 | |||
发现 | 勾选复选框后,将出现按钮,允许覆盖原始图表原型设置: 是 - 图表将被添加。 否 - 图表将不被添加。 |
||
object: 主机原型 | |||
创建启用 | 勾选复选框后,将出现按钮,允许覆盖原始主机原型设置: 是 - 主机将以启用状态创建。 否 - 主机将以禁用状态创建。 |
||
发现 | 勾选复选框后,将出现按钮,允许覆盖原始主机原型设置: 是 - 主机将被发现。 否 - 主机将不被发现。 |
||
链接模板 | 勾选复选框后,将出现用于指定模板的输入字段。开始输入模板名称或点击字段旁边的选择,从弹出窗口的列表中选择模板。 此覆盖中的模板将添加到已链接到主机原型的所有模板中。 |
||
标签 | 勾选复选框后,将出现一个新块,允许指定标签-值对。 这些标签将附加到主机原型中指定的标签,即使标签名称匹配。 |
||
主机资产清单 | 勾选复选框后,将出现按钮,允许为主机原型选择不同的资产清单mode: 禁用 - 不填充主机资产清单 手动 - 手动提供详细信息 自动 - 根据收集的指标自动填充主机资产清单数据。 |
表单底部的按钮允许执行多项操作。
![]() |
添加发现规则。该按钮仅适用于新建发现规则。 |
![]() |
更新发现规则的属性。该按钮仅适用于现有发现规则。 |
![]() |
基于当前发现规则的属性创建另一个发现规则。 |
![]() |
立即基于发现规则执行发现。发现规则必须已存在。参见more details。 注意:立即执行发现时,configuration cache不会更新,因此结果不会反映最近对发现规则配置的更改。 |
![]() |
测试发现规则配置。使用此按钮可验证配置设置(如连接性和参数正确性),而无需永久应用任何更改。 |
![]() |
删除发现规则。 |
![]() |
取消对发现规则属性的编辑。 |
以下截图展示了在主机配置中发现的监控项、触发器和图形的显示方式。发现的实体都带有橙色前缀链接,指向它们来源的发现规则。
注意:如果已存在具有相同唯一性标准的实体(例如相同键值的监控项或同名图形),则不会创建发现的实体。此时前端会显示错误消息,提示低级发现规则无法create某些实体。但发现规则本身不会因为某些实体无法创建而被标记为不支持状态。发现规则将继续创建/更新其他实体。
由低级发现规则创建的监控项(同理适用于触发器和图形),当被发现实体(file系统、接口等)停止被发现(或不再通过过滤器)时将被自动删除。这种情况下,监控项、触发器和图形将在保留丢失资源周期字段定义的天数过后被删除。
当发现的实体变为"不再被发现"状态时,监控项列表会显示生命周期指示器。将鼠标指针悬停其上,会显示消息提示该监控项将在多少天后被删除。
如果实体被标记为待删除但未在预期时间被删除(发现规则被禁用或监控项主机),它们将在下次处理发现规则时被删除。
包含其他待删除实体的实体,如果在发现规则级别发生更改,将不会update。例如,基于LLD的触发器如果包含标记为待删除的监控项,则不会update。
关于其他类型的开箱即用发现的更多细节和操作指南 可在以下章节中找到:
SNMP OIDs的发现;
JMX objects的发现;
使用ODBC SQL queries的发现;
Windows services的发现;
[host
interfaces](/manual/discovery/low_level_discovery/examples/host_interfaces) in Zabbix.
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的发现.