Zabbix使用手册:监控磁盘性能

Zabbix默认没有对磁盘性能进行监控,原因是需要单独安装应用sysstat(Linux,获取数据),而且实现过程也不是很简单。本文讲述zabbix如何通过iostat来实现对系统挂载磁盘的性能监控,监控项包括IOPS、读写延时、读写速度等。

提取磁盘性能数据

在需要进行磁盘性能监控的Linux系统安装sysstat。

yum -y install sysstat

通过以下命令即可查看磁盘运行状态:

iostat -x -m -d

创建磁盘发现脚本

获取系统挂载的磁盘,以Json结构保存数据,编写脚本/opt/zabbix/scripts/scandisk.sh

#!/bin/bash

diskarray=(`cat /proc/diskstats | grep -E "\brbd[0123]\b|\bsd[abcdefg]\b|\bvd[abcdefg]\b"|grep -i "\b$1\b"|awk '{print $3}'|sort|uniq 2>/dev/null`)
length=${#diskarray[@]}
printf "{\n"
printf '\t'"\"data\":["
for ((i=0;i<$length;i++))
do
  printf '\n\t\t{'
  printf "\"{#DISKNAME}\":\"${diskarray[$i]}\"}"
  [ $i -lt $[$length-1] ] && printf ','
done
printf "\n\t]\n"
printf "}\n"

创建数据输出脚本

获取磁盘性能数据,保存在文档中,编写脚本/opt/zabbix/scripts/iostat.sh

iostat -m -x -d > /var/log/io_status

创建定时任务

crontab -e
* * * * * /opt/zabbix/scripts/iostat.sh

修改zabbix-agent

创建配置文件/etc/zabbix/zabbix_agentd.d/iostat.conf

UserParameter=io.scandisk[*],/opt/zabbix/scripts/scandisk.sh $1
UserParameter=io.rps[*],tail /var/log/io_status | grep "\b$1\b"| tail -1 | awk '{print $$4}'
UserParameter=io.wps[*],tail /var/log/io_status | grep "\b$1\b" | tail -1 | awk '{print $$5}'
UserParameter=io.rMBps[*],tail /var/log/io_status | grep "\b$1\b" | tail -1 | awk '{print $$6}'
UserParameter=io.wMBps[*],tail /var/log/io_status | grep "\b$1\b" | tail -1 | awk '{print $$7}'
#UserParameter=io.avgrq-sz[*],tail /var/log/io_status | grep "\b$1\b" | tail -1 | awk '{print $$8}'
#UserParameter=io.avgqu-sz[*],tail /var/log/io_status | grep "\b$1\b" | tail -1 | awk '{print $$9}'
#UserParameter=io.await[*],tail /varlog/io_status | grep "\b$1\b" | tail -1 | awk '{print $$10}'
UserParameter=io.r_await[*],tail /var/log/io_status | grep "\b$1\b" | tail -1 | awk '{print $$11}'
UserParameter=io.w_await[*],tail /var/log/io_status | grep "\b$1\b" | tail -1 | awk '{print $$12}'
UserParameter=io.svctm[*],tail /var/log/io_status | grep "\b$1\b" | tail -1 | awk '{print $$13}'
UserParameter=io.util[*],tail /var/log/io_status | grep "\b$1\b" | tail -1 | awk '{print $$14}'

以上键值请根据实际需求进行调整,修改完后给脚本赋予执行权限并重启zabbix-agent:

chmod +x scandisk.sh iostat.sh
systemctl restart zabbix-agent

IOSTAT属性说明

列名 说明
rrqm/s 每秒进行 merge 的读操作数目
wrqm/s 每秒进行 merge 的写操作数目
r/s 每秒完成的读 I/O 设备次数
w/s 每秒完成的写 I/O 设备次数
rsec/s 每秒读扇区数
wsec/s 每秒写扇区数
rkB/s 每秒读K字节数,是 rsect/s 的一半,因为每扇区大小为512字节
wkB/s 每秒写K字节数,是 wsect/s 的一半
avgrq-sz 平均每次设备I/O操作的数据大小 (扇区)
avgqu-sz 平均I/O队列长度
await 平均每次设备I/O操作的等待时间 (毫秒)
svctm 平均每次设备I/O操作的服务时间 (毫秒)
%util 一秒中有百分之多少的时间用于 I/O 操作,即被io消耗的cpu百分比

创建监控项

创建自动发现规则

在Zabbix页面创建自动发现规则模板,获取需要部署性能监控的磁盘。

创建监控项原形

本人一共创建了常用的6项监控,如图:

监控项原型

名称:I/O rMBps on {#DISKNAME}
键值:io.rMBps[{#DISKNAME}]
单位:MB/s

名称:I/O rps on {#DISKNAME}
键值:io.rps[{#DISKNAME}]

名称:I/O r_await on {#DISKNAME}
键值:io.r_await[{#DISKNAME}]

名称:I/O wMBps on {#DISKNAME}
键值:io.wMBps[{#DISKNAME}]
单位:MB/s

名称:I/O wps on {#DISKNAME}
键值:io.wps[{#DISKNAME}]

名称:I/O w_await on {#DISKNAME}
键值:io.w_await[{#DISKNAME}]

另外,还可以根据需求创建其他监控项,以及触发器和图形等,本文略。

原创文章禁止转载:技术学堂 » Zabbix使用手册:监控磁盘性能

精彩评论

2+6=

感谢您的支持与鼓励

支付宝扫一扫打赏

微信扫一扫打赏