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使用手册:监控磁盘性能