- 2 监控项值预处理
- 概述
- 配置
- 支持的转换
- 正则表达式
- Replace
- Trim
- Right trim
- Left trim
- XML XPath
- JSON Path
- CSV 转 JSON
- XML 转 JSON
- SNMP walk 值
- SNMP walk 转换为 JSON
- SNMP 获取值
- 自定义乘数
- 简单变化
- 每秒变化量
- 布尔值转十进制
- 八进制转十进制
- 十六进制转十进制
- JavaScript
- 在范围内
- 匹配正则表达式
- 不匹配正则表达式
- 检查 JSON 中的错误
- 检查 XML 中的错误
- 使用正则表达式检查错误
- 检查不支持的值
- Discard unchanged
- 在心跳周期内丢弃未更改的值
- Prometheus 模式
- Prometheus 转 JSON
- 宏支持
- 测试
2 监控项值预处理
概述
预处理允许你在将收到的监控项值保存到数据库之前,对其应用转换。 这些转换/预处理步骤由 Zabbix 服务器或 proxy 执行(如果监控项由 proxy 监控)。
此功能支持多种使用场景,例如:
- 将字节转换为比特(例如,将网络流量值乘以 "8");
- 计算逐秒统计值,适用于持续递增的值;
- 应用正则表达式以提取或修改值;
- 在值上执行自定义脚本;
- 丢弃未变化的值以优化数据库存储。
可以为一个监控项配置一个或多个预处理步骤。 这些步骤会按照配置顺序执行。
如果某个预处理步骤失败,监控项将变为不受支持。
可以通过 Custom on fail 错误处理(适用于大多数转换)来避免这种情况,从而允许你丢弃值或设置自定义值。
对于日志监控项,日志元数据(不含值)将始终重置监控项的不受支持状态,使其重新变为受支持。
即使最初的错误发生在从 agent 接收到日志值之后,也会如此。
传递给预处理的所有值最初都被视为字符串。 在预处理流水线结束时,会将其转换为监控项配置中定义的目标值类型。 不过,某些特定的预处理步骤在需要时可能会触发更早的转换。 有关详细技术信息,请参见预处理详情。
为确保你的预处理配置按预期工作,你可以进行测试。
另请参见:预处理示例
配置
预处理步骤在监控项的预处理选项卡中定义 配置 表单.

