• 欢迎访问蜷缩的蜗牛博客 蜷缩的蜗牛
  • 微信搜索: 蜷缩的蜗牛 | 联系站长 kbsonlong@qq.com
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏吧

【转载】zabbix自动添加磁盘IO监控

Zabbix 蜷缩的蜗牛 1年前 (2017-07-26) 8次浏览 已收录 0个评论

一、监控原理

基本原理:通过分析/proc/diskstats 文件,来对 IO 的性能进行监控。解释如下:

第一至第三个域,分别是主设备号,次设备号,设备名称

第 4 个域:读完成次数 —– 读磁盘的次数,成功完成读的总次数。

第 5 个域:合并读完成次数, 第 9 个域:合并写完成次数。为了效率可能会合并相邻的读和写。从而两次 4K 的读在它最终被处理到磁盘上之前可能会变成一次 8K 的读,才被计数(和排队),因此只有一次 I/O 操作。这个域使你知道这样的操作有多频繁。

第 6 个域:读扇区的次数,成功读过的扇区总次数。

第 7 个域:读花费的毫秒数,这是所有读操作所花费的毫秒数(用 __make_request()到 end_that_request_last()测量)。

第 8 个域:写完成次数 —-写完成的次数,成功写完成的总次数。

第 9 个域:合并写完成次数 —–合并写次数。

第 10 个域:写扇区次数 —- 写扇区的次数,成功写扇区总次数。

第 11 个域:写操作花费的毫秒数  —  写花费的毫秒数,这是所有写操作所花费的毫秒数(用 __make_request()到 end_that_request_last()测量)。

第 12 个域:正在处理的输入/输出请求数 — -I/O 的当前进度,只有这个域应该是 0。当请求被交给适当的 request_queue_t 时增加和请求完成时减小。

第 13 个域:输入/输出操作花费的毫秒数  —-花在 I/O 操作上的毫秒数,这个域会增长只要 field 9 不为 0。

第 14 个域:输入/输出操作花费的加权毫秒数 —–  加权, 花在 I/O 操作上的毫秒数,在每次 I/O 开始,I/O 结束,I/O 合并时这个域都会增加。这可以给 I/O 完成时间和存储那些可以累积的提供一个便利的测量标准。

 

cat /proc/diskstats |grep sda |head -1
 8       0 sda 20494 9008 921755 20814 1664897 1234103 23193116 5114244 0 2900808 5132892

 

二、实现脚本

vim disk_discovery.py 

#/usr/bin/python
 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=(',',':'))

—————————————————————————————————————
vim disk_status.sh

#/bin/sh
 device=$1
 DISK=$2

case $DISK in
     read.ops)
         /bin/cat /proc/diskstats | grep "\b$device\b" | head -1 | awk '{print $4}'    #//磁盘读的次数             
         ;;          
     read.ms)
         /bin/cat /proc/diskstats | grep "\b$device\b" | head -1 | awk '{print $7}'    #//磁盘读的毫秒数             
         ;;          
     write.ops)
         /bin/cat /proc/diskstats | grep "\b$device\b" | head -1 | awk '{print $8}'     #//磁盘写的次数             
         ;;
     write.ms)
         /bin/cat /proc/diskstats | grep "\b$device\b" | head -1 | awk '{print $11}'    #//磁盘写的毫秒数             
         ;;
     io.active)
         /bin/cat /proc/diskstats | grep "\b$device\b" | head -1 | awk '{print $12}'    #//I/O 的当前进度,             
         ;;
     read.sectors)
         /bin/cat /proc/diskstats | grep "\b$device\b" | head -1 | awk '{print $6}'      #//读扇区的次数(一个扇区的等于 512B)             
         ;;
     write.sectors)
         /bin/cat /proc/diskstats | grep "\b$device\b" | head -1 | awk '{print $10}'     #//写扇区的次数(一个扇区的等于 512B)             
         ;;
     io.ms)
         /bin/cat /proc/diskstats | grep "\b$device\b" | head -1 | awk '{print $13}'      #//花费在 IO 操作上的毫秒数             
         ;;
esac
---------------------------------------------------------------------------------------------------------------

配置 zabbix 客户端

UserParameter=disk.discovery,/usr/bin/python /opt/appl/zabbix/etc/shells/disk_discovery.py
UserParameter=disk.status[*],/opt/appl/zabbix/etc/shells/disk_status.sh $1 $2

测试结果:

zabbix_get -s 172.16.8.210 -k "disk.status[sda,read.ops]"

监控 key 值

disk.status[{#DISK_NAME},read.ops]
disk.status[{#DISK_NAME},read.ms]
disk.status[{#DISK_NAME},write.ops]
disk.status[{#DISK_NAME},write.ms]
disk.status[{#DISK_NAME},io.active]
disk.status[{#DISK_NAME},io.ms]
disk.status[{#DISK_NAME},read.sectors]
disk.status[{#DISK_NAME},write.sectors]

首先添加模板 ,然后在模板上添加监控项目

名称: {#DISK_NAME}磁盘读的次数
键值: disk.status[{#DISK_NAME},read.ops]
单位: ops/second
储存值:差量(每秒速率)

名称: {#DISK_NAME}磁盘写的次数
键值: disk.status[{#DISK_NAME},write.ops]
单位: ops/second
储存值:差量(每秒速率)

名称: {#DISK_NAME}磁盘读的毫秒数
键值: disk.status[{#DISK_NAME},read.ms]
单位: ms
储存值:差量(每秒速率)

名称: {#DISK_NAME}磁盘写的毫秒数
键值: disk.status[{#DISK_NAME},write.ms]
单位: ms
储存值:差量(每秒速率)

名称: {#DISK_NAME}读扇区的次数
键值:  disk.status[{#DISK_NAME},read.sectors]
单位:  B/sec
使用自定义倍数: 512
储存值:差量(每秒速率)

名称: {#DISK_NAME}写扇区的次数
键值:  disk.status[{#DISK_NAME},write.sectors]
单位:  B/sec
使用自定义倍数: 512
储存值:差量(每秒速率)


蜷缩的蜗牛 , 版权所有丨如未注明 , 均为原创丨 转载请注明【转载】zabbix 自动添加磁盘 IO 监控
喜欢 (0)
[]
分享 (0)

您必须 登录 才能发表评论!