jmton 发表于 2019-1-26 07:18:23

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

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


[*]  编写发现磁盘的脚步
  shell版本disk_discovery.sh
#!/bin/bash
diskarray=(`cat /proc/diskstats |grep -E "\bsd\b|\bxvd\b|\bvd\b"|awk '{print $3}'|sort|uniq   2>/dev/null`)
length=${#diskarray[@]}
printf "{\n"
printf'\t'"\"data\":["
for ((i=0;i /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=,
#       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"10.00  5.添加磁盘监控模板
http://s3.运维网.com/wyfs02/M02/47/E3/wKiom1QC1yPz4zGoAAIKGBzxXQw933.jpg
http://s3.运维网.com/wyfs02/M00/47/E3/wKiom1QC1yrx4HSiAAWwM0LnIn8426.jpg
http://s3.运维网.com/wyfs02/M02/47/E5/wKioL1QC2EehTZuyAAI5***gslI105.jpg
http://s3.运维网.com/wyfs02/M01/47/E3/wKiom1QC1zKRuDKmAAIl10bx0_E379.jpg
http://s3.运维网.com/wyfs02/M00/47/E5/wKioL1QC2E3SkZciAAH1tSewO2A850.jpg
http://s3.运维网.com/wyfs02/M02/47/E3/wKiom1QC1ziw8ksqAAOBUx0kn6g097.jpg
http://s3.运维网.com/wyfs02/M01/47/E5/wKioL1QC2FSgHatUAAPOQGGfnm4043.jpg
  

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

  

  




页: [1]
查看完整版本: 利用zabbix动态监控磁盘I/O