点击添加按钮选择支持的转换类型.
当至少定义一个预处理步骤时,信息类型字段会显示在选项卡底部 如需更改信息类型,可直接在预处理选项卡中操作而无需离开该界面 详细参数说明请参阅Creating an item
支持的转换
下面列出了所有支持的转换。 单击转换名称可查看其完整详细信息。
| 名称 | 描述 | 类型 |
|---|---|---|
| 正则表达式 | 将值与正则表达式进行匹配,并替换为所需的输出。 | 文本 |
| 替换 | 查找搜索字符串,并将其替换为另一个字符串(或不替换为任何内容)。 | |
| 修剪 | 从值的开头和结尾移除指定字符。 | |
| 右侧修剪 | 从值的结尾移除指定字符。 | |
| 左侧修剪 | 从值的开头移除指定字符。 | |
| XML XPath | 使用 XPath 功能从 XML 数据中提取值或片段。 | 结构化数据 |
| JSON Path | 使用 JSONPath 功能从 JSON 数据中提取值或片段。 | |
| CSV 转 JSON | 将 CSV 文件数据转换为 JSON 格式。 | |
| XML 转 JSON | 将 XML 格式的数据转换为 JSON。 | |
| SNMP walk 值 | 根据指定的 OID/MIB 名称提取值,并应用格式化选项。 | SNMP |
| SNMP walk 转 JSON | 将 SNMP 值转换为 JSON。 | |
| SNMP get 值 | 将格式化选项应用于 SNMP get 值。 | |
| 自定义乘数 | 将值乘以指定的整数或浮点值。 | 算术 |
| 简单变化 | 计算当前值与前一个值之间的差异。 | 变化 |
| 每秒变化 | 计算值变化(当前值与前一个值之间的差异)的每秒速率。 | |
| 布尔值转十进制 | 将值从布尔格式转换为十进制。 | 数字系统 |
| 八进制转十进制 | 将值从八进制格式转换为十进制。 | |
| 十六进制转十进制 | 将值从十六进制格式转换为十进制。 | |
| JavaScript | 输入 JavaScript 代码。 | 自定义脚本 |
| 范围内 | 定义值应处于的范围。 | 验证 |
| 匹配正则表达式 | 指定值必须匹配的正则表达式。 | |
| 不匹配正则表达式 | 指定值不得匹配的正则表达式。 | |
| 检查 JSON 中的错误 | 检查位于 JSONPath 的应用程序级错误消息。 | |
| 检查 XML 中的错误 | 检查位于 XPath 的应用程序级错误消息。 | |
| 使用正则表达式检查错误 | 使用正则表达式检查应用程序级错误消息。 | |
| 检查不支持的值 | 检查是否无法获取任何监控项值。 | |
| 丢弃未更改的值 | 如果值未发生变化,则丢弃该值。 | 限流 |
| 带心跳的丢弃未更改值 | 如果值在定义的时间段内未发生变化,则丢弃该值。 | |
| Prometheus 模式 | 使用以下查询从 Prometheus 指标中提取所需数据。 | Prometheus |
| Prometheus 转 JSON | 将所需的 Prometheus 指标转换为 JSON。 |
如果为所选转换启用了 失败时自定义处理 复选框,则可以选中该选项并指定自定义错误处理方式:丢弃值(丢弃该值)、将值设置为(设置指定的值)或 将错误设置为(设置指定的错误消息)。 如果预处理步骤失败,并且选择了 丢弃值 或 将值设置为 选项,则监控项不会变为不支持。
请注意,对于 变化 和 限流 预处理步骤,Zabbix 必须记住上一个值,以便按要求计算或比较新值。 这些先前的值由预处理管理器处理。 如果 Zabbix 服务器或 proxy 重启,或者对预处理步骤进行了任何更改,则相应监控项的上一个值会被重置,从而导致:
- 对于 简单变化、每秒变化 步骤,下一个值将被忽略,因为没有可用于计算变化的上一个值;
- 对于 丢弃未更改的值、带心跳的丢弃未更改值 步骤,即使根据丢弃规则本应丢弃下一个值,也永远不会丢弃该值。
正则表达式
将值与正则表达式进行匹配,并替换为所需的输出。
参数:
- pattern - 正则表达式;
- output - 输出格式模板。 \N(其中 N=1…9)转义序列将替换为第 N 个匹配组。 \0 转义序列将替换为匹配的文本。
注释:
- 如果无法匹配输入值,监控项将变为不受支持;
- 正则表达式支持使用 \N 序列提取最多 10 个捕获组;
- 有关现有示例,请参阅正则表达式部分。
Replace
查找搜索string并将其替换为另一个(或空值)。
参数:
- search string - 要查找并替换的string,区分大小写(必填);
- replacement - 用于替换搜索string的string。 替换string也可以为空,从而在找到搜索string时允许delete。
注释:
- 所有出现的搜索string都将被替换;
- 可以使用转义序列来搜索或替换换行符、回车符、制表符和空格"\n \r \t \s";反斜杠可以转义为"\\",转义序列可以转义为"\\n";
- 在低级发现期间会自动对换行符、回车符、制表符进行转义处理。
Trim
从值的开头和结尾删除指定字符。
Right trim
从值的末尾移除指定字符。
Left trim
从值的开头移除指定字符。
XML XPath
使用 XPath 功能从 XML 数据中提取值或片段。
注释:
- 要使此选项正常工作,Zabbix 服务器(或 Zabbix proxy)必须在编译时启用 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>”
JSON Path
使用 JSONPath 功能 从 JSON 数据中提取值或片段。
CSV 转 JSON
将 CSV 文件数据转换为 JSON 格式。
有关更多信息,请参见:CSV 转 JSON 预处理。
XML 转 JSON
将 XML 格式的数据转换为 JSON。
有关更多信息,请参阅:序列化规则。
SNMP walk 值
提取指定 OID/MIB 名称的值,并应用格式化选项:
- 不变 - 将十六进制字符串作为未转义的十六进制字符串返回(注意,显示提示仍会应用);
- 从十六进制 STRING 转换为 UTF-8 - 将十六进制字符串转换为 UTF-8 字符串;
- 从十六进制 STRING 转换为 MAC - 将十六进制字符串验证为 MAC 地址,并返回正确的 MAC 地址字符串(其中的
' '将替换为':'); - 从 BITS 转换为整数 - 将以十六进制字符序列表示的位字符串的前 8 个字节(例如 "1A 2B 3C 4D")转换为 64 位无符号整数。 对于长度超过 8 个字节的位字符串,将忽略后续字节。
SNMP walk 转换为 JSON
将 SNMP 值转换为 JSON。
在 JSON 中指定字段名称及其对应的 SNMP OID 路径。 字段值将由指定 SNMP OID 路径中的值填充。
注释:
- 提供与 SNMP walk 值 步骤中类似的值格式化选项;
- 您可以将此预处理步骤用于 SNMP OID 发现。
SNMP 获取值
对 SNMP 获取值应用格式化选项:
- 从 Hex-STRING 转换为 UTF-8 - 将十六进制字符串转换为 UTF-8 字符串;
- 从 Hex-STRING 转换为 MAC - 将十六进制字符串验证为 MAC 地址,并返回正确的 MAC 地址字符串(其中的
' '将替换为':'); - 从 BITS 转换为整数 - 将以十六进制字符序列表示的位字符串的前 8 个字节(例如 "1A 2B 3C 4D")转换为 64 位无符号整数。 对于超过 8 个字节的位字符串,将忽略后续字节。
自定义乘数
将值乘以指定的整数或浮点数。
注释:
- 使用此选项可将以 KB、MBps 等为单位接收的值转换为 B、Bps。否则,Zabbix 无法正确设置前缀(K、M、G 等)。
- 请注意,如果监控项的信息类型为 Numeric (unsigned),则在应用自定义乘数之前,输入值中的小数部分将被截去(即,'0.9' 将变为 '0');
- 如果对信息类型设置为 Numeric (unsigned) 的监控项使用自定义乘数,或将值存储为 Change per second,且计算所得的值实际为浮点数,则仍会将该计算值视为正确值:截去小数部分,并将值作为整数存储;
- 支持科学计数法,例如
1e+70;用户宏和 LLD 宏;包含宏的字符串,例如{#MACRO}e+10、{$MACRO1}e+{$MACRO2}。 宏必须解析为整数或浮点数。
简单变化
计算当前值与前一个值之间的差异。
注释:
- 此步骤可用于测量持续增长的值;
- 计算方式为 value-prev_value,其中 value 表示当前值;prev_value 表示之前接收到的值;
- 每个监控项只允许使用一种变化操作(“简单变化”或“每秒变化”);
- 如果当前值小于前一个值,Zabbix 将丢弃该差异(不存储任何内容),并等待下一个值。
每秒变化量
计算每秒的值变化速度(当前值与之前值之间的差值)。
注释:
- 此步骤适用于计算持续增长的值的每秒变化速度;
- 由于此计算可能产生浮点数,因此建议将“信息类型”设置为数值(浮点),即使传入的原始值为整数也是如此。
这对于小数部分很重要的小数尤其适用。
如果浮点值较大,可能超出“float”字段长度,从而导致整个值丢失,则建议使用数值(无符号),这样只会截去小数部分。
- 计算方式为(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代码
请勿在预处理JavaScript中使用未声明的赋值
使用var来声明局部变量
注释:
- 可用的JavaScript长度取决于自定义脚本限制;
- 更多信息请参阅: Javascript preprocessing
在范围内
通过指定最小值/最大值(包括边界)来定义值应处于的范围。
注释:
- 接受数值(包括任意位数、可选的小数部分和可选的指数部分,以及负值);
- 最小值应小于最大值;
- 至少必须存在一个值;
- 可以使用用户宏和低级别发现宏。
匹配正则表达式
指定值必须匹配的正则表达式。
不匹配正则表达式
指定值不得匹配的正则表达式。
检查 JSON 中的错误
检查位于 JSONPath 的应用程序级错误消息。
如果检查成功且消息不为空,则停止处理;否则,继续使用此预处理步骤之前的值进行处理。
注释:
- 这些外部服务错误将原样报告给用户,不会添加预处理步骤信息;
- 如果无法解析无效的 JSON,则不会报告错误。
检查 XML 中的错误
检查位于 XPath 的应用程序级错误消息。 如果检查成功且消息不为空,则停止处理;否则,继续使用此预处理步骤之前的值进行处理。
注释:
- 这些外部服务错误将原样报告给用户,不会添加预处理步骤信息;
- 如果无法解析无效的 XML,则不会报告错误。
使用正则表达式检查错误
使用正则表达式检查应用程序级错误消息。
如果处理成功且消息不为空,则停止处理;否则,继续使用此预处理步骤之前的值进行处理。
参数:
- pattern - 正则表达式;
- output - 输出格式模板。 \N(其中 N=1…9)转义序列将替换为第 N 个匹配组。 \0 转义序列将替换为匹配的文本。
注释:
- 这些外部服务错误将原样报告给用户,不会添加预处理步骤信息。
检查不支持的值
检查是否无法获取监控项值。 通过检查返回的错误消息,指定应如何处理失败。
参数:
- scope - 选择错误处理范围:
any error - 任意错误;
error matches - 仅匹配 pattern 中指定正则表达式的错误;
error does not match - 仅不匹配 pattern 中指定正则表达式的错误 - pattern - 用于匹配错误的正则表达式。
如果在范围参数中选择了 any error,则不显示此字段。
如果显示,此字段为必填项。
注释:
- 通常,无法获取值或获取值失败会导致监控项变为不支持。 此预处理步骤允许您修改此行为。
- 此预处理步骤仅检查是否无法获取监控项值。 例如,它不会检查获取的值类型(如字符串)是否与监控项的信息类型(如数值)匹配;有关详细信息,请参阅预处理示例。 如果类型不匹配,在执行完所有预处理步骤后,监控项仍可能变为不支持。 要检查类型是否匹配,可以使用例如 Custom multiplier 预处理步骤;请参阅预处理示例。
- Set value to 或 Set error to 字段支持捕获正则表达式组。 使用 \N(其中 N=1…9)获取第 N 个匹配组;使用 \0 获取匹配的文本;
- 这些步骤始终作为第一个预处理步骤执行,并在保存对监控项的更改后置于所有其他步骤之上;
- 支持按指定顺序使用多个 Check for not supported value 步骤。 any error 步骤将自动作为此组中的最后一个步骤。
Discard unchanged
若值未发生变更则予以丢弃.
注释:
- 若某值被丢弃,则不会被保存至数据库且Zabbix server不会感知到该值的接收.
由于不会触发任何表达式评估,因此相关触发器的问题将不会被创建/解决.
函数仅能基于实际存入数据库的数据进行运算.
由于趋势数据是基于数据库中的数据生成,若某小时内无数据存入,则该时段内也不会产生趋势数据.
- 每个监控项仅能指定一种节流选项.
在心跳周期内丢弃未更改的值
如果某个值在定义的时间段(以秒为单位)内未发生更改,则丢弃该值。
注释:
- 支持使用正整数指定秒数(最小值为 1 秒);
- 可以使用时间后缀(例如:
30s、1m、2h、1d);
- 可以使用用户宏和低级别发现宏;
- 如果某个值被丢弃,则不会将其保存到数据库中,Zabbix 服务器也不会知道已收到该值。
不会评估任何触发器表达式,因此不会为相关触发器创建或解决任何问题。
函数仅基于实际保存到数据库中的数据运行。
由于趋势数据基于数据库中的数据构建,如果某个小时内没有保存任何值,则该小时也不会有趋势数据。
- 每个监控项只能指定一个限流选项。
Prometheus 模式
使用以下查询从 Prometheus 指标中提取所需数据。
有关更多详细信息,请参阅 Prometheus 检查。
Prometheus 转 JSON
将所需的 Prometheus 指标转换为 JSON。
有关更多详细信息,请参见 Prometheus 检查。
宏支持
User macros 以及带上下文的用户宏支持在以下场景使用:
- 预处理步骤参数,包括JavaScript代码
- 自定义错误处理参数(设置值为和设置错误为字段)
宏上下文在宏被替换为其值时会被忽略。 宏值会原样插入代码中,无法在将值放入JavaScript代码前进行额外转义。 请注意,在某些情况下这可能导致JavaScript错误。