Zabbix 3.4版本更新了许多新功能,其中一个监控项功能Preprocessing,根据官方说明文档,在监控项收集的数据存储到数据库前,预先对数据进行处理,使用效果超过预期。这个功能存放位置在创建item后多了一个Preprocessing选项卡,截图如下
简单解析下Preprocessing菜单:
转换 | 描述 |
Custom multiplier | 将值乘以指定的整数或浮点值。使用此选项将以KB,MBps等接收的值转换为B,Bps,否则Zabbix无法正确设置前缀(K,M,G等)。从Zabbix 2.2开始,也支持使用科学符号。 例如。 1e + 70。 |
Right trim | 从值的末尾删除指定的字符。 |
Left trim | 从值的起始处删除指定的字符。 |
Trim | 从值的起始和结尾删除指定的字符。 |
Regular expression | 将值与<pattern>正则表达式匹配,并用<output>替换值。 正则表达式支持用\N序列提取最多10个捕获的组。\ 参数: |
Boolean to decimal | 将值从布尔格式转换为十进制。文本表示被转换为0或1.因此,“TRUE”存储为1,“FALSE”存储为0.所有值都以不区分大小写的方式进行匹配。当前被认为的布尔值值如下: |
Octal to decimal | 将八进制格式的值转换为十进制。 |
Hexadecimal to decimal | 将值从十六进制格式转换为十进制。 |
Delta | 计算当前值和上一个值之间的差值。评估为value-prev_value,其中 value - current value; prev_value - 以前收到的值每个项目只允许一个delta操作。 |
Delta per second | 计算每秒速度的值变化(当前值和上一个值的差值)。 |
1.1 正则表达式
1、选择字符或文本监控项
选择了收集系统CPU信息的监控项作为实验操作对象。未做处理时原始值为字符串
2、现在把这个监控项的Preprocessing名称下拉菜单选择为正则表达式
3、根据官方说明信息,监控项收集字符串如果符合^processor正则表达式的就会被替换为test,等待一段时候后结果符合预期
4、正则表达式还可以使用\N(N=1……9)序列方式,格式化输出替换的模版,大大丰富的正则替换的类型,并可以重组替换的输出值。下面修改正则表达式使用序列方式自定义输出值
5、正则表达式为(GenuineIntel).*(working),替换值为 \1 test \2,第一个括号的正则表达式代表第一个序列,第二个括号的正则表达式代表第二个序列,替换值分别使用\1和\2代表,不过必须要注意去掉括号后,整个正则表达式必须匹配监控项值的一部分,否则得出的结果为空值。
得出的结果符合预期。
6、Proprocessing还有一个特别棒的功能,被转换了一次的数值可以在被下一层继续处理,如果熟悉使用过shell命令的管道符的话,对于这个就不难理解。如下图,增加多一层转换
结果为
7、可以在添加一层转换,使用\d+匹配其中的数字
结果为
1.2 自定义倍数
1、根据上面得出的数字,使用Custom multiplier自定义倍数转换,可获得预期值
结果为
1.3 过滤尾字符
1、从值的末尾删除指定的字符
结果为
1.4 过滤首字符
1、从值的起始处删除指定的字符
结果为
注:其它的转换处理根据表格说明自行验证
1.5 存储值转换
有意思是这些处理是在数据储存到数据库前的操作,而触发器的触发操作依据是数据库中储存的值,所以这一串处理储存到数据库的值是整数值类型的8,可以为这个监控项配置一个判断大于8等类型的触发器。
1.6 总结语
preprocessing功能非常实用,如某些品牌的网络设备,使用snmp方式监控并收集回来的数据,由于厂商预先进行了处理,导致网络流量的值为4.5MB或者56KB等形式,人性化的表现形式,而对于3.4以前的zabbix来说,整数或浮点数后面多一两个字符,这整串数据就不能以整数值或者浮点数配置监控项的数据库收集类型,必须使用文本字符串类型,而文本和字符串类型监控项触发器不能使用数值监控类型的判断并触发流量报警。要变成数字类型,唯一的方式是使用外部检查预先编写字符串处理脚本,但增加的配置监控项的繁琐程度,且外部检查降低了zabbix的性能,3.4的preprocessing功能使得问题解决,并更加灵活的处理监控数据。