如何在Zabbix 5.0.30中监控CentOS 7服务器的磁盘I/O(含TPS指标)
如何在Zabbix 5.0.30中监控CentOS 7服务器的磁盘I/O(含TPS指标)
我来帮你搞定这个问题~刚好之前处理过类似的需求,给你两种靠谱的方案,你可以根据自己的情况选:
方案一:用Zabbix内置监控项+计算项(无需修改Agent配置)
这个方案不用动Agent配置,直接在Zabbix前端就能搞定,适合不想折腾Agent的情况:
1. 监控kB_read/s(每秒读取KB数)
- 进入Zabbix前端对应主机页面,点击「创建监控项」
- 名称:磁盘sda每秒读取KB数
- 键值:
vfs.dev.read[sda,bytes,ps] - 类型:数值(浮点)
- 单位:kB/s
- 预处理:添加「除以」操作,值填
1024(内置项返回字节数,转成KB需要除以1024)
2. 监控kB_wrtn/s(每秒写入KB数)
- 同样创建监控项:
- 名称:磁盘sda每秒写入KB数
- 键值:
vfs.dev.write[sda,bytes,ps] - 类型:数值(浮点)
- 单位:kB/s
- 预处理:添加「除以」操作,值填
1024
3. 监控TPS(每秒I/O操作数)
Zabbix没有直接返回TPS的内置项,但TPS本质是每秒读操作数+每秒写操作数,我们可以用计算项实现:
- 先创建两个基础监控项(如果还没的话):
- 读操作每秒:键值
vfs.dev.read[sda,operations,ps],类型数值(浮点) - 写操作每秒:键值
vfs.dev.write[sda,operations,ps],类型数值(浮点)
- 读操作每秒:键值
- 再创建计算项:
- 名称:磁盘sda的TPS
- 键值:
custom.disk.tps[sda](自定义键值,只要不重复即可) - 类型:数值(浮点)
- 单位:tps
- 计算公式:
last("vfs.dev.read[sda,operations,ps]") + last("vfs.dev.write[sda,operations,ps]")
方案二:自定义UserParameter(和iostat输出完全匹配)
如果你想直接拿到和iostat -d sda完全一致的数值,就用这个方案,需要修改Agent配置:
1. 修改Zabbix Agent配置文件
登录你的CentOS 7服务器,编辑Agent配置:
vi /etc/zabbix/zabbix_agentd.conf
添加以下自定义参数到文件末尾:
# 提取sda的TPS UserParameter=disk.iostat.tps[sda],iostat -d sda 1 2 | awk 'NR==4 {print $2}' # 提取sda的kB_read/s UserParameter=disk.iostat.kb_read[sda],iostat -d sda 1 2 | awk 'NR==4 {print $3}' # 提取sda的kB_wrtn/s UserParameter=disk.iostat.kb_wrtn[sda],iostat -d sda 1 2 | awk 'NR==4 {print $4}'
解释:iostat -d sda 1 2是连续取两次统计(间隔1秒),得到平均数值避免瞬时波动;awk 'NR==4'是取输出的第4行(对应sda的统计行),再提取对应列的数值。
2. 重启Zabbix Agent服务
systemctl restart zabbix-agent
3. 在Zabbix前端创建监控项
回到Zabbix前端,给对应主机创建三个监控项:
- TPS:
- 名称:磁盘sda的TPS
- 键值:
disk.iostat.tps[sda] - 类型:数值(浮点)
- 单位:tps
- kB_read/s:
- 名称:磁盘sda每秒读取KB数
- 键值:
disk.iostat.kb_read[sda] - 类型:数值(浮点)
- 单位:kB/s
- kB_wrtn/s:
- 名称:磁盘sda每秒写入KB数
- 键值:
disk.iostat.kb_wrtn[sda] - 类型:数值(浮点)
- 单位:kB/s
验证方法
你可以在Zabbix服务器上用zabbix_get命令测试自定义参数是否生效,比如:
zabbix_get -s <你的CentOS服务器IP> -k disk.iostat.tps[sda]
如果能返回类似0.27的数值,就说明配置成功了。
备注:内容来源于stack exchange,提问作者TRONG NGUYEN




