在 Zabbix 中从结构化文件中派生项目值

83次阅读
没有评论

问题描述

Zabbix是一个强大的系统参数监控工具,但有时候一些参数的获取并不是那么直接,比如脏缓存页面的数量。例如,在典型的Linux系统上,可以通过/proc/meminfo文件获取这些参数:

Inactive(file):  1348288 kBUnevictable:       18876 kBMlocked:           18876 kBSwapTotal:       8388604 kBSwapFree:        8388604 kBDirty:             39620 kBWriteback:           948 kB...

在上面的输出中,我们想要获取的是Dirty这一行的值,即39620。使用sedgrep的组合命令,可以相对简单地实现这一目标:

export field=Dirty; grep -e "$field:" /proc/meminfo | sed -e "s/^$field: \+\([0-9]\)\+.*$/\1/"

我也可以使用UserParameter来实现相同的目标,例如:

UserParameter=proc.meminfo[*], grep -e "$1:" /proc/meminfo | sed -e "s/^$1: \+\([0-9]\)\+.*$/\1/"

然后通过item key proc.meminfo[Dirty]来访问这个值。但我更倾向于避免使用UserParameter,因为它需要在每个节点上部署额外的配置,并且进程会消耗系统熵,这些都是我通常愿意避免的事情。

解决方案

请注意以下操作可能因Zabbix版本差异而略有不同,建议在进行操作前查阅相关文档。

使用Zabbix Agent Item来获取值(适用于Zabbix Agent 2.2或更新版本)

如果你的Zabbix Agent版本是2.2或更高,你可以使用vfs.file.regexp来获取值,方法如下:
1. 在Zabbix中创建一个新的监控项(Item)。
2. 在监控项的类型(Type)中选择Zabbix agent
3. 在键(Key)字段中输入vfs.file.regexp[/proc/meminfo,^Dirty.*([0-9]+),,,,\1]
4. 保存并启用监控项。

使用Master Item和值预处理(适用于Zabbix 3.4或更新版本)

如果你的Zabbix版本是3.4或更高,你可以使用Master Item和值预处理来收集数据并解析所需的值,步骤如下:
1. 在Zabbix中创建一个Master监控项(Master Item)。
2. 在Master监控项的类型(Type)中选择适当的类型,比如Zabbix agent
3. 在键(Key)字段中输入用于收集数据的键,比如vfs.file.contents[/proc/meminfo]
4. 在Dependent Items部分,点击添加(Add)按钮。
5. 在依赖的监控项(Dependent Item)中创建一个新的监控项。
6. 在新的监控项的类型(Type)中选择适当的类型,比如Zabbix agent
7. 在键(Key)字段中输入正则表达式来解析所需的值,比如regexp[^Dirty.*([0-9]+),,,,\1]
8. 在新的监控项中,启用值预处理(Value Preprocessing)并选择正则表达式来提取匹配的值。
9. 保存并启用Master监控项以及所有相关监控项。

通过上述方法,你可以在Zabbix中获得所需的参数值,而无需使用UserParameter来进行配置。

结论

通过使用Zabbix的不同功能,你可以灵活地获取和解析系统参数,从而实现精确的监控和数据分析。选择适合你环境和需求的方法,可以有效地提高监控效率和数据准确性。

请在进行任何更改之前,务必仔细查阅Zabbix官方文档以及你使用的Zabbix版本的具体说明,以确保操作的正确性和安全性。

正文完