2 监控项值预处理

概述

在预处理过程中,可以对接收到的监控项值进行转换,然后再将其保存到数据库中。

这种功能有很多用途。例如,您可能想要:

  • 将网络流量值乘以“8”以将字节转换为比特;
  • 获取逐渐增加值的每秒统计数据;
  • 对值应用正则表达式;
  • 对值使用自定义脚本;
  • 选择丢弃未更改的值。

可以进行一个或多个转换。转换(预处理步骤)按照定义的顺序执行。

如果任何预处理步骤失败,监控项将变为不支持。可以通过失败时自定义错误处理(适用于支持的转换)来避免这种情况,该错误处理可以配置为丢弃值或设置指定值。

为了确保配置的预处理管道正常工作,可以测试它

对于日志监控项,即使最初的错误是在从代理接收到日志值后发生的,日志元数据(没有值)也将始终重置监控项不支持状态并使监控项重新变为支持状态。

预处理由 Zabbix 服务器或代理完成(如果监控项由代理监控)。

请注意,传递到预处理的所有值都是字符串类型;预处理管道结束时会将其转换为所需的值类型(如监控项配置中定义的)。然而,如果相应的预处理步骤需要,也可能发生转换。有关更多技术信息,请参阅预处理详情

另见:正则表达式预处理示例

配置

预处理步骤在监控项配置表单的预处理选项卡中定义。

2 监控项值预处理 - 图1

点击添加以选择支持的转换。

当定义了至少一个预处理步骤时,信息类型字段显示在选项卡底部。如果需要,可以在不离开预处理选项卡的情况下更改信息类型。有关详细的参数描述,请参阅创建监控项

支持的转换

以下列出了所有支持的转换。点击转换名称以查看详细信息。

名称描述类型
正则表达式将值与正则表达式匹配并替换为所需的输出。文本
替换查找搜索字符串并将其替换为另一个(或不替换)。
去除空格删除值开头和结尾的指定字符。
右去除空格删除值末尾的指定字符。
左去除空格删除值开头的指定字符。
XML XPath使用XPath功能从XML数据中提取值或片段。结构化数据
JSON Path使用JSONPath功能从JSON数据中提取值或片段。
CSV转JSON将CSV文件数据转换为JSON格式。
XML转JSON将XML格式的数据转换为JSON。
SNMP遍历值通过指定的OID/MIB名称提取值并应用格式选项。SNMP
SNMP遍历到JSON将SNMP值转换为JSON。
SNMP获取值将格式选项应用于SNMP获取值。
自定义乘法器将值乘以指定的整数或浮点数。算术
简单变化计算当前值和前一个值之间的差异。变化
每秒变化计算每秒的值变化(当前值和前一个值之间的差异速度)。
布尔值转十进制将布尔格式的值转换为十进制。数字系统
八进制转十进制将八进制格式的值转换为十进制。
十六进制转十进制将十六进制格式的值转换为十进制。
JavaScript输入JavaScript代码。自定义脚本
范围内定义值应在的范围内。验证
匹配正则表达式指定值必须匹配的正则表达式。
不匹配正则表达式指定值不能匹配的正则表达式。
检查JSON中的错误在JSONPath中检查应用程序级错误消息。
检查XML中的错误在XPath中检查应用程序级错误消息。
使用正则表达式检查错误使用正则表达式检查应用程序级错误消息。
检查不支持的值检查是否在检索监控项值时出错。
丢弃未更改的值如果值没有变化则丢弃。节流
带心跳的丢弃未更改的值如果值在定义的时间段内没有变化则丢弃。
Prometheus模式使用以下查询从Prometheus指标中提取所需数据。Prometheus
Prometheus到JSON将所需的Prometheus指标转换为JSON。

请注意,对于变化节流预处理步骤,Zabbix需要记住最后一个值以按要求计算/比较新值。这些先前的值由预处理管理器处理。如果Zabbix服务器或代理重启或对预处理步骤进行了任何更改,对应监控项的最后一个值将被重置,导致:

  • 对于简单变化每秒变化步骤 - 下一个值将被忽略,因为没有前一个值来计算变化;
  • 对于丢弃未更改的值带心跳的丢弃未更改的值步骤 - 下一个值将永远不会被丢弃,即使应该根据丢弃规则被丢弃。
