2 监控项值预处理

概述

预处理允许为接收到的监控项值定义转换规则。 在将值保存到数据库之前,可以进行一次或多次转换。 转换按照它们定义的顺序执行。 预处理是由Zabbix server或者Zabbix proxy (代理监控项)执行。

参考:

配置

预处理规则在项目的预处理选项卡中进行配置

2 监控项值预处理 - 图1

如果任何预处理步骤失败监控项将不支持, 除非在自定义失败选项中指定了自定义错误处理。

对于日志监控项,日志元数据(没有值)将总是重置监控项的不支持的状态,使监控项再次受到支持,即使在从agent接收到日志值后发生了初始错误。

用户宏 在项值预处理参数中支持带有上下文的用户宏, 包含JavaScript代码。

当宏被它的值替换时,上下文将被忽略。宏值将直接插入到代码中,在将值放入JavaScript代码之前不能添加额外的转义。请注意,在某些情况下,这可能会导致JavaScript错误。

类型转换方式描述
文本
正则表达式将值与<pattern>正则表达式匹配,并将值替换为<output>。 正则表达式支持提取最多10个带有\N序列的捕获组. 如果不匹配输入值,则将不支持该监控项。
参数:
pattern - 正则表达式
output - 输出模板格式。 \N (其中N=1…9)转义序列被替换为第N个匹配组。\0 转义序列被替换为匹配的文本.
从3.4.0开始支持。
请参考正在表达式 部分,以获取一些现有的示例。
如果你使用 自定义失败 复选框,如果预处理步骤失败,将不会不支持该项,并且可以指定自定义错误处理选项: 可以丢弃该值、设置指定的值或设置指定的错误消息。
替换查找搜索字符串并将其替换为另一个字符串(或不替换)。 所有搜索到字符串都将被替换.
参数:
search string - 查找和替换的字符串, 区分大小写(必需)
replacement - 替换搜索到的字符串. 替换字符串也可以是空,这样可以有效的把搜索到的字符串删除。
可以使用转义序列来搜索或替换换行符, 回车, tab 和 空格 “\n \r \t \s”; 反斜杠可以转义为 “\“ 和 转义序列可以转义为 “\n”. 换行转义, 回车, 标签是在自动发现期间自动完成的。
5.0.0开始支持。
修整删除值开始或者结束位置的指定字符。
修整右边删除值结束位置的指定字符。
修整左边删除值开始位置的指定字符。
Structured data
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>
注意,不支持名称空间。
从3.4.0开始支持。
如果你使用Custom on fail复选框, 在预处理步骤失败的情况下,该项不会变得不受支持,并且可以指定自定义错误处理选项:丢弃该值、设置指定值或设置指定的错误消息。
JSON Path使用JSONPath 功能从JSON数据中提取值或片段 .
如果你使用 Custom on fail 复选框, 在预处理步骤失败的情况下,该项不会变得不受支持,并且可以指定自定义错误处理选项:丢弃该值、设置指定值或设置指定的错误消息。
CSV to JSON将CSV文件数据转换为JSON格式。
有关更多信息,请参见: CSV转换JSON的预处理.
从4.4.0开始支持。
Arithmetic
Custom multiplier将该值乘以指定的整数或浮点值.
使用此选项转换接收到的以等变成B、Bps、KB、MBps为单位的值。 否则 Zabbix无法正确设置(K, M, G 等)后缀
注意 如果监控项类型是 数字 (无符号), 在传入自定义乘法器之前带有小数部分的传入值将被裁剪 (‘0.9’ 将变成 ‘0’)。
支持: 科学记数法, 例如, 1e+70 (从2.2开始); 用户宏和LLD宏 (从4.0版本开始); 包含宏的字符串, 例如, {#MACRO}e+10, {$MACRO1}e+{$MACRO2} (从5.0.7版本开始)
宏必须解析为整数或浮点数.
如果你使用 Custom on fail 复选框, 在预处理步骤失败的情况下,该项不会变得不受支持,并且可以指定自定义错误处理选项:丢弃该值、设置指定值或设置指定的错误消息。
Change
简单更改计算当前值与先前值的差值。
公式为 value-prev_value
value - 当前值; prev_value - 先前值
这个设置对于度量一个不断增长的值很有用。 如果当前值小于之前的值, Zabbix会丢弃这个差异(不存储任何东西)并等待另一个值.\每个项只允许一个更改操作.
如果你使用 Custom on fail 复选框, 在预处理步骤失败的情况下,该项不会变得不受支持,并且可以指定自定义错误处理选项:丢弃该值、设置指定值或设置指定的错误消息。
每秒更改计算值的变化(当前值与上一个值之间的差异)速度每秒.
公式为 (value-prev_value)/(time-prev_time),
value - 当前值; prev_value - 先前值; time - 当前时间; prev_time - 先前时间.
这个设置对于获取持续增长值的每秒速度非常有用。 如果当前值小于之前的值,Zabbix将丢弃这个差值(不存储任何值),并等待另一个值。这有助于正确工作,例如,包装(溢出)32位SNMP计数器。
注意: 由于此计算可能产生浮点数,因此建议设置’类型’为浮点数, 即使传入的原始值是整数. 这对于小数部分很重要的小数字来说尤其重要。如果浮点值很大,并且可能超过“float”字段长度,在这种情况下,整个值可能会丢失, 实际上是建议使用的 整数 (无符号) 因此,只修剪小数点部分。
每个项只允许一个更改操作。
如果你使用 Custom on fail 复选框, 在预处理步骤失败的情况下,该项不会变得不受支持,并且可以指定自定义错误处理选项:丢弃该值、设置指定值或设置指定的错误消息。
Numeral systems
布尔值转十进制将值从布尔格式转换为十进制。文本表示被翻译成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。
自4.0.0以来支持以下值: ok, master, err, slave.\如果你使用 Custom on fail 复选框, 在预处理步骤失败的情况下,该项不会变得不受支持,并且可以指定自定义错误处理选项:丢弃该值、设置指定值或设置指定的错误消息。
八进制转十进制将值从八进制格式转换为十进制.
如果你使用 Custom on fail 复选框, 在预处理步骤失败的情况下,该项不会变得不受支持,并且可以指定自定义错误处理选项:丢弃该值、设置指定值或设置指定的错误消息。
十六进制转十进制将十六进制转换为十进制.
如果你使用 Custom on fail 复选框, 在预处理步骤失败的情况下,该项不会变得不受支持,并且可以指定自定义错误处理选项:丢弃该值、设置指定值或设置指定的错误消息。
Custom scripts
Javascript在单击参数字段或铅笔图标时出现的块中输入JavaScript代码。
注意, 可用的JavaScript长度取决于所使用的使用的数据库.
有关更多信息,请参见: Javascript预处理.
Validation
In range通过指定最小值/最大值(包括)来定义一个值的范围。
接受的数值包含(任意数字,可选的小数部分和可选的指数部分,负数)。 可以使用用户宏和低级发现宏。最小值应小于最大值。
必须至少存在一个值。
如果你使用 Custom on fail 复选框, 在预处理步骤失败的情况下,该项不会变得不受支持,并且可以指定自定义错误处理选项:丢弃该值、设置指定值或设置指定的错误消息。
Matches regular expression指定一个必须能匹配的正则表达式的值.
如果你使用 Custom on fail 复选框, 在预处理步骤失败的情况下,该项不会变得不受支持,并且可以指定自定义错误处理选项:丢弃该值、设置指定值或设置指定的错误消息。
Does not match regular expression指定一个必须不能匹配的正则表达式的值.
如果你使用 Custom on fail 复选框, 在预处理步骤失败的情况下,该项不会变得不受支持,并且可以指定自定义错误处理选项:丢弃该值、设置指定值或设置指定的错误消息。
Check for error in JSON检查位于JSONpath的应用程序级错误消息。如果成功且消息不为空,则停止处理;否则,继续使用此预处理步骤之前的值进行处理。 注意,没有添加预处理步骤信息的话,这些外部服务错误按原样报告给用户,.
在解析无效JSON失败的情况下不会报告错误.
如果你使用 Custom on fail 复选框, 在预处理步骤失败的情况下,该项不会变得不受支持,并且可以指定自定义错误处理选项:丢弃该值、设置指定值或设置指定的错误消息。
Check for error in XML检查位于XPath的应用程序级错误消息。如果成功且消息不为空,则停止处理;否则,继续使用此预处理步骤之前的值进行处理。注意,没有添加预处理步骤信息的话,这些外部服务错误按原样报告给用户。
在解析无效XML失败的情况下不会报告错误。.\如果你使用 Custom on fail 复选框, 在预处理步骤失败的情况下,该项不会变得不受支持,并且可以指定自定义错误处理选项:丢弃该值、设置指定值或设置指定的错误消息。
Check for error using a regular expression使用正则表达式检查应用程序级错误消息。如果成功且消息不为空,则停止处理;否则,继续使用此预处理步骤之前的值进行处理。注意,没有添加预处理步骤信息的话,这些外部服务错误按原样报告给用户。
Parameters:
pattern - 正则表达式
output - 输出模板格式。 一个\N(其中N=1…9)转义序列被替换为第N个匹配组。一个\0转义序列被替换为匹配的文本。
如果你使用 Custom on fail 复选框, 在预处理步骤失败的情况下,该项不会变得不受支持,并且可以指定自定义错误处理选项:丢弃该值、设置指定值或设置指定的错误消息。
Throttling
Discard unchanged如果一个值没有改变,则丢弃它。
如果一个值被丢弃,它就不会保存在数据库中,Zabbix Server也不知道收到了这个值。不会对触发器表达式求值,因此,不会创建/解决相关触发器的问题。触发器函数只根据实际保存在数据库中的数据工作。由于趋势是基于数据库中的数据构建的,如果一个小时没有保存价值,那么这个小时也不会有趋势数据。一个项目只能指定一个节流选项。
Discard unchanged with heartbeat如果一个值在定义的时间段内(以秒为单位)没有更改,则丢弃该值。
支持正整数值来指定秒数(最小值为1秒)。该字段可使用时间后缀(如30s、1m、2h、1d)。 用户宏和低级发现宏可以在这个域中使用。
如果一个值被丢弃,它就不会保存在数据库中,Zabbix Server也不知道收到了这个值。不会对触发器表达式求值,因此,不会创建/解决相关触发器的问题。触发器函数只根据实际保存在数据库中的数据工作。由于趋势是基于数据库中的数据构建的,如果一个小时没有保存价值,那么这个小时也不会有趋势数据。
一个项目只能指定一个节流选项。
Prometheus
Prometheus pattern使用以下查询从Prometheus指标提取所需的数据。
查看Prometheus检查更多细节。
Prometheus to JSON将所需的Prometheus指标转换为JSON。
查看Prometheus检查更多细节。

对于更改和限制预处理步骤,需要使用以前的值来计算/比较新值。以前的值由预处理管理器处理,预处理步骤配置在进行更改或Zabbix server/proxy重新启动时重置。由于先前的值重置:

  • 对于简单改变, 每秒该表 步骤-下一个值将被忽略,因为没有先前的值来计算更改;

  • 对于丢弃没有改变的数据带心跳检查丢弃不变化的数据 步骤 - 下一个值永远不会被丢弃, 即使它应该因为丢弃规则而被丢弃,也不会丢弃。

如果你使用一个自定义计算改变每秒监控项信息的类型,将监控项存储类型设置为数字(无符号)但计算值实际上是一个浮点数,计算值将通过削减小数部分,存储为整数的值。

测试

测试预处理步骤有助于确保复杂的预处理管道产生预期的结果,而无需等待项目值被接收和预处理。

2 监控项值预处理 - 图2

可以测试:

  • 与假设值相比

  • 与主机的实际值相比较

每个预处理步骤可以单独测试,也可以一起测试所有步骤。当您分别在动作块中单击 测试Test all steps 按钮时,将打开一个测试窗口。

测试假设值

2 监控项值预处理 - 图3

参数描述
Get value from host如果要测试假设值,请将此复选框保留为未标记。
另请参见: 测试实际值.
Value输入要测试的输入值。
单击参数字段或查看/编辑按钮将打开一个文本区域窗口,用于输入值或代码。
Time显示输入值的时间: now (只读).
Previous value输入要比较的前一个输入值。
仅适用于简单更改Throttling预处理步骤。
Previous time输入之前要比较的输入时间。
仅适用于简单更改Throttling预处理步骤。
默认值基于项的“Update interval”字段值(如果为“1m”,则此字段用“now-1m”填充)。如果未指定任何内容或用户无权访问主机,则默认值为“now-30s”。
Macros如果使用任何宏,它们将与其值一起列出。这些值是可编辑的,用于测试目的,但更改将仅保存在测试上下文中。
End of line sequence为多行输入值选择行尾序列:
LF - LF(换行)序列
CRLF - CRLF(回车换行)序列。
Preprocessing steps将列出预处理步骤;单击Test按钮后,将显示每个步骤的测试结果。
如果步骤在测试中失败,将显示错误图标。错误描述显示在鼠标上。
如果为该步骤指定了“失败时自定义”并执行了操作,则在预处理测试步骤行之后立即出现新的一行,显示已执行的操作及其产生的结果(错误或值)。
Result当所有步骤一起测试时(单击Test all steps按钮),所有情况下都会显示测试预处理步骤的最终结果。
还将显示监控项的值转换类型,例如“结果转换为数字(unsigned)”。

单击Test查看每个预处理步骤后的结果。

测试值存储在单个步骤或所有步骤的测试会话之间,允许用户更改预处理步骤或项目配置,然后返回到测试窗口,而无需重新输入信息。但是,值在页面刷新时丢失。

该测试由Zabbix服务器完成。前端将相应的请求发送到服务器,然后等待结果。请求包含输入值和预处理步骤(使用扩展的用户宏)。对于简单更改Throttling步骤,可以指定可选的上一个值和时间。服务器响应每个预处理步骤的结果。

所有技术错误或输入验证错误均显示在测试窗口顶部的错误框中。

测试真实值

要根据实际值测试预处理,请执行以下操作:

  • 标记从主机获取值复选框

  • 输入或验证主机参数(主机地址、端口、代理名称/无代理)。这些字段是上下文感知的:

    • 在可能的情况下(例如,对于需要代理的监控项)通过从主机的选定代理接口获取信息来预先填充这些值

    • 必须手动填写模板项目的值

    • 如果在项目类型的上下文中不需要该字段,则该字段将被禁用(例如,主机地址字段对于计算项目和聚合项目将被禁用,代理字段对于计算项目将被禁用)

  • 单击Get value and test以测试预处理

2 监控项值预处理 - 图4

如果在项目配置窗体(“显示值”字段)中指定了值映射,则监控项测试对话框将在最终结果之后显示另一行,名为“已应用值映射的结果”。

具体从主机获取实际值的参数:

参数描述
Get value from host标记此复选框以从主机获取实际值。
Host address输入主机地址。
此字段由项目主机接口的地址自动填充。
Port输入主机端口。
此字段由项目主机界面的端口自动填充。
Proxy如果主机受代理监视,请指定代理。
该字段由主机的代理自动填充(如果有)。

对于更多的参数, 请看 测试假设值 上面.