zabbix实现对磁盘动态监控

前言

zabbix一直是小规模互联网公司服务器性能监控首选,首先是免费,其次,有专门的公司和社区开发维护,使其稳定性和功能都在不断地增强和完善。zabbix拥有详细的UI界面和分组策略,在被监控的服务器上安装好agent后,无需添加任何监控选项,因为zabbix自带一些必要的监控,如agent.ping之类,zabbix支持画图,这个是专门给boss们看的,极其重要。另外还支持用户自定义监控选项,这一点非常方便,今天我要说的就是磁盘监控,标题中为动态的监控,意指智能的识别磁盘个数,并生成相应的监控选项,因为每台服务器的磁盘可能不一样,所以我是使用zabbix的discovery方式。

个人认为其UI界面是比较复杂的,但是毕竟越复杂越显得高端。我常用的不算configure和administration标签下所有的选项(这是必不可少的),也就graphs和screen,这两个选项是在monitor标签下的,也是BOSS们最关注的。

自动寻找磁盘

说到底,所有的自动判断都是人为的设置好所有的可能性,然后根据实际情况从中选择,方法有很多,看大家具体要求。在这里,我要对磁盘监控,首先要找出有哪些磁盘,这里使用shell脚本实现。由于zabbix的discovery需要固定的格式,具体可以参考这里,最下面部分。

脚本如下:

 1 #!/bin/bash