正则表达式

将值与正则表达式匹配并替换为所需的输出。

参数:

  • pattern - 正则表达式;

  • output - 输出格式模板。一个 \N(N=1…9)转义序列替换为第N个匹配组。一个 \0 转义序列替换为匹配的文本。

备注:

  • 无法匹配输入值将使监控项不受支持;

  • 正则表达式支持提取最多10个用 \N 序列表示的捕获组;

  • 如果勾选自定义失败复选框,可以指定自定义错误处理选项:丢弃值、设置指定值或设置指定错误消息。在预处理步骤失败的情况下,如果选择了丢弃值或设置指定值选项,监控项将不会变得不受支持。

  • 请参考正则表达式部分的一些现有示例。

替换

查找搜索字符串并将其替换为另一个字符串(或不替换)。

参数:

  • 搜索字符串 - 要查找和替换的字符串,区分大小写(必需);

  • 替换 - 用来替换搜索字符串的字符串。替换字符串也可以为空,从而有效地在找到时删除搜索字符串。

备注:

  • 搜索字符串的所有出现都将被替换;
  • 可以使用转义序列查找或替换换行符、回车符、制表符和空格 “\n \r \t \s”;反斜杠可以转义为 “\\“,转义序列可以转义为 “\\n”;
  • 在低级别发现期间会自动进行换行符、回车符和制表符的转义。
截取

从值的开头和结尾移除指定的字符。

右截取

从值的结尾移除指定的字符。

左截取

从值的开头移除指定的字符。

XML XPath

使用 XPath 功能从 XML 数据中提取值或片段。

备注:

  • 要使此选项生效,Zabbix 服务器(或 Zabbix 代理)必须在编译时支持 libxml;
  • 不支持命名空间;
  • 如果勾选 自定义错误处理 选项,可以指定自定义错误处理选项:丢弃值、设置指定值或设置指定错误消息。如果预处理步骤失败,选择丢弃值或设置指定值选项时,监控项不会变为不支持状态。

示例:

  1. number(/document/item/value) #将从 <document><item><value>10</value></item></document> 提取 '10'
  2. number(/document/item/@attribute) #将从 <document><item attribute="10"></item></document> 提取 '10'
  3. /document/item #将从 <document><item><value>10</value></item></document> 提取 '<item><value>10</value></item>'
JSON Path

使用 JSONPath 功能 从 JSON 数据中提取值或片段。

如果勾选 自定义错误处理 选项,可以指定自定义错误处理选项:丢弃值、设置指定值或设置指定错误消息。如果预处理步骤失败,选择丢弃值或设置指定值选项时,监控项不会变为不支持状态。

CSV to JSON

将 CSV 文件数据转换为 JSON 格式。

更多信息,请参见:CSV to JSON 预处理

XML to JSON

将 XML 格式的数据转换为 JSON。

更多信息,请参见:序列化规则

如果选中 Custom on fail 复选框,可以指定自定义错误处理选项:丢弃值、设置指定值或设置指定错误消息。在预处理步骤失败的情况下,如果选择丢弃值或设置指定值,监控项将不会变为不受支持。

SNMP walk值

通过指定的OID/MIB名称提取值并应用格式化选项:

  • 不变 - 将十六进制字符串以未转义的十六进制字符串返回;

  • 从十六进制字符串转换为UTF-8 - 将十六进制字符串转换为UTF-8字符串;

  • 从十六进制字符串转换为MAC - 验证十六进制字符串作为MAC地址并返回适当的MAC地址字符串(其中' '被替换为':');

  • 从位字符串转换为整数 - 将表示为十六进制字符序列的位字符串的前8字节(例如,“1A 2B 3C 4D”)转换为64位无符号整数。在超过8字节的位字符串中,后续字节将被忽略。

如果勾选自定义失败处理复选框,则可以指定自定义错误处理选项:丢弃值、设置指定值或设置指定错误消息。在预处理步骤失败的情况下,如果选择丢弃值或设置指定值,该项目不会变为不受支持。

