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

1、使用iostat命令监控

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

#!/bin/bash

if [ $# -ne  ];then
echo "Follow the script name with an argument"
fi case $ in rrqm)
iostat -dxk |grep -w vda |tail - |awk '{print $2}'
;; wrqm)
iostat -dxk |grep -w vda |tail - |awk '{print $3}'
;; rps)
iostat -dxk |grep -w vda |tail - |awk '{print $4}'
;; wps)
iostat -dxk |grep -w vda |tail - |awk '{print $5}'
;; rKBps)
iostat -dxk |grep -w vda |tail - |awk '{print $6}'
;; wKBps)
iostat -dxk |grep -w vda |tail - |awk '{print $7}'
;; avgrq-sz)
iostat -dxk |grep -w vda | tail - |awk '{print $8}'
;; avgqu-sz)
iostat -dxk |grep -w vda |tail - |awk '{print $9}'
;; await)
iostat -dxk |grep -w vda|tail - |awk '{print $10}'
;; svctm)
iostat -dxk |grep -w vda |tail - |awk '{print $13}'
;; util)
iostat -dxk |grep -w vda |tail - |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: //
#Author:zhangjie
disk_read(){
NUM=`/usr/bin/sudo iotop -b -n -d | 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 -d | 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 $ in
disk_read)
disk_read;
;;
disk_write)
disk_write;
;;
esac
}
main $

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

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

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

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

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

[root@ELK-chaofeng zabbix_agentd.d]# zabbix_get -s 127.0.0.1 -p  -k io_check['wKBps']
40.00
[root@ELK-chaofeng zabbix_agentd.d]# zabbix_get -s 127.0.0.1 -p -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次以上的数据。

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

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

再来看看时间间隔:

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

zabbix监控磁盘IO的更多相关文章

  1. Zabbix 监控磁盘IO

    Zabbix 监控磁盘IO 1.数据获取脚本 #!/bin/bash # resource: http://www.muck.net/19/getting-hard-disk-performance- ...

  2. Zabbix监控磁盘IO值

    iostat取硬盘IO值. iostat -x 3 2 | grep vdb | sed -n '2p' | awk '{print $14}' 每3s取一次值,输出第二次vdb硬盘的负载值. 添加Z ...

  3. zabbix应用之Low-level discovery监控磁盘IO

    参考文章: http://qicheng0211.blog.51cto.com/3958621/1599776/ zabbix自带的"Template OS Linux"模板支持监 ...

  4. Zabbix自动发现并监控磁盘IO、报警

    本文转载自: https://www.93bok.com 引言 Zabbix并没有提供模板来监控磁盘的IO性能,所以我们需要自己来创建一个,由于一台服务器中磁盘众多,如果只有一两台可以手动添加,但服务 ...

  5. Zabbix 自动发现并监控磁盘IO、报警 引言

    引言 Zabbix并没有提供模板来监控磁盘的IO性能,所以我们需要自己来创建一个,由于一台服务器中磁盘众多,如果只有一两台可以手动添加,但服务集群达到几十那就非常麻烦,因此需要利用自动发现这个功能,自 ...

  6. Cacti:添加监控磁盘IO

    来自:http://blog.sina.com.cn/s/blog_61c07ac50101gkzp.html 1.检查net-snmp是否支持IO监控 snmpwalk -v 1 -c public ...

  7. Cacti添加IO模板并监控磁盘IO

    1.下载Cacti_Net-SNMP_DevIO_v3.1.zip 下载Cacti_Net-SNMP_DevIO_v3.1.zip,解压并上传net-snmp_devio.xml到/resource/ ...

  8. 第七章——DMVs和DMFs(4)——用DMV和DMF监控磁盘IO

    原文:第七章--DMVs和DMFs(4)--用DMV和DMF监控磁盘IO 前言: 本文为本系列最后一篇,作为DBA,你必须经常关注磁盘的I/O问题,一旦出现问题,要尽快分析出是什么问题.SQLServ ...

  9. Zabbix3.x 监控磁盘IO与自定义模板

    引言 Zabbix自带的模板,帮助我们完成了一些比较常用的监控.但如果想要监控磁盘的IO,zabbix并没有给我们提供这么一个模板,所以我们需要自己来创建一个模板来完成磁盘IO的监控. 操作步骤 1. ...

随机推荐

  1. Python之列表推导式

    我们经常需要这样处理一个列表:把一个列表里面的每个元素, 经过相同的处理 ,生成另一个列表. 比如:一个列表1,里面都是数字,我们需要生成一个新的列表B,依次存放列表A中每个元素的平方 怎么办? 当然 ...

  2. salesforce lightning零基础学习(十) Aura Js 浅谈三: $A、Action、Util篇

    前两篇分别介绍了Component类以及Event类,此篇将会说一下 $A , Action以及 Util.  一. Action Action类通常用于和apex后台交互,设置参数,调用后台以及对结 ...

  3. 从零开始学 Web 之 JavaScript(二)变量

    大家好,这里是「 Daotin的梦呓 」从零开始学 Web 系列教程.此文首发于「 Daotin的梦呓 」公众号,欢迎大家订阅关注.在这里我会从 Web 前端零基础开始,一步步学习 Web 相关的知识 ...

  4. MongoDB使用优化

    一.监控 mongodb可以通过profile来监控数据,进行优化. 查看当前是否开启profile功能用命令:db.getProfilingLevel()返回level等级,值为0|1|2,分别代表 ...

  5. 记录前台页面一些jQuery笔记

    不知不觉工作两个月了,在这两个月,我成长很快学的很多,刚开始的时候,很多问题不懂,很多技术不会,当然作为实习阶段,很多不会的问题我都会去请教别人,在这里得感谢那些帮助我的人,但是经常去问别人问题,首先 ...

  6. Java并发编程笔记之CyclicBarrier源码分析

    JUC 中 回环屏障 CyclicBarrier 的使用与分析,它也可以实现像 CountDownLatch 一样让一组线程全部到达一个状态后再全部同时执行,但是 CyclicBarrier 可以被复 ...

  7. JavaScript字符串常用方法

    toUpperCase():把一个字符串全部变为大写 toLowerCase():把一个字符串全部变为小写 indexOf():会搜索制定字符串出现的位置,有返回索引,没有返回-1 substring ...

  8. 数据库内连接GROUP BY查询外键表数据行的总数

    最近看了看SQL,刚好遇到这个问题. INNER JOIN [外键表] ON [主键表] 内链接,用 GROUP BY 分组外键数据,COUNT(*)计算该外键数据总行数,最后用 ORDER BY 排 ...

  9. jQuery 小特效【文本框折叠隐藏,展开显示】【下拉菜单】【颜色渐变】【弹窗+遮罩】

    <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs& ...

  10. 【IDEA&&Eclipse】5、IntelliJ IDEA常见配置

    [idea配置jdk] http://blog.csdn.net/tolcf/article/details/50803414 [idea intellij 如何配置tomcat]http://jin ...