由于最近项目上需要对服务器监控进行规范化监控,再磁盘这块有几种方式

1.如果每台设备的磁盘是一样的 比如都有vda,vdb两块磁盘那么可以采用

  1.1 每台客户端写脚本,服务端每台设备去加上监控项(------最次的手段-------------)

  1.2 客户端批量部署脚本,服务端直接把监控项部署到模板里面去。这样所有使用了模板的设备都可以加上这个监控项目了  但是必须注意,这样必须是所有设备磁盘都一样的情况

2.如果每台设备的磁盘数目不一样,就只能采用客户端定义脚本,服务端单独针对每台设备添加独特的监控项

3.利用python 脚本添加(平庸选择)

4.上面的方法都是不是那么智能化,其实zabbix为我们提供了一个自动发现规则(注意 不是设备的自动发现 ),再模板的下方自动发现规则:就是下图这个东西

他能实现什么功能呢? 他提供一套发现与处理机制!!!!那么真多磁盘呢?他可以实现自动发现主机上面的磁盘,并且为每个磁盘加上监控项目,后续还可以自动为每个监控加图形,告警等等 后话了。 那么怎么实现呢?就是zabbix提供的机制 +++ 个人的脚本 以下慢慢道来!!

一:为了实现我们的功能,我们第一步就是实现磁盘发现,也就是自动发现我们设备上又那么些磁盘(注意以下的操作都是以模板为单位的)

找到这个自动发现规则,点击右边的创建自动发现规则如下:

我们的名字可以随便起,这里类型我们是zabbix客户端 键值是什么呢?就是给后台传递的参数:完成的功能就是发现主机,这里得到的结果是个json格式的字符串。好了既然把这个参数io.scandisk传递到客户端了,那么我们的客户端怎么配置,完成什么功能呢?

我们直接看zabbix-agent的配置文件

这里面scandisk就是对应页面配置的关键字 [*]里面就是传递的参数,由于页面没有传递,那么这里就没有,后面的$1企业也没用(保留是因为大家都这么写。。。具体为啥我也不清楚)如果需要传递参数我们可以这么写

页面io.scandisk[1,2] 那么这里的1就是客户端配置文件里面的$1了,同理2就是$2了.

好了,我们看到客户端得到这个键后会执行一个python脚本,python脚本内容如下:

import subprocess
import json
args="cat /proc/diskstats|awk '{print $3}'|grep -E '^[a-z]+$'|sort|uniq 2>/dev/null"
t=subprocess.Popen(args,shell=True,stdout=subprocess.PIPE).communicate()[0]
disks=[]
for disk in t.split('\n'):if len(disk) != 0:disks.append({'{#DISK_NAME}':disk})
print json.dumps({'data':disks},indent=4,separators=(',',':'))

  我们执行下脚本得到结果如下:

和上文我们提到的一样返回的是一个json字符串!

每台设备不一样。得到的结果也不一样,获取的是本机上的物理磁盘的名称

好了,既然已经获取到了磁盘的名字,我们接下来就会对每个磁盘的性能进行监控了,监控肯定也是在客户端实现。首先我们把需要的内容输出到一个文件里面

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

然后再配置文件里面田间配置

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

这里面我们可以看到每行都有一个$1 那么这个$1是怎么来的呢?其实他就是代表磁盘的名字 所以我们页面就需要配置监控项,把参数(磁盘满传递过来)

我们回到页面继续配置

点击创建监控项原型以io.avgqu-sz为例