SNMP walk转换为JSON

将SNMP值转换为JSON。

在JSON中指定一个字段名称和相应的SNMP OID路径。字段值将由指定SNMP OID路径中的值填充。

注释:

  • SNMP walk值步骤中的值格式化选项类似;

  • 您可以将此预处理步骤用于SNMP OID发现

  • 如果勾选自定义失败处理复选框,则可以指定自定义错误处理选项:丢弃值、设置指定值或设置指定错误消息。在预处理步骤失败的情况下,如果选择丢弃值或设置指定值,该项目不会变为不受支持。

SNMP 取值

对SNMP 取值应用格式化选项:

  • 从十六进制字符串转换为UTF-8 - 将十六进制字符串转换为UTF-8字符串;

  • 从十六进制字符串转换为MAC - 验证十六进制字符串作为MAC地址并返回适当的MAC地址字符串(其中' '被替换为':');

  • 从位字符串转换为整数 - 将表示为十六进制字符序列的位字符串的前8字节(例如,“1A 2B 3C 4D”)转换为64位无符号整数。在超过8字节的位字符串中,后续字节将被忽略。

如果勾选自定义失败处理复选框,则可以指定自定义错误处理选项:丢弃值、设置指定值或设置指定错误消息。在预处理步骤失败的情况下,如果选择丢弃值或设置指定值,该项目不会变为不受支持。

自定义倍数

将值乘以指定的整数或浮点数。

