Centos6操作系统:
iostat
Linux 2.6.32-431.el6.x86_64 (shvm-zbx01-3-3) 04/24/2017 _x86_64_ (8 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
1.82 0.00 1.19 0.02 0.00 96.97
Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn
sda 1.67 2.56 22.62 5273349 46596096
dm-0 0.02 0.20 0.12 404386 242752
dm-1 0.67 0.01 5.33 29914 10982896
dm-2 0.00 0.00 0.00 2586 968
dm-3 2.05 0.14 16.42 283762 33825064
dm-4 0.09 0.00 0.75 2226 1544328
Centos7操作系统:
iostat
Linux 3.10.0-514.el7.x86_64 (zabbix-grafana) 2017年04月24日 _x86_64_ (2 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
2.71 0.00 1.14 9.54 0.00 86.61
Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
sda 37.16 23.57 2725.51 11716159 1354834772
单独执行iostat,显示的结果为从系统开机到当前执行时刻的统计信息。以上输出中,除最上面指示系统版本、主机名和日期的一行外,另有两部分:
avg-cpu: 总体cpu使用情况统计信息,对于多核cpu,这里为所有cpu的平均值;
Device: 各磁盘设备的IO统计信息.
iostat -dxkt
Linux 2.6.32-431.el6.x86_64 (xxx-xxxx) 04/24/2017 _x86_64_ (8 CPU)
04/24/2017 10:11:57 AM
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await svctm %util
sda 0.26 1.17 0.02 1.65 1.28 11.31 15.05 0.01 3.04 1.75 0.29
dm-0 0.00 0.00 0.01 0.01 0.10 0.06 14.60 0.00 28.92 1.27 0.00
dm-1 0.00 0.00 0.00 0.67 0.01 2.67 8.00 0.00 2.18 1.12 0.07
dm-2 0.00 0.00 0.00 0.00 0.00 0.00 7.99 0.00 18.96 2.09 0.00
dm-3 0.00 0.00 0.00 2.05 0.07 8.21 8.07 0.01 4.06 0.96 0.20
dm-4 0.00 0.00 0.00 0.09 0.00 0.37 8.00 0.00 4.58 2.21 0.02
rrqm/s: 每秒对该设备的读请求被合并次数,文件系统会对读取同块(block)的请求进行合并
wrqm/s: 每秒对该设备的写请求被合并次数
r/s: 每秒完成的读次数
w/s: 每秒完成的写次数
rkB/s: 每秒读数据量(kB为单位)
wkB/s: 每秒写数据量(kB为单位)
avgrq-sz:平均每次IO操作的数据量(扇区数为单位)
avgqu-sz: 平均等待处理的IO请求队列长度
await: 平均每次IO请求等待时间(包括等待时间和处理时间,毫秒为单位)
svctm: 平均每次IO请求的处理时间(毫秒为单位)
%util: 采用周期内用于IO操作的时间比率,即IO队列非空的时间比率
iostat -dxkt
Linux 3.10.0-514.el7.x86_64 (zabbix-grafana) 2017年04月24日 _x86_64_ (2 CPU)
2017年04月24日 10时12分19秒
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
sda 0.02 0.32 0.59 36.57 23.56 2725.33 147.97 1.54 41.45 6.22 42.02 6.01 22.34
注意:
iostat在Centos7系统中多了
r_await
w_await
disk_discovery.py
#/usr/bin/python
#This script is used to discovery disk on the server
import subprocess
import json
args="cat /proc/diskstats |grep -E '\ssd[a-z]\s|\sxvd[a-z]\s|\svd[a-z]\s'|awk '{print $3}'|sort|uniq 2>/dev/null"
t=subprocess.Popen(args,shell=True,stdout=subprocess.PIPE).communicate()[0]
disks=[]
for disk in t.split('\n'):
if len(disk) != 0:
disks.append({'{#DISK_NAME}':disk})
print json.dumps({'data':disks},indent=4,separators=(',',':'))
#/bin/sh
Device=$1
DISK=$2
case $DISK in
rrqm)
iostat -dxkt |grep "\b$Device\b"|tail -1|awk '{print $2}'
;;
wrqm)
iostat -dxkt |grep "\b$Device\b"|tail -1|awk '{print $3}'
;;
rps)
iostat -dxkt |grep "\b$Device\b"|tail -1|awk '{print $4}'
;;
wps)
iostat -dxkt |grep "\b$Device\b" |tail -1|awk '{print $5}'
;;
rKBps)
iostat -dxkt |grep "\b$Device\b" |tail -1|awk '{print $6}'
;;
wKBps)
iostat -dxkt |grep "\b$Device\b" |tail -1|awk '{print $7}'
;;
avgrq-sz)
iostat -dxkt |grep "\b$Device\b" |tail -1|awk '{print $8}'
;;
avgqu-sz)
iostat -dxkt |grep "\b$Device\b" |tail -1|awk '{print $9}'
;;
await)
iostat -dxkt |grep "\b$Device\b" |tail -1|awk '{print $10}'
;;
svctm)
iostat -dxkt |grep "\b$Device\b" |tail -1|awk '{print $11}'
;;
util)
iostat -dxkt |grep "\b$Device\b" |tail -1|awk '{print $12}'
;;
esac
脚本执行结果如下:
sh /opt/appl/zabbix/etc/shells/disk_status.sh sda await
3.04
sh /opt/appl/zabbix/etc/shells/disk_status.sh sda util
0.29
sh /opt/appl/zabbix/etc/shells/disk_status.sh sda svctm
1.75
sh /opt/appl/zabbix/etc/shells/disk_status.sh sda await
3.04
sh /opt/appl/zabbix/etc/shells/disk_status.sh sda avgqu-sz
0.01
sh /opt/appl/zabbix/etc/shells/disk_status.sh sda avgrq-sz
15.05
sh /opt/appl/zabbix/etc/shells/disk_status.sh sda wKBps
11.31
sh /opt/appl/zabbix/etc/shells/disk_status.sh sda rKBps
1.28
sh /opt/appl/zabbix/etc/shells/disk_status.sh sda wps
1.65
sh /opt/appl/zabbix/etc/shells/disk_status.sh sda rps
0.02
sh /opt/appl/zabbix/etc/shells/disk_status.sh sda wrqm
1.17
sh /opt/appl/zabbix/etc/shells/disk_status.sh sda rrqm
0.26