名字随便取最好加上$1这里的$1其实就是键值里面的io.avgqu-sz[{#DISK_NAME}]里面的#DISK_NAME 我们前面用自动发现不是发现了自己的磁盘么? 比如sdb和sda,zabbix会把这两个磁盘循环传递到这里来作为DISK_NAME,那么你一定也想到了。客户端里面的$1其实也是这个参数咯  ------------至于怎么实现,只有看源码咯。。不必纠结  应用集我们新建一个DISK。然后点击更新完成

至此我们只需等待然后到页面去看数据就可以了。就完成了磁盘的自动发现以及指定项的监控。。后面的图形,如果你理解了这里就是小菜一碟了。


我们重新再来理一遍   服务端配置 自动发现规则发现磁盘------>客户端修改配置文件以及自定义脚本实现(返回json的格式)

服务端找到磁盘以后对把每个磁盘的名称作为参数传递给监控项,监控项根据客户端的配置文件以及脚本实现对应的数据返回。

另外需要注意的是 在监控项里面 有 print $$4 这种写法。 需要注意的是 因为在zabbix里面$1..$N 其实是关键字代表的是前端传递过来的参数,所以自己的$1需要在前面加上一个$也是就$$1来区别!!!这个东西当时也是疑惑了很久

 

转载于:https://www.cnblogs.com/ZFBG/p/10194768.html

zabbix磁盘的自动发现与磁盘指标监控相关推荐

  1. zabbix使用宏自动发现网卡并实现监控(入职小灰)

    zabbix使用宏自动发现网卡并实现监控 在创建完监控postgresql数据库后,本来就莫名其妙多出来几百个监控项,想着今天怎么优化一下.没想到,正在分析图形的时候,又发现了一些繁琐的事情. 当场就 ...

  2. zabbix 4.0 自动发现windows磁盘,并监控磁盘使用率和磁盘剩余容量

    1.创建磁盘自动发现规则,通过zabbix内置的键vfs.fs.discovery 2.过滤掉不需要的磁盘(可在zabbix服务端通过zabbix_get 命令获取vfs.fs.discovery的值 ...

  3. zabbix 监控使用宏自动发现网卡并进行监控

    一.自动发现网卡并进行监控 首先新建一个模板 1.探索规则名称为Network interface discovery 键值为net.if.discovery 2.filter处要把宏给添加上{#IF ...

  4. ZABBIX自动发现Redis端口并监控

    转载来源 :ZABBIX自动发现Redis端口并监控 : https://mp.weixin.qq.com/s/UDeRYn6376MBzNyRt48aAw ZABBIX自动发现Redis端口并监控 ...

  5. Zabbix使用LLD自动发现规则发现监控docker容器(下)

    本篇是使用Zabbix监控docker容器下篇.利用ZABBIX自动发现监控功能,在部署zabbix agent客户端的服务器上,编写自定义功能脚本,实现自动获取服务器上运行的docker服务并监控其 ...

  6. zabbix自动发现redis端口并监控redis性能

    不得不说,我在监控redis 这里卡了有一天半的时间,zabbix_get也可以获取到数据,就是没有自动生成监控项和监控图像,后来干脆把别人的模板抛弃,自己重新建立模板和监控项,就都出来了.真是无语的 ...

  7. ansible一键部署zabbix并配置自动发现

    环境centos7 IP 192.168.81.132 首先安装epel源和ansible配置主机清单 配置免密登录 测试能否ping通 安装zabbix-server端和上传Aliyun的yum源和 ...

  8. zabbix的snmp自动发现

    一.创建snmp自动发现规则 SNMP OID以"discovery[{#自动发现宏},oid,{#自动发现宏},oid-]"的格式,可以设置多个宏值方便监控项的添加以逗号隔开 二 ...

  9. Linux监听请求到达时间,4: zabbix5.0自动发现网站域名并监控访问状态和请求时间...

    监控域名脚本 [[email protected] shell]# cat erp_url.sh #!/bin/bash # function:monitor tcp connect status f ...

最新文章

  1. 沙龙预告 | 新书分享《崛起的超级智能:互联网大脑如何影响科技未来》
  2. python哪一版好用-Python 可视化工具库哪款最好用?哪款最不好用?
  3. C++ unique and erase问题处理
  4. 一篇文章教会你使用html+css3制作GIF图
  5. part-time job
  6. 使用基于微服务的流架构更好地进行大规模的复杂事件处理(第1部分)
  7. 09-03-06 FreeEIM 姗姗来迟
  8. C#窗体控件-列表框控件ListBox
  9. 240章节!“Python|爬虫|数据分析|机器学习|深度学习”中文版路线图视频(附链接)!...
  10. 类的虚函数表和虚函数在内存中的位置
  11. 【Hack The Box】windows练习-- Conceal
  12. 数学建模经验分享及比赛时间汇总
  13. Autodesk 3ds Max 2011 / 3ds Max Design 2011)简体中文版 32位+64位
  14. visio如何使箭头指向插图的任意一处
  15. mysql数据库的实例_MySQL数据库实例-解释汇总
  16. NAC(网络准入控制)实施案例(20100531)
  17. 程序员转行都去干嘛了?产品经理很正常,这位卖烧饼的也太强了
  18. 《Windows 程序设计(第3版)》——6.7 【实例】窗口查看器
  19. 群发邮件如何让收件人互相不知道?群发邮件怎么发很多人
  20. 域名如何绑定到服务器ip

热门文章

  1. NOIP模拟测试16「Drink·blue·weed」
  2. 【BZOJ1069】【SCOI2007】—最大土地面积(凸包+旋转卡壳)
  3. WebDriver API元素的定位
  4. 【ASP.NET Web API教程】5.4 ASP.NET Web API批处理器
  5. Sublime text 2下alignment插件无效的解决办法
  6. 随机森林原理_机器学习(29):随机森林调参实战(信用卡欺诈预测)
  7. matplotlib color可选
  8. aac fhg lc哪一个模式_旅游没电别发愁,一个充电头,助你游遍全球
  9. 启动rocketmq 报错_RocketMQ为什么要保证订阅关系的一致性?
  10. matlab无法读取xls