zoukankan      html  css  js  c++  java
  • zabbix监控磁盘IO

    我这里有两种方法,感觉都不错。我这里主要是写一下监控的脚本。

    1、使用iostat命令监控

    1)首先打开配置文件的自定义脚本功能,然后编写脚本。

    #!/bin/bash
    
    if [ $# -ne 1 ];then
        echo "Follow the script name with an argument"
    fi
    
    case $1 in
    
        rrqm)
            iostat -dxk 1 2|grep -w vda |tail -1 |awk '{print $2}'
            ;;
    
        wrqm)
            iostat -dxk 1 2|grep -w vda |tail -1 |awk '{print $3}'
            ;;
    
        rps)
            iostat -dxk 1 2|grep -w vda |tail -1 |awk '{print $4}'
            ;;
    
        wps)
            iostat -dxk 1 2|grep -w vda |tail -1 |awk '{print $5}'
            ;;
    
        rKBps)
            iostat -dxk 1 2|grep -w vda |tail -1 |awk '{print $6}'
            ;;
    
        wKBps)
            iostat -dxk 1 2|grep -w vda |tail -1 |awk '{print $7}'
            ;;
    
        avgrq-sz)
            iostat -dxk 1 2|grep -w vda | tail -1  |awk '{print $8}'
            ;;
    
        avgqu-sz)
            iostat -dxk 1 2|grep -w vda |tail -1  |awk '{print $9}'
            ;;
    
        await)
            iostat -dxk 1 2|grep -w vda|tail -1 |awk '{print $10}'
            ;;
    
        svctm)
            iostat -dxk 1 2|grep -w vda |tail -1 |awk '{print $13}'
            ;;
    
        util)
            iostat -dxk 1 2|grep -w vda |tail -1 |awk '{print $14}'
            ;;
    
        *)
            echo -e "e[033mUsage: sh $0 [rrqm|wrqm|rps|wps|rKBps|wKBps|avgqu-sz|avgrq-sz|await|svctm|util]e[0m"
    esac

    2)添加至agent的脚本路径里面。

     

    完成之后就可以在zabbix里面添加items了

    2、第二种方法,

    第二种是使用iotop命令来获取数据

    #!/bin/bash
    #Date: 2016/11/11
    #Author:zhangjie
    disk_read(){
      NUM=`/usr/bin/sudo iotop -b -n 3 -d 1| grep "Total DISK READ" | grep -v grep | awk  -F "|" '{print $1}' | awk -F ":" '{print $2}' |  tail -n1 | awk -F "/" '{print $1}'`
      NUM2=`echo $NUM | awk '{print $1}'`
      UNIT=`echo $NUM | awk '{print $2}'`
      if [ $UNIT == "B" ];then
        echo $NUM2
      elif [ $UNIT == "K" ];then
        NUM3=$(echo "$NUM2 * 1024" | bc)
        echo $NUM3
      elif [ $UNIT == "M" ];then
        NUM3=$(echo "$NUM2 * 1024 * 1024" | bc)
        echo $NUM3
      elif [ $UNIT == "G" ];then
        NUM3=$(echo "$NUM2 * 1024 * 1024 * 1024" | bc)
        echo $NUM3
      fi
    }
    disk_write(){
      NUM=`/usr/bin/sudo iotop -b -n 3 -d 1 | grep "Total DISK WRITE :" |  grep -v grep | awk  -F "|" '{print $2}' | awk -F ":" '{print $2}' | tail -n1 | awk -F "/" '{print $1}'`
      NUM2=`echo $NUM | awk '{print $1}'`
      UNIT=`echo $NUM | awk '{print $2}'`
      if [[ $UNIT == "B" ]];then
        echo $NUM2
      elif [[ $UNIT == "K" ]];then
        NUM3=$(echo "$NUM2 * 1024" | bc)
        echo $NUM3
      elif [[ $UNIT == "M" ]];then
        NUM3=$(echo "$NUM2 * 1024 * 1024" | bc)
        echo $NUM3
      elif [[ $UNIT == "G" ]];then
        NUM3=$(echo "$NUM2 * 1024 * 1024 * 1024" | bc)
        echo $NUM3
      fi
    }
    
    main(){
        case $1 in
            disk_read)
               disk_read;
               ;;
            disk_write)
                disk_write;
                ;;
        esac
    }
    main $1

    编写完脚本以后,我们还需要再做一件事情,修改sudoers文件

    把这个添加注释,去掉此功能。

    完成之后就可以进行监控了。

    上面是两个脚本,选择任意一个都是可以的,接下来就是按照下面的步骤添加items,可能稍有出入,需酌情修改。

    3、接下来开始进行测试:在server端使用zabbix_get命令测试脚本是否正确:

    [root@ELK-chaofeng zabbix_agentd.d]# zabbix_get -s 127.0.0.1 -p 10050 -k io_check['wKBps']
    40.00
    [root@ELK-chaofeng zabbix_agentd.d]# zabbix_get -s 127.0.0.1 -p 10050 -k IO_check['disk_write']
    87.00

    3、看的出来没有什么问题,那么此时我们在zabbix的监控界面进行添加。

     

    4、添加item

     

    5、填写内容即可

     

    填写完之后点击update”保存

    6、添加graph

     

    还是在这个界面点击“graph”

    7、添加graph

     

    8、填写内容

     

    添加成功后我们就可以查看了。

     9、最后我们看看效果(我这里以上面的第二个脚本为例)

    可以看到没有什么问题。

    疑难总结:之前的脚本中,出来的图像是断断续续的,感觉挺是奇怪的。感觉像是时间间隔采集数据的问题。

    就是出现上面的这种情况。items里面的监控项是没有问题,显示是正常的。

     

    然后我换一种方式查看,发现确实read上有很长一段时间没有数据出现。感觉很不对劲。

    后来在脚本中的iotop命令中,将iotop命令后面的参数修改了一下成功了:“iotop -b -n 3 -d 1” ,-d表示多长时间采集一次数据,-n表示采集数据的次数。之前我设置的是0.2秒采集一次数据,现在看来是不合适的。可能这个数值最好与zabbix界面的items里面的“update inteval”保持一致最好,都是1s。

    此外,iotop命令第三次采集的数据是稍微稳定点的。所以最好采集3次以上的数据。

    修改好之后,我们再次来看看效果:

     发现这个时候是正常的了。

    再来看看时间间隔:

    发现时间间隔也是有序的,看来就没有什么毛病了。整个监控搭建成功了。

  • 相关阅读:
    PTA —— 基础编程题目集 —— 函数题 —— 61 简单输出整数 (10 分)
    PTA —— 基础编程题目集 —— 函数题 —— 61 简单输出整数 (10 分)
    练习2.13 不用库函数,写一个高效计算ln N的C函数
    练习2.13 不用库函数,写一个高效计算ln N的C函数
    练习2.13 不用库函数,写一个高效计算ln N的C函数
    迷宫问题 POJ 3984
    UVA 820 Internet Bandwidth (因特网带宽)(最大流)
    UVA 1001 Say Cheese(奶酪里的老鼠)(flod)
    UVA 11105 Semiprime Hnumbers(H半素数)
    UVA 557 Burger(汉堡)(dp+概率)
  • 原文地址:https://www.cnblogs.com/FengGeBlog/p/10369177.html
Copyright © 2011-2022 走看看