利用zabbix动态监控磁盘I/O-创新互联

最近在看Linux I/O子系统相关的资料,需要监控每台服务器的磁盘I/O,特别是MongoDB数据库服务器的磁盘I/O,由于每台服务器的磁盘名称可能不一样,所以需要用到Zabbix的LLD功能来发现磁盘并监控I/O

成都网站建设、做网站的开发,更需要了解用户,从用户角度来建设网站,获得较好的用户体验。创新互联多年互联网经验,见的多,沟通容易、能帮助客户提出的运营建议。作为成都一家网络公司,打造的就是网站建设产品直销的概念。选择创新互联,不只是建站,我们把建站作为产品,不断的更新、完善,让每位来访用户感受到浩方产品的价值服务。

参考文章

http://www.programering.com/a/MDOwYDNwATc.html

  1. 编写发现磁盘的脚步

    shell版本disk_discovery.sh

 #!/bin/bash
 diskarray=(`cat /proc/diskstats |grep -E "\bsd[a-z]\b|\bxvd[a-z]\b|\bvd[a-z]\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 "\"{#DISK_NAME}\":\"${diskarray[$i]}\"}"
        if [ $i -lt $[$length-1] ];then
                printf ','
        fi
done
printf  "\n\t]\n"
printf "}\n"

$ sh disk_discovery.sh 
{
	"data":[
		{"{#DISK_NAME}":"xvda"},
		{"{#DISK_NAME}":"xvdb"}
	]
}

 python版本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=(',',':'))

$ python disk_discovery.py
{
    "data":[
        {
            "{#DISK_NAME}":"xvda"
        },
        {
            "{#DISK_NAME}":"xvdb"
        }
    ]
}

2.编写获取磁盘I/O信息的脚本

使用iostat收集磁盘I/O信息

nohup /usr/bin/iostat -dxkt 1  > /tmp/iostat_output 2>/dev/null &

#/bin/sh

device=$1
item=$2

case $item in
         rrqm)
            /usr/bin/tail -n20 /tmp/iostat_output |grep "\b$device\b"|tail -1|awk '{print $2}'
            ;;
         wrqm)
            /usr/bin/tail -n20 /tmp/iostat_output |grep "\b$device\b"|tail -1|awk '{print $3}'
            ;;
          rps)
            /usr/bin/tail -n20 /tmp/iostat_output |grep "\b$device\b"|tail -1|awk '{print $4}'
            ;;
          wps)
            /usr/bin/tail -n20 /tmp/iostat_output |grep "\b$device\b" |tail -1|awk '{print $5}'
            ;;
        rKBps)
            /usr/bin/tail -n20 /tmp/iostat_output |grep "\b$device\b" |tail -1|awk '{print $6}'
            ;;
        wKBps)
            /usr/bin/tail -n20 /tmp/iostat_output |grep "\b$device\b" |tail -1|awk '{print $7}'
            ;;
     avgrq-sz)
            /usr/bin/tail -n20 /tmp/iostat_output |grep "\b$device\b" |tail -1|awk '{print $8}'
            ;;
     avgqu-sz)
            /usr/bin/tail -n20 /tmp/iostat_output |grep "\b$device\b" |tail -1|awk '{print $9}'
            ;;
        await)
            /usr/bin/tail -n20 /tmp/iostat_output |grep "\b$device\b" |tail -1|awk '{print $10}'
            ;;
        svctm)
            /usr/bin/tail -n20 /tmp/iostat_output |grep "\b$device\b" |tail -1|awk '{print $11}'
            ;;
         util)
            /usr/bin/tail -n20 /tmp/iostat_output |grep "\b$device\b" |tail -1|awk '{print $12}'
            ;;
esac

3.修改Zabbix agent配置文件

 添加disk_status.conf

### Option: UserParameter
#       User-defined parameter to monitor. There can be several user-defined parameters.
#       Format: UserParameter=,
#       See 'zabbix_agentd' directory for examples.
#
# Mandatory: no
# Default:
# UserParameter=
UserParameter=disk.discovery,/usr/bin/python /usr/local/zabbix/bin/disk_discovery.py
UserParameter=disk.status[*],/usr/local/zabbix/bin/disk_status.sh $1 $2

 然后重新加载zabbix agent

4.通过在zabbix server或zabbix proxy端使用zabbix_get获取磁盘信息

$ /usr/local/zabbix/bin/zabbix_get -s 192.168.1.190 -p 10055 -k "disk.discovery"
{
    "data":[
        {
            "{#DISK_NAME}":"xvda"
        },
        {
            "{#DISK_NAME}":"xvdb"
        },
        {
            "{#DISK_NAME}":"xvdc"
        }
    ]
}
$ /usr/local/zabbix/bin/zabbix_get -s 192.168.1.190 -p 10055 -k "disk.status[xvda,wps]"10.00

5.添加磁盘监控模板

利用zabbix动态监控磁盘I/O

利用zabbix动态监控磁盘I/O

利用zabbix动态监控磁盘I/O

利用zabbix动态监控磁盘I/O

利用zabbix动态监控磁盘I/O

利用zabbix动态监控磁盘I/O

利用zabbix动态监控磁盘I/O

在添加item的时候注意,由于使用的是iostat -k 获取每秒的读写大小,所以iostat显示的是以KB为单位,在zabbix上以B为基本单位,需要用到Use custom multiplier 这个选项将zabbix agent返回的KB值乘以1024变成B,然后zabbix agent再以B为单位显示成B或KB或MB便于查看。

另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


文章题目:利用zabbix动态监控磁盘I/O-创新互联
当前地址:http://scyanting.com/article/djeics.html