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

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 -|awk '{print $$4}'
UserParameter=io.wps[*],/usr/bin/tail /tmp/iostat_output |grep "\b$1\b" |tail -|awk '{print $$5}'
UserParameter=io.rMBps[*],/usr/bin/tail /tmp/iostat_output |grep "\b$1\b" |tail -|awk '{print $$6}'
UserParameter=io.wMBps[*],/usr/bin/tail /tmp/iostat_output |grep "\b$1\b" |tail -|awk '{print $$7}'
UserParameter=io.avgrq-sz[*],/usr/bin/tail /tmp/iostat_output |grep "\b$1\b" |tail -|awk '{print $$8}'
UserParameter=io.avgqu-sz[*],/usr/bin/tail /tmp/iostat_output |grep "\b$1\b" |tail -|awk '{print $$9}'
UserParameter=io.await[*],/usr/bin/tail /tmp/iostat_output |grep "\b$1\b" |tail -|awk '{print $$10}'
UserParameter=io.svctm[*],/usr/bin/tail /tmp/iostat_output |grep "\b$1\b" |tail -|awk '{print $$11}'
UserParameter=io.util[*],/usr/bin/tail /tmp/iostat_output |grep "\b$1\b" |tail -|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来区别!!!这个东西当时也是疑惑了很久

 

zabbix磁盘的自动发现与磁盘指标监控的更多相关文章

  1. zabbix模板的自动发现规则(ldd)实现被监控项自动发现

    zabbix模板的自动发现规则(ldd)实现被监控项自动发现 自动发现规则(ldd)用途说明 在zabbix自带的linux模板的自动发现规则中,有一个Mounted filesystem disco ...

  2. zabbix 自动发现端口并添加监控设置

    自动发现端口并添加监控设置UserParameter=net.listen.discovery,sudo /etc/zabbix/scripts/discovery_listport.sh #!/bi ...

  3. zabbix 网络模板自动发现端口时,过滤掉某些特定规则的端口,减少item的方法

    1.需求描述        默认情况下Zabbix 模板 中网络接口自动发现接口时,会产生很多item,有时候会有我们不需要的一些接口,这时候需要过滤掉他们.        比如我有一台运行kvm的服 ...

  4. zabbix的自动发现、自定义添加监控项目、配置邮件告警

    1.zabbix的自动发现这里的自动发现,所显示出来的是规则的上自动了现 然后 可以对其内容进行相关的配制,如时间或周期 注意:对于单个主机的规则,可以自行添加或删除, 但对于已经添加好了的规则,若需 ...

  5. zabbix server端自动发现和zabbix agent端自动注册

    一.zabbix自动发现 利用zabbix的discovery功能可以实现自动批量添加主机的功能. Zabbix自动发现实现自定义主机名: 通过自动发现添加的客户端主机的Host name 是以IP地 ...

  6. 【zabbix】自动注册,实现自动发现agent并添加监控(agent不需要任何配置)

    更新: 后来在实际使用中发现,与其使用zabbix自动注册,不如直接调用zabbix的api主动发起添加服务器的请求,这样就不需要在zabbixserver上配置host信息了.实现全自动.具体调用方 ...

  7. docker部署zabbix并设置自动发现规则

      docker部署zabbix比源码安装简单一些,特此记录: 机器准备: zabbix-server: 192.168.0.150 homeserver zabbix-agent: 192.168. ...

  8. 自动化监控Zabbix之主机自动发现

    创建思路 首先说下自动发现强大的功能,它到底可以帮助我们完成什么工作: 快速发现并添加主机 简单的管理 随着环境的改变而快速搭建监控系统 自动发现基于网络发现功能,而网络发现又基于以下信息: IP地址 ...

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

    由于一台服务器开启许多Redis实例,如果一台一台的监控太耗费时间,也非常容器出错.这种费力不讨好的事情我们是坚决杜绝的,幸好ZABBIX有自动发现功能,今天我们就来用该功能来监控我们的Redis实例 ...

随机推荐

  1. View的事件机制

    为了更好的研究View的事件转发,我们自定以一个MyButton继承Button,然后把跟事件传播有关的方法进行复写,然后添加上日志. import android.content.Context; ...

  2. spring_quartz的实现

    一.在spring配置文件中引用对应的定时任务配置文件 二.定义定时任务的业务代码 三.配置定时任务配置文件spring-quartz.xml <?xml version="1.0&q ...

  3. python导入csv文件出现SyntaxError问题分析

    python导入csv文件出现SyntaxError问题分析 先简单描述下碰到的题目,要求是写出2个print的结果 可以看到,a指向了一个列表list对象,在Python中,这样的赋值语句,其实内部 ...

  4. 抓包工具chlers的使用

    1,下载chlers破解版:https://zhubangbang.com/charles-crack-version-free-download-and-install-tutorial.html ...

  5. java:svn

    1.配置: 在windows系统中,操作svn的工具最长用的是小乌龟svn 服务器端(项目所在的服务器上):在java开发中几乎所有的服务器为Linux系统 需要在Linux系统中进行安装 1.修改h ...

  6. GPL,BSD,Apache三个开源协定的大体联系及区别

    开源许可证GPL.BSD.MIT.Mozilla.Apache和LGPL的区别 以下是上述协议的简单介绍: BSD开源协议 BSD开源协议是一个给于使用者很大自由的协议.基本上使用者可以"为 ...

  7. Pytorch1.0深度学习:损失函数、优化器、常见激活函数、批归一化详解

    不用相当的独立功夫,不论在哪个严重的问题上都不能找出真理:谁怕用功夫,谁就无法找到真理. —— 列宁 本文主要介绍损失函数.优化器.反向传播.链式求导法则.激活函数.批归一化. 1 经典损失函数 1. ...

  8. python(递归实例)

    摘要:在学习python递归知识点时,总是一知半解,似懂非懂的..在反复看视频翻资料同时,也收集案例来分析求证..通过分析下面几个案例希望能有所帮助!!! 1.用递归的方法实现阶乘... def nu ...

  9. NOIp2018D1T2 货币系统【分析&完全背包】

    题目传送门 看到题目瞬间想起某凯的疑惑,感觉不会做....然后观察样例可以知道,去掉原来货币系统中能够被其他币值凑出来的数就是答案(样例分析法),然后就完事了(huaji). 简单理解一下吧: 首先, ...

  10. Flume下载安装

    下载 可以apache官网下载flume的安装包 下载时注意,flume具有两个版本,0.9.x和1.x,两个版本并不兼容,我们用最新的1.x版本,也叫flume-ng版本. 安装 解压到指定目录即可 ...