当前位置:   article > 正文

zabbix3.2 Discovery 自动化监控磁盘IO_zabbix 差量每秒速率 差量简单变化

zabbix 差量每秒速率 差量简单变化
  1. 一、监控原理
  2. 基本原理:通过分析/proc/diskstats文件,来对IO的性能进行监控。解释如下:
  3. 第一至第三个域,分别是主设备号,次设备号,设备名称
  4. 4个域:读完成次数 ----- 读磁盘的次数,成功完成读的总次数。
  5. 5个域:合并读完成次数, 第9个域:合并写完成次数。为了效率可能会合并相邻的读和写。从而两次4K的读在它最终被处理到磁盘上之前可能会变成一次8K的读,才被计数(和排队),因此只有一次I/O操作。这个域使你知道这样的操作有多频繁。
  6. 6个域:读扇区的次数,成功读过的扇区总次数。
  7. 7个域:读花费的毫秒数,这是所有读操作所花费的毫秒数(用__make_request()到end_that_request_last()测量)。
  8. 8个域:写完成次数 ----写完成的次数,成功写完成的总次数。
  9. 9个域:合并写完成次数 -----合并写次数。
  10. 10个域:写扇区次数 ---- 写扇区的次数,成功写扇区总次数。
  11. 11个域:写操作花费的毫秒数  ---  写花费的毫秒数,这是所有写操作所花费的毫秒数(用__make_request()到end_that_request_last()测量)。
  12. 12个域:正在处理的输入/输出请求数 -- -I/O的当前进度,只有这个域应该是0。当请求被交给适当的request_queue_t时增加和请求完成时减小。
  13. 13个域:输入/输出操作花费的毫秒数  ----花在I/O操作上的毫秒数,这个域会增长只要field 9不为0
  14. 14个域:输入/输出操作花费的加权毫秒数 -----  加权, 花在I/O操作上的毫秒数,在每次I/O开始,I/O结束,I/O合并时这个域都会增加。这可以给I/O完成时间和存储那些可以累积的提供一个便利的测量标准。
  15. cat /proc/diskstats |grep sda |head -1
  16. 8       0 sda 20494 9008 921755 20814 1664897 1234103 23193116 5114244 0 2900808 5132892
  17. 二、实现脚本
  18. vim disk_discovery.py 
  19. #/usr/bin/python
  20. import subprocess
  21. import json
  22. 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"
  23. t=subprocess.Popen(args,shell=True,stdout=subprocess.PIPE).communicate()[0]
  24.  
  25. disks=[]
  26.  
  27. for disk in t.split('\n'):
  28.     if len(disk) != 0:
  29.        disks.append({'{#DISK_NAME}':disk})
  30. print json.dumps({'data':disks},indent=4,separators=(',',':'))
  31. ---------------------------------------------------------------------------------------------------------------
  32. vim disk_status.sh
  33. #/bin/sh
  34. device=$1
  35. DISK=$2
  36. case $DISK in
  37.          read.ops)
  38.             /bin/cat /proc/diskstats | grep "\b$device\b" | head -1 | awk '{print $4}'    #//磁盘读的次数
  39.             ;;
  40.          read.ms)
  41.             /bin/cat /proc/diskstats | grep "\b$device\b" | head -1 | awk '{print $7}'    #//磁盘读的毫秒数
  42.             ;;
  43.          write.ops)
  44.             /bin/cat /proc/diskstats | grep "\b$device\b" | head -1 | awk '{print $8}'     #//磁盘写的次数
  45.             ;;
  46.          write.ms)
  47.             /bin/cat /proc/diskstats | grep "\b$device\b" | head -1 | awk '{print $11}'    #//磁盘写的毫秒数
  48.             ;;
  49.          io.active)
  50.             /bin/cat /proc/diskstats | grep "\b$device\b" | head -1 | awk '{print $12}'    #//I/O的当前进度,
  51.             ;;
  52.          read.sectors)
  53.             /bin/cat /proc/diskstats | grep "\b$device\b" | head -1 | awk '{print $6}'      #//读扇区的次数(一个扇区的等于512B)
  54.             ;;
  55.          write.sectors)
  56.             /bin/cat /proc/diskstats | grep "\b$device\b" | head -1 | awk '{print $10}'     #//写扇区的次数(一个扇区的等于512B)
  57.             ;;
  58.          io.ms)
  59.             /bin/cat /proc/diskstats | grep "\b$device\b" | head -1 | awk '{print $13}'      #//花费在IO操作上的毫秒数
  60.             ;;
  61.     
  62. esac
  63. ---------------------------------------------------------------------------------------------------------------
  64. 配置zabbix客户端
  65. UserParameter=disk.discovery,/usr/bin/python /opt/appl/zabbix/etc/shells/disk_discovery.py
  66. UserParameter=disk.status[*],/opt/appl/zabbix/etc/shells/disk_status.sh $1 $2
  67. 测试结果:
  68. zabbix_get -s 172.16.8.210 -k "disk.status[sda,ops]"
  69. 监控key值
  70. disk.status[{#DISK_NAME},read.ops]
  71. disk.status[{#DISK_NAME},read.ms]
  72. disk.status[{#DISK_NAME},write.ops]
  73. disk.status[{#DISK_NAME},write.ms]
  74. disk.status[{#DISK_NAME},io.active]
  75. disk.status[{#DISK_NAME},io.ms]
  76. disk.status[{#DISK_NAME},read.sectors]
  77. disk.status[{#DISK_NAME},write.sectors]
  78. 首先添加模板 ,然后在模板上添加监控项目
  79. 名称: {#DISK_NAME}磁盘读的次数
  80. 键值: disk.status[{#DISK_NAME},read.ops]
  81. 单位: ops/second
  82. 储存值:差量(每秒速率)
  83. 名称: {#DISK_NAME}磁盘写的次数
  84. 键值: disk.status[{#DISK_NAME},write.ops]
  85. 单位: ops/second
  86. 储存值:差量(每秒速率)
  87. 名称: {#DISK_NAME}磁盘读的毫秒数
  88. 键值: disk.status[{#DISK_NAME},read.ms]
  89. 单位: ms
  90. 储存值:差量(每秒速率)
  91. 名称: {#DISK_NAME}磁盘写的毫秒数
  92. 键值: disk.status[{#DISK_NAME},write.ms]
  93. 单位: ms
  94. 储存值:差量(每秒速率)
  95. 名称: {#DISK_NAME}读扇区的次数
  96. 键值:  disk.status[{#DISK_NAME},read.sectors]
  97. 单位:  B/sec
  98. 使用自定义倍数: 512
  99. 储存值:差量(每秒速率)
  100. 名称: {#DISK_NAME}写扇区的次数
  101. 键值:  disk.status[{#DISK_NAME},write.sectors]
  102. 单位:  B/sec
  103. 使用自定义倍数: 512
  104. 储存值:差量(每秒速率)


声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/161267
推荐阅读
相关标签
  

闽ICP备14008679号