问题描述
Zabbix是一个强大的系统参数监控工具,但有时候一些参数的获取并不是那么直接,比如脏缓存页面的数量。例如,在典型的Linux系统上,可以通过/proc/meminfo
文件获取这些参数:
Inactive(file): 1348288 kBUnevictable: 18876 kBMlocked: 18876 kBSwapTotal: 8388604 kBSwapFree: 8388604 kBDirty: 39620 kBWriteback: 948 kB...
在上面的输出中,我们想要获取的是Dirty
这一行的值,即39620。使用sed
和grep
的组合命令,可以相对简单地实现这一目标:
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版本的具体说明,以确保操作的正确性和安全性。