注释:

  • 使用此选项将以KB、MBps等单位接收的值转换为B、Bps。否则,Zabbix无法正确设置前缀(K、M、G等)。

  • 请注意,如果信息项的类型是数字(无符号),则在应用自定义乘数之前,带有小数部分的传入值将被截断(即,“0.9”将变为“0”);

  • 如果您使用自定义乘数或将值存储为每秒变化,并且信息项的类型设置为数字(无符号),而计算出的结果实际上是浮点数,则仍然会接受计算值为正确值,通过截断小数部分并将值存储为整数;

  • 支持:科学记数法,例如,1e+70;用户宏和LLD宏;包含宏的字符串,例如,{#MACRO}e+10{$MACRO1}e+{$MACRO2}。宏必须解析为整数或浮点数。

  • 如果勾选自定义失败处理复选框,则可以指定自定义错误处理选项:丢弃值、设置指定值或设置指定错误消息。在预处理步骤失败的情况下,如果选择丢弃值或设置指定值,该项目不会变为不受支持。
简单更改

计算当前值和前一个值之间的差异。

注释:

  • 此步骤可用于测量不断增长的值;

  • 计算公式为 value-prev_value,其中 value 是当前值,prev_value 是之前接收到的值;

  • 每个项目仅允许进行一个变更操作(“简单变化”或“每秒变化”);

  • 如果当前值小于前一个值,Zabbix将丢弃该差值(不存储任何值)并等待另一个值;

  • 如果勾选自定义失败处理复选框,则可以指定自定义错误处理选项:丢弃值、设置指定值或设置指定错误消息。在预处理步骤失败的情况下,如果选择丢弃值或设置指定值,该项目不会变为不受支持。

每秒更改

计算每秒的值变化(当前值与前一个值之间的差异速度)。

注释:

  • 此步骤可用于计算不断增长值的每秒速度;

  • 由于此计算可能产生浮点数,建议将“信息类型”设置为数字(浮点型),即使传入的原始值是整数。这对于小数部分重要的小数特别相关。如果浮点值很大并可能超出“浮点”字段长度,在这种情况下可能会丢失整个值,实际上建议使用数字(无符号),从而仅截断小数部分;

  • 计算公式为 (value-prev_value)/(time-prev_time),其中 value 是当前值;prev_value 是之前接收到的值;time 是当前时间戳;prev_time 是前一个值的时间戳;

  • 每个项目仅允许进行一个变更操作(“简单更改”或“每秒更改”);

  • 如果当前值小于前一个值,Zabbix将丢弃该差值(不存储任何值)并等待另一个值。这有助于正确处理,例如32位SNMP计数器的溢出(回绕)。

  • 如果勾选自定义失败处理复选框,则可以指定自定义错误处理选项:丢弃值、设置指定值或设置指定错误消息。在预处理步骤失败的情况下,如果选择丢弃值或设置指定值,该项目不会变为不受支持。

布尔值转换为十进制

将值从布尔格式转换为十进制。

注释:

  • 文本表示形式将转换为0或1。因此,’TRUE’存储为1,’FALSE’存储为0。所有值的匹配不区分大小写。目前识别的TRUE值有:true、t、yes、y、on、up、running、enabled、available、ok、master;FALSE值有:false、f、no、n、off、down、unused、disabled、unavailable、err、slave。此外,任何非零数值都被视为TRUE,零被视为FALSE。

  • 如果勾选自定义失败处理复选框,则可以指定自定义错误处理选项:丢弃值、设置指定值或设置指定错误消息。在预处理步骤失败的情况下,如果选择丢弃值或设置指定值,该项目不会变为不受支持。

八进制转换为十进制

将值从八进制格式转换为十进制。

如果勾选自定义失败处理复选框,则可以指定自定义错误处理选项:丢弃值、设置指定值或设置指定错误消息。在预处理步骤失败的情况下,如果选择丢弃值或设置指定值,该项目不会变为不受支持。

十六进制转换为十进制

将值从十六进制格式转换为十进制。

如果勾选自定义失败处理复选框,则可以指定自定义错误处理选项:丢弃值、设置指定值或设置指定错误消息。在预处理步骤失败的情况下,如果选择丢弃值或设置指定值,该项目不会变为不受支持。

JavaScript

在单击参数字段或铅笔图标时显示的块中输入 JavaScript 代码。

备注:

在范围内

通过指定最小/最大值(包括在内)来定义值应该在其中的范围。

备注:

  • 接受数字值(包括任意数量的数字、可选的小数部分和可选的指数部分、负值);

  • 最小值应小于最大值;

  • 至少必须存在一个值;

  • 可以使用用户宏和低级发现宏;

  • 如果选中“Custom on fail”复选框,则可以指定自定义错误处理选项:丢弃值、设置指定的值或设置指定的错误消息。如果预处理步骤失败,则项目不会变为不支持,而是选择丢弃值或设置指定的值选项。

匹配正则表达式

指定值必须匹配的正则表达式。

如果选中“Custom on fail”复选框,则可以指定自定义错误处理选项:丢弃值、设置指定的值或设置指定的错误消息。如果预处理步骤失败,则项目不会变为不支持,而是选择丢弃值或设置指定的值选项。

不匹配正则表达式

指定值必须不匹配的正则表达式。

如果选中“Custom on fail”复选框,则可以指定自定义错误处理选项:丢弃值、设置指定的值或设置指定的错误消息。如果预处理步骤失败,则项目不会变为不支持,而是选择丢弃值或设置指定的值选项。

检查 JSON 中的错误

检查位于 JSONPath 处的应用级错误消息。如果成功且消息不为空,则停止处理;否则,继续处理值,在此预处理步骤之前的值。

评论:

  • 这些外部服务错误将按原样报告给用户,而不会添加预处理步骤信息;
  • 在无法解析无效 JSON 的情况下,不会报告错误;
  • 如果选中“Custom on fail”复选框,则可以指定自定义错误处理选项:丢弃值、设置指定的值或设置指定的错误消息。如果预处理步骤失败,则项目不会变为不支持,而是选择丢弃值或设置指定的值选项。
检查 XML 中的错误

检查位于 XPath 处的应用级错误消息。如果成功且消息不为空,则停止处理;否则,继续处理值,在此预处理步骤之前的值。

评论:

  • 这些外部服务错误将按原样报告给用户,而不会添加预处理步骤信息;
  • 在无法解析无效 XML 的情况下,不会报告错误;
  • 如果选中“Custom on fail”复选框,则可以指定自定义错误处理选项:丢弃值、设置指定的值或设置指定的错误消息。如果预处理步骤失败,则项目不会变为不支持,而是选择丢弃值或设置指定的值选项。
使用正则表达式检查错误

使用正则表达式检查应用程序级别的错误消息。如果成功且消息不为空,则停止处理;否则,继续处理值,在此预处理步骤之前的值。

参数:

  • pattern - 正则表达式;

  • output - 输出格式化模板。 \N(其中 N=1…9)转义序列将被替换为第 N 个匹配组。 \0 转义序列将被替换为匹配的文本。

评论:

  • 这些外部服务错误将按原样报告给用户,而不会添加预处理步骤信息;

  • 如果选中“Custom on fail”复选框,则可以指定自定义错误处理选项:丢弃值、设置指定的值或设置指定的错误消息。如果预处理步骤失败,则项目不会变为不支持,而是选择丢弃值或设置指定的值选项。

检查不支持的值

检查是否未检索到项目值。根据检查返回的错误消息,指定应如何处理失败。

参数:

  • scope - 选择错误处理范围:
    任何错误 - 任何错误;
    错误匹配 - 仅匹配在 pattern 中指定的正则表达式的错误;
    错误不匹配 - 仅匹配未匹配在 pattern 中指定的正则表达式的错误

  • pattern - 用于将错误与之匹配的正则表达式。如果在 scope 参数中选择了 任何错误,则不显示此字段。如果显示,此字段为必填字段。

评论:

  • 通常,缺少/未能检索到值会导致项目变为不支持。在此预处理步骤中,可以通过选中 Custom on fail 选项来修改此行为。以下自定义错误处理选项可用:Discard valueSet value to(该值可用于触发器)或 Set error to
  • 如果选择了 Discard valueSet value to,项目将保持支持;
  • Set value toSet error to 字段中支持捕获正则表达式组。\N(其中 N=1…9)转义序列将被替换为第 N 个匹配组。\0 转义序列将被替换为匹配的文本。
  • 对于此预处理步骤,Custom on fail 复选框被灰掉并始终标记;
  • 这些步骤始终作为第一个预处理步骤执行,并在保存对项目的更改后放置在所有其他步骤之上。
  • 支持多个 Check for not supported value 步骤,按指定的顺序。一个 任何错误 步骤将自动放置在此组的最后一步。
丢弃未更改的值

如果值未更改,则丢弃该值。

评论:

  • 如果丢弃一个值,它不会被保存在数据库中,Zabbix 服务器不会知道接收到该值。不会评估触发器表达式,因此也不会为相关触发器创建/解决问题。函数将仅基于实际保存在数据库中的数据工作。由于趋势是基于数据库中的数据构建的,如果一个小时内没有保存值,那么该小时的趋势数据也将不存在。

  • 每个项目只能指定一个节流选项。

通过心跳丢弃未更改的值

如果值在定义的时间段内未更改(以秒为单位),则丢弃该值。

评论:

  • 支持使用正整数值指定秒数(最小为1秒);

  • 可以使用时间后缀(例如,30s,1m,2h,1d);

  • 可以使用用户宏和低级发现宏;

  • 如果丢弃一个值,它不会被保存在数据库中,Zabbix 服务器不会知道接收到该值。不会评估触发器表达式,因此也不会为相关触发器创建/解决问题。函数将仅基于实际保存在数据库中的数据工作。由于趋势是基于数据库中的数据构建的,如果一个小时内没有保存值,那么该小时的趋势数据也将不存在。

  • 每个项目只能指定一个节流选项。

Prometheus 模式

使用以下查询从 Prometheus 指标中提取所需数据。

有关更多详细信息,请参阅Prometheus 检查

Prometheus 转 JSON

将所需的 Prometheus 指标转换为 JSON 格式。

有关更多详细信息,请参阅Prometheus 检查

宏支持

在以下方面支持用户宏和带有上下文的用户宏:

  • 预处理步骤参数,包括 JavaScript 代码;
  • 自定义错误处理参数(Set value toSet error to 字段)。

当宏被替换为其值时,宏上下文会被忽略。 宏的值会原样插入代码中,无法在放置值到 JavaScript 代码之前添加额外的转义。 请注意,这可能会导致某些情况下发生 JavaScript 错误。

测试

参见预处理测试