2 #written by lenwood
3 #mail:ccyhaoran@live.cn
4 diskarray=(`cat /proc/diskstats |grep -E "\bsd[abcdefg]\b|\bxvd[abcdefg]\b"|grep -i "\b$1\b"|awk '{print $3}'|sort|uniq 2>/dev/null`)
5 length=${#diskarray[@]}
6 printf "{\n"
7 printf '\t'"\"data\":["
8 for ((i=0;i<$length;i++))
9 do
10 printf '\n\t\t{'
11 printf "\"{#DISK_NAME}\":\"${diskarray[$i]}\"}"
12 if [ $i -lt $[$length-1] ];then
13 printf ','
14 fi
15 done
16 printf "\n\t]\n"
17 printf "}\n"

如上,这里通过读取/proc/diskstats,选择其中的磁盘,根据实际情况,我这里就找出类似sda或者xvda的,因为我们用的是sata接口的硬盘以及部分阿里云的服务器。

脚本执行出来的结果类似如下

1 {
2 "data":[
3 {"{#DISK_NAME}":"sda"}
4 {"{#DISK_NAME}":"sdb"}
5 ]
6 }

然后使用zabbix执行这个脚本,那么就要将其写到zabbix_agentd.conf中去,如下

UserParameter=io.scandisk[*],/infra/zabbix/os/disk_scan.sh $1

iostat命令

对于磁盘的监控我采用iostat命令,因为它能给出磁盘的详细信息,如扇区读写情况,io队列长度,iowait,svctime等等。

命令如下:

1 nohup iostat -m -x -d 30 >/tmp/iostat_output &

通过tail -f /tmp/iostat_output,可获得iostat命令收集的磁盘信息,结果类似下面

Device:         rrqm/s   wrqm/s   r/s   w/s    rMB/s    wMB/s avgrq-sz avgqu-sz   await  svctm  %util
hda 0.00 0.20 0.00 7.43 0.00 0.16 43.28 0.23 30.80 2.43 1.81
hda1 0.00 0.20 0.00 7.43 0.00 0.16 43.28 0.23 30.80 2.43 1.81
hda2 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
xvdb 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
xvdb1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
hdc 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00

其中部分参数的详细解释如下

rrqm/s:   每秒进行 merge 的读操作数目。即 delta(rmerge)/s
wrqm/s: 每秒进行 merge 的写操作数目。即 delta(wmerge)/s
r/s: 每秒完成的读 I/O 设备次数。即 delta(rio)/s
w/s: 每秒完成的写 I/O 设备次数。即 delta(wio)/s
rsec/s: 每秒读扇区数。即 delta(rsect)/s
wsec/s: 每秒写扇区数。即 delta(wsect)/s
rkB/s: 每秒读K字节数。是 rsect/s 的一半,因为每扇区大小为512字节。(需要计算)
wkB/s: 每秒写K字节数。是 wsect/s 的一半。(需要计算)
avgrq-sz: 平均每次设备I/O操作的数据大小 (扇区)。delta(rsect+wsect)/delta(rio+wio)
avgqu-sz: 平均I/O队列长度。即 delta(aveq)/s/1000 (因为aveq的单位为毫秒)。
await: 平均每次设备I/O操作的等待时间 (毫秒)。即 delta(ruse+wuse)/delta(rio+wio)
svctm: 平均每次设备I/O操作的服务时间 (毫秒)。即 delta(use)/delta(rio+wio)
%util: 一秒中有百分之多少的时间用于 I/O 操作,或者说一秒中有多少时间 I/O 队列是非空的。即 delta(use)/s/1000 (因为use的单位为毫秒)

结合zabbix

最开始已经说了,是结合zabbix的discovery功能,所以要对zabbix做出如下设置。

(1)新建discovery规则

(2)新建好discovery rule之后,就可以开始写item prototypes了,下面是一个例子avgqu-sz(平均I/O队列长度)。

在建立好item之后,zabbix_agentd.conf中也要写上相应的UserParameters,如下。

 1 UserParameter=io.scandisk[*],/infra/zabbix/os/disk_scan.sh $1
2 UserParameter=io.rps[*],/usr/bin/tail /tmp/iostat_output |grep "\b$1\b"|tail -1|awk '{print $$4}'
3 UserParameter=io.wps[*],/usr/bin/tail /tmp/iostat_output |grep "\b$1\b" |tail -1|awk '{print $$5}'
4 UserParameter=io.rMBps[*],/usr/bin/tail /tmp/iostat_output |grep "\b$1\b" |tail -1|awk '{print $$6}'
5 UserParameter=io.wMBps[*],/usr/bin/tail /tmp/iostat_output |grep "\b$1\b" |tail -1|awk '{print $$7}'
6 UserParameter=io.avgrq-sz[*],/usr/bin/tail /tmp/iostat_output |grep "\b$1\b" |tail -1|awk '{print $$8}'
7 UserParameter=io.avgqu-sz[*],/usr/bin/tail /tmp/iostat_output |grep "\b$1\b" |tail -1|awk '{print $$9}'
8 UserParameter=io.await[*],/usr/bin/tail /tmp/iostat_output |grep "\b$1\b" |tail -1|awk '{print $$10}'
9 UserParameter=io.svctm[*],/usr/bin/tail /tmp/iostat_output |grep "\b$1\b" |tail -1|awk '{print $$11}'
10 UserParameter=io.util[*],/usr/bin/tail /tmp/iostat_output |grep "\b$1\b" |tail -1|awk '{print $$12}'

以上,监控的部分实际就已经完成。不过还要画图,也就是新建graph prototype了,如下图。

最后,看一下劳动成功,这样就实现了zabbix自动判断服务器上的磁盘个数,然后自动部署对应磁盘的监控并生成图表。

-------------------------------------------------------------------------------------------------------------------------------------------------
以上都为原创文章,转载请注明出处。
我以前叫ccyhaoran,现在叫Lenwood,以下是我的联系方式。

QQ:12412149weibo:http://www.weibo.com/ccyhaoran有问题可以联系我,欢迎交流技术。

 

By:ccyhaoran && Lenwood

 
分类: Linux

zabbix实现对磁盘动态监控的更多相关文章

  1. Zabbix - 实现对磁盘动态监控

        回到目录 前言 zabbix一直是小规模互联网公司服务器性能监控首选,首先是免费,其次,有专门的公司和社区开发维护,使其稳定性和功能都在不断地增强和完善.zabbix拥有详细的UI界面和分组策 ...

  2. zabbix实现对磁盘性能动态监控

    前言 zabbix一直是小规模互联网公司服务器性能监控首选,首先是免费,其次,有专门的公司和社区开发维护,使其稳定性和功能都在不断地增强和完善.zabbix拥有详细的UI界面和分组策略,在被监控的服务 ...

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

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

  4. zabbix使用iostat命令参数监控磁盘性能

    iostat命令 先说一个坑把,在开始监控的时候使用命令iostat -dtkx,得到的结果看上去没问题,但是在web监控窗口数据就说不变动,为啥呢,因为iostat这个命令得到的第一个数据始终是磁盘 ...

  5. zabbix磁盘的自动发现与磁盘指标监控

    由于最近项目上需要对服务器监控进行规范化监控,再磁盘这块有几种方式 1.如果每台设备的磁盘是一样的 比如都有vda,vdb两块磁盘那么可以采用 1.1 每台客户端写脚本,服务端每台设备去加上监控项(- ...

  6. zabbix入门到精通之Zabbix对linux主机的监控

    我们大概了解了怎么对台主机进行监控,主要步骤设计到添加主机,并且为主机添加监控项,这里主要为item,然后在item的基础上对item进行绘图并且通过screen的方式把不同的监控图像汇总到一张scr ...

  7. (82)zabbix如何选择适合的监控类型

    zabbix提供十几种监控类型,包括:Zabbix agent, Simple checks, SNMP, Zabbix internal, IPMI, JMX monitoring等等,那我们应该如 ...

  8. Docker下实战zabbix三部曲之二:监控其他机器

    在上一章<Docker下实战zabbix三部曲之一:极速体验>中,我们快速安装了zabbix server,并登录管理页面查看了zabbix server所在机器的监控信息,但是在实际场景 ...

  9. Docker下实战zabbix三部曲之三:自定义监控项

    通过上一章<Docker下实战zabbix三部曲之二:监控其他机器>的实战,我们了解了对机器的监控是通过在机器上安装zabbix agent来完成的,zabbix agent连接上zabb ...

随机推荐

  1. 浅谈 IE下innerHTML导致的问题

    原文:浅谈 IE下innerHTML导致的问题 先来看个demo吧: <!DOCTYPE html> <html> <head> <meta charset= ...

  2. 【转】height,posHeight和pixelHeight区别

    height 返回高度    带单位 posHeight    不带单位的数字 pixelHeight 转换成像素后的数字    不带单位 更多资料 http://www.1fan.com.cn

  3. BEGINNING SHAREPOINT&#174; 2013 DEVELOPMENT 文件夹

    BEGINNING SHAREPOINT® 2013 DEVELOPMENT 文件夹 第一部分--開始使用SharePoint 2013 第1章节--SharePoint 2013 介绍 逐渐了解Sh ...

  4. JS子元素oumouseover触发父元素onmouseout

    原文:JS子元素oumouseover触发父元素onmouseout JavaScript中,父元素包含子元素: 当父级设置onmouseover及onmouseout时,鼠标从父级移入子级,则触发父 ...

  5. 一个简单的dom查询函数

    var regid = /^#([\w-]*)$/, regClass = /^\.([\w-]*)$/, regName = /^(div|a|p|ul|li|input|select|docume ...

  6. Javascript操作阵列

    头操作unshift和shift var arr = [1, 2, 3]; arr.unshift(4); // arr = [4, 1, 2, 3]; 头加 arr.shift(); // arr ...

  7. ExtJS4 自己定义基于配置的高级查询1

    今天在编码过程中遇到一个问题,临时还没解决,先记录下来 上面是我做的高级查询面板..字段名和值都是读取配置文件,依据用户选择不同的字段名,自己主动载入不同的值列表,关系是与或 问题来了,我在字段名那个 ...

  8. 定制openwrt的根文件

    都在package文件夹之中 1 ssh登陆欢迎文字,在package/base-files/files/etc/banner中 2 路由器的默认机器名字,在package/base-files/fi ...

  9. IntelliJ IDEA 发布13版本——创造java奇迹

    IntelliJ IDEA被公认为业界最好的Java开发平台.此次发布的了13版本,更是集合了与Java EE.Android.Spring.Scala和Gradle最新合作与支持. Java EE  ...

  10. Mysql插入内容过长(Packet for query is too large)

    原文:Mysql插入内容过长(Packet for query is too large) 这个以前一直没有碰到过,一次性向Mysql数据库插入内容过长的话会出现这个问题,解决办法就是在Mysql配置 ...