1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > linux磁盘i o跟踪 利用zabbix动态监控磁盘I/O

linux磁盘i o跟踪 利用zabbix动态监控磁盘I/O

时间:2023-09-30 01:50:56

相关推荐

linux磁盘i o跟踪 利用zabbix动态监控磁盘I/O

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

参考文章

编写发现磁盘的脚步

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|uniq2>/dev/null`)

length=${#diskarray[@]}

printf"{\n"

printf'\t'"\"data\":["

for((i=0;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"

$shdisk_discovery.sh

{

"data":[

{"{#DISK_NAME}":"xvda"},

{"{#DISK_NAME}":"xvdb"}

]

}

python版本disk_discovery.py#/usr/bin/python

#Thisscriptisusedtodiscoverydiskontheserver

importsubprocess

importjson

args="cat/proc/diskstats|grep-E'\ssd[a-z]\s|\sxvd[a-z]\s|\svd[a-z]\s'|awk'{print$3}'|sort|uniq2>/dev/null"

t=subprocess.Popen(args,shell=True,stdout=subprocess.PIPE).communicate()[0]

disks=[]

fordiskint.split('\n'):

iflen(disk)!=0:

disks.append({'{#DISK_NAME}':disk})

printjson.dumps({'data':disks},indent=4,separators=(',',':'))

$pythondisk_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$itemin

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-definedparametertomonitor.Therecanbeseveraluser-definedparameters.

#Format:UserParameter=,

#See'zabbix_agentd'directoryforexamples.

#

#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-s192.168.1.190-p10055-k"disk.discovery"

{

"data":[

{

"{#DISK_NAME}":"xvda"

},

{

"{#DISK_NAME}":"xvdb"

},

{

"{#DISK_NAME}":"xvdc"

}

]

}

$/usr/local/zabbix/bin/zabbix_get-s192.168.1.190-p10055-k"disk.status[xvda,wps]"10.00

5.添加磁盘监控模板

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

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。