近期数据主机的磁盘IO经常峰值,影响业务的稳定运行。得到一个需求,要求通过zabbix监控agent主机的IO状态,要知道zabbix默认是没有监控zabbix模板的,那么此时需要我们定义脚本获取agent的IO性能,并在zabbix的web端定义模板来实现对数据库主机监控
下面就来介绍如何通过zabbix对agent主机的IO性能进行监控:
【Agent段配置详解】
# egrep -v "#|^$" /etc/zabbix/zabbix_agentd.conf PidFile=/var/run/zabbix/zabbix_agentd.pid LogFile=/var/log/zabbix/zabbix_agentd.log LogFileSize=0 Server=10.15.200.72 Include=/etc/zabbix/zabbix_agentd.d/*.conf
# cat /etc/zabbix/zabbix_agentd.d/scripts/disk_discovery.sh #编写自动发现磁盘脚本
#!/bin/bash diskarray=(`cat /proc/diskstats |grep -E "sd[a-z]|xvd[a-z]|vd[a-z]"|awk '{print $3}'|sort|uniq 2>/dev/null`) length=${#diskarray[@]} printf "{ " printf ' '""data":[" for ((i=0;i<$length;i++)) do printf ' {' printf ""{#DISK_NAME}":"${diskarray[$i]}"}" if [ $i -lt $[$length-1] ];then printf ',' fi done printf " ] " printf "} "
# cat /etc/zabbix/zabbix_agentd.d/scripts/disk_status.sh #获取磁盘IO数据
#/bin/sh Device=$1 DISK=$2 case $DISK in rrqm) iostat -dxkt 1 2|grep "$Device"|tail -1|awk '{print $2}' ;; wrqm) iostat -dxkt 1 2|grep "$Device"|tail -1|awk '{print $3}' ;; rps) iostat -dxkt 1 2|grep "$Device"|tail -1|awk '{print $4}' ;; wps) iostat -dxkt 1 2|grep "$Device" |tail -1|awk '{print $5}' ;; rKBps) iostat -dxkt 1 2|grep "$Device" |tail -1|awk '{print $6}' ;; wKBps) iostat -dxkt 1 2|grep "$Device" |tail -1|awk '{print $7}' ;; avgrq-sz) iostat -dxkt 1 2|grep "$Device" |tail -1|awk '{print $8}' ;; avgqu-sz) iostat -dxkt 1 2|grep "$Device" |tail -1|awk '{print $9}' ;; await) iostat -dxkt 1 2|grep "$Device" |tail -1|awk '{print $10}' ;; svctm) iostat -dxkt 1 2|grep "$Device" |tail -1|awk '{print $11}' ;; util) iostat -dxkt |grep "$Device" |tail -1|awk '{print $12}' ;; esac
参数详解:
rrqm/s: 每秒进行 merge 的读操作数目。即 delta(rmerge)/s wrqm/s: 每秒进行 merge 的写操作数目。即 delta(wmerge)/s rps: 每秒完成的读 I/O 设备次数。即 delta(rio)/s wps: 每秒完成的写 I/O 设备次数。即 delta(wio)/s rsec/s: 每秒读扇区数。即 delta(rsect)/s wsec/s: 每秒写扇区数。即 delta(wsect)/s rkBps: 每秒读K字节数。是 rsect/s 的一半,因为每扇区大小为512字节。(需要计算) wkBps: 每秒写K字节数。是 wsect/s 的一半。(需要计算) avgrq-sz: 平均每次设备I/O操作的数据大小 (扇区)。delta(rsect+wsect)/delta(rio+wio) avgqu-sz: 平均I/O队列长度。即 delta(aveq)/s/1000 (因为aveq的单位为毫秒)。 await: 平均每次设备I/O操作的等待时间 (毫秒)。即 delta(ruse+wuse)/delta(rio+wio) svctm: 平均每次设备I/O操作的服务时间 (毫秒)。即 delta(use)/delta(rio+wio) %util: 一秒中有百分之多少的时间用于 I/O 操作,或者说一秒中有多少时间 I/O 队列是非空的。即 delta(use)/s/1000 (因为use的单位为毫秒)
# cat /etc/zabbix/zabbix_agentd.d/disk_status.conf #将两个脚本授予执行权限,单独写在一个个配置文件中,
UserParameter=disk.discovery[*],/etc/zabbix/zabbix_agentd.d/scripts/disk_discovery.sh UserParameter=disk.status[*],/etc/zabbix/zabbix_agentd.d/scripts/disk_status.sh $1 $2
【Zabbix-web端配置】
1、新建模板,命名为DISK-IO,加入到Templates模板组。
2、新建一个自动发现规则
3、建立多个监控项原型
4、建立触发器类型
5、建立图形原型
最后将定义的模板链接到某个监控主机,从图形中即可发现磁盘IO数据变化
END!