温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

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

发布时间:2020-06-18 22:02:21 来源:网络 阅读:17626 作者:自由linux 栏目:移动开发

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


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便于查看。




向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI