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

Linux大全评论1.2K views阅读模式

最近在看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信息

#/bin/sh

device=$1

item=$2

 

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

 

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

Timeout=10

### Option: UserParameter

#      User-defined parameter to monitor. There can be several user-defined parameters.

#      Format: UserParameter=<key>,<shell command>

#      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默认的Timeout值为3秒,由于这里使用iostat -ydxkt 1 3,每隔1秒刷新一次,刷新3次,所以如果获取磁盘信息Timeout设置时间短了的话会出现ZBX_NOTSUPPORTED这样的错误

然后重新加载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

一些Zabbix相关教程集合

安装部署分布式监控系统Zabbix 2.06 http://www.linuxidc.com/Linux/2013-07/86942.htm

《安装部署分布式监控系统Zabbix 2.06》 http://www.linuxidc.com/Linux/2013-07/86942.htm

CentOS 6.3下Zabbix安装部署 http://www.linuxidc.com/Linux/2013-05/83786.htm

Zabbix分布式监控系统实践 http://www.linuxidc.com/Linux/2013-06/85758.htm

CentOS 6.3下Zabbix监控apache server-status http://www.linuxidc.com/Linux/2013-05/84740.htm

CentOS 6.3下Zabbix监控MySQL数据库参数 http://www.linuxidc.com/Linux/2013-05/84800.htm

企鹅博客
  • 本文由 发表于 2020年9月29日 12:20:16
  • 转载请务必保留本文链接:https://www.qieseo.com/162374.html

发表评论