阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

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

105次阅读
没有评论

共计 3782 个字符,预计需要花费 10 分钟才能阅读完成。

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

ZABBIX 的详细介绍 :请点这里
ZABBIX 的下载地址 :请点这里

正文完
星哥说事-微信公众号
post-qrcode
 
星锅
版权声明:本站原创文章,由 星锅 2022-01-20发表,共计3782字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中