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

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. Linux 软件安装到 /usr,/usr/local/ 还是 /opt 目录?

    转自:https://blog.csdn.net/aqxin/article/details/48324377 Linux 的软件安装目录是也是有讲究的,理解这一点,在对系统管理是有益的 /usr:系 ...

  2. 全网最详细的Eclipse里如何正确新建普通的Java web项目并发布到Tomcat上运行成功【博主强烈推荐】(图文详解)

    不多说,直接上干货! 首先,大家要明确,IDEA.Eclipse和MyEclipse等编辑器之间的新建和运行手法是不一样的. 如果是在Myeclipse里,则是File -> new -> ...

  3. MongoDB的aggregate聚合

    聚合框架中常用的几个操作: $project:修改输入文档的结构.可以用来重命名.增加或删除域,也可以用于创建计算结果以及嵌套文档.(显示的列,相当遇sql 的) $match:用于过滤数据,只输出符 ...

  4. 和我一起打造个简单搜索之SpringDataElasticSearch入门

    网上大多通过 java 操作 es 使用的都是 TransportClient,而介绍使用 SpringDataElasticSearch 的文章相对比较少,笔者也是摸索了许久,接下来本文介绍 Spr ...

  5. RIP笔记

    RIP(工作中没见人用过这种古老的协议,了解一下距离矢量的思想即可) RIPv2支持VLSM但不支持CIDR RIP工作在应用层,用UDP封装,端口是520 无论是RIPv1还是RIPv2都既支持周期 ...

  6. unsafe关键字

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.L ...

  7. EF SaveChanges() 报错(转载)

    最佳答案 报这个错是因为,提交了主键重复的数据,虽然未提交到数据库中 但是现在的EF上下文中已经包含了我提交的数据,下次在提交正确数据时, 原来添加到上下文中的数据依然还在..如何处理这个问题呢?   ...

  8. layui 文字滚动

    将消息标题滚动 上面是效果 <li class="layui-nav-item"> <div class="layui-carousel" i ...

  9. Jquery的ID选择器

    <script src="Scripts/jquery-1.4.1.min.js" type="text/javascript"></scri ...

  10. 【RabbitMQ】4、RabbitMQ几种Exchange 模式

    AMQP协议中的核心思想就是生产者和消费者隔离,生产者从不直接将消息发送给队列.生产者通常不知道是否一个消息会被发送到队列中,只是将消息发送到一个交换机.先由Exchange来接收,然后Exchang ...