Zabbix 版本:3.0

操作系统:Ubuntu16.04

操作环境,在被监控的主机上安装zabbix agent。安装方式为源码包安装。

简要安装步骤:

参考:https://www.zabbix.com/documentation/3.0/manual/installation/install#installation_from_sources

wget https://sourceforge.net/projects/zabbix/files/ZABBIX%20Latest%20Stable/3.0.24/zabbix-3.0.24.tar.gz/download
mv download zabbix-3.0.tar.gz
tar zxf zabbix-3.0.tar.gz
mkdir zabbix
cd zabbix
./configure --enable-agent --prefix=$HOME/zabbix make install

需要的预备知识:

我的监控方案参考很多网上的资源,具体链接就不在这里写了。

磁盘性能的数据来源主要是/proc/diskstats,其他方案用的大多数是iostat命令,但是这个命名需要安装一个包(syststat)。生产环境不能连互联网,也不想用源码包安装了,iostat取的好像也是/proc/diskstats的数据。

先了解一下这和目录下数据的含义:

diskstats各字段的含义:
官方解释:https://www.kernel.org/doc/Documentation/iostats.txt
 
A    B  C     1   2     3    4   5
sdb
A:主设备号
B:次设备号
C:设备名称
1:读完成次数 ----- 读磁盘的次数,成功完成读的总次数。
2:合并读完成次数,第6个域:合并写完成次数。为了效率可能会合并相邻的读和写。从而两次4K的读在它最终被处理到磁盘上之前可能会变成一次8K的读,才被计数(和排队),因此只有一次I/O操作。这个域使你知道这样的操作有多频繁。
3:读扇区的次数,成功读过的扇区总次数。
4:读花费的毫秒数,这是所有读操作所花费的毫秒数(用__make_request()到end_that_request_last()测量)
5:写完成次数 ----写完成的次数,成功写完成的总次数。
6:合并写完成次数 -----合并写次数
7:写扇区次数 ---- 写扇区的次数,成功写扇区总次数。
8:写操作花费的毫秒数 --- 写花费的毫秒数,这是所有写操作所花费的毫秒数(用__make_request()到end_that_request_last()测量)
9:正在处理的输入/输出请求数 -- -I/O的当前进度,只有这个域应该是0。当请求被交给适当的request_queue_t时增加和请求完成时减小
10:输入/输出操作花费的毫秒数 ----花在I/O操作上的毫秒数,这个域会增长只要field 9不为0。
11:输入/输出操作花费的加权毫秒数 ----- 加权, 花在I/O操作上的毫秒数,在每次I/O开始,I/O结束,I/O合并时这个域都会增加。这可以给I/O完成时间和存储那些可以累积的提供一个便利的测量标准。

agent安装完之后开始改配置文件。

先改一下配置文件:etc/zabbix_agentd.conf

UnsafeUserParameters=
# 把这个值改为1,因为自动发现的脚本中有一些特殊字符,被认为是不安全的因素,1表示允许这些字符存在(我的理解)如果不该,后期在Server端就会报错,原因就在这里。

然后在etc/zabbix_agentd.conf末尾加两行

# 第一行是自动发现脚本的路径
UserParameter=disk.discovery,/home/zabbix/etc/zabbix_agentd.conf.d/disk_discovery.sh
# 第二行是检测磁盘IO的脚本路径
UserParameter=disk.status[*],/home/zabbix/etc/zabbix_agentd.conf.d/disk_status.sh $ $

当然这两行可以单独写在另一个配置文件中,注意路径:

 # Include=/usr/local/etc/zabbix_agentd.userparams.conf
# 在etc/zabbix_agentd.conf 中指明路径。

自动发现脚本的文件内容:

#!/bin/bash
diskarray=(`cat /proc/diskstats |grep -E "\bsd[abcdefg]\b|\bxvd[abcdefg]\b"|grep -i "\b$1\b"|awk '{print $3}'|sort|uniq >/dev/null`)
length=${#diskarray[@]}
printf "{\n"
printf '\t'"\"data\":["
for ((i=;i<$length;i++))
do
printf '\n\t\t{'
printf "\"{#DISK_NAME}\":\"${diskarray[$i]}\"}"
if [ $i -lt $[$length-] ];then
printf ','
fi
done
printf "\n\t]\n"
printf "}\n"

检测磁盘状态的脚本内容

#/bin/sh

device=$
DISK=$ case $DISK in read.ops)
/bin/cat /proc/diskstats | grep "\b$device\b" | head - | awk '{print $4}' #//磁盘读的次数
;;
read.merged)
/bin/cat /proc/diskstats | grep "\b$device\b" | head - | awk '{print $5}' #//合并读完成次数
;;
read.sectors)
/bin/cat /proc/diskstats | grep "\b$device\b" | head - | awk '{print $6}' #//读扇区的次数(一个扇区的等于512B)
;;
read.ms)
/bin/cat /proc/diskstats | grep "\b$device\b" | head - | awk '{print $7}' #//磁盘读的毫秒数
;;
write.ops)
/bin/cat /proc/diskstats | grep "\b$device\b" | head - | awk '{print $8}' #//磁盘写的次数
;;
write.merged)
/bin/cat /proc/diskstats | grep "\b$device\b" | head - | awk '{print $9}' #//合并写完成次数
;;
write.sectors)
/bin/cat /proc/diskstats | grep "\b$device\b" | head - | awk '{print $10}' #//写扇区的次数(一个扇区的等于512B)
;;
write.ms)
/bin/cat /proc/diskstats | grep "\b$device\b" | head - | awk '{print $11}' #//磁盘写的毫秒数
;;
io.active)
/bin/cat /proc/diskstats | grep "\b$device\b" | head - | awk '{print $12}' #//I/O的当前进度,
;;
io.ms)
/bin/cat /proc/diskstats | grep "\b$device\b" | head - | awk '{print $13}' #//花费在IO操作上的毫秒数
;; esac

然后启动agent就可以了。启动路径在/sbin/zabbix-agentd

到此agent端的配置完成,开始在server端配置。

1.创建一个模板(可选),建议配置一个,名字根据需求写

配置--模板--创建模板

2.创建自动发现

3. 在自动发现规则里选创建监控原型(注意这里,之前有一个文章直接在监控项里创建的,误导了我一上午)

具体的监控项原型

效果图:

详细的步骤各解释后期补充

参考链接:https://idc.wanyunshuju.com/zabbix/563.html

zabbix3.0自动发现磁盘并监控磁盘IO的更多相关文章

  1. zabbix 添加自动发现端口并监控

    最近在部署zabbix监控  有些服务器上开启的服务端口非常多  如果一个个添加监控会很繁琐,于是想到了自动发现规则  自动发现服务器上的服务端口并进行监控. 在zabbix客户端服务器上进行操作 1 ...

  2. zabbix—自动发现端口并监控

    自动批量检查agent开放的端口 PS:如果服务器上的应用都是固定的,不会随机产生的都可以使用自动发现端口来监控:  如果服务器会随机出现端口且每次启动程序都会改变,可以采用第二种方法,来监控指定的端 ...

  3. zabbix3.0.4利用iostat工具监控centos主机磁盘IO

    该监控基于iostat,然后iostat 命令用来监视系统输入/输出设备负载 1.安装IOSTAT工具 # yum install sysstat -y 测试iostat 查看所有硬盘io # ios ...

  4. zabbix3.4.8配置自动发现主机并监控

    一.       自动发现功能简介 Zabbix服务器端通过网络或者主机名等方式进行客户端的扫描发现,从进行加入到监控的主机队列中,适用于批量加入多主机监控的场景. 二.       自动发现功能实施 ...

  5. zabbix3.x自动发现主机

    在服务器比较多的情况下,配置加入群组,添加模板是非常费时费力的,所以利用自动发现主机.自动添加群组和模板是非常好的办法. 两步走 1.配置发现规则 2.配置发现动作 1.前提在服务器是上部署了agen ...

  6. Zabbix实现自动发现端口并监控

    1.新建客户端需要的脚本 # vim discovertcpport.sh #!/bin/bash portarray=(`sudo netstat -tnlp|egrep -i "$1&q ...

  7. zabbix 自动发现端口服务监控教程

    目录 创建数据表(收集haproxy服务的信息) 针对生成的数据表做监控 在haproxy服务机器上配置 在zabbix上添加监控 前言: 1.线上业务使用了几十上百台haproxy服务,需要针对这些 ...

  8. Zabbix3.0 自动邮件报障

    Zabbix3.0以后,自带的邮件报警支持SSL验证了, 但是仍然没有发送复数个邮箱以及CC,BCC的功能, 因此,我们还是得用别的方法来实现邮件报障. 实现方法有很多种,我用的是PHPmailer. ...

  9. zabbix4.0自动发现主机

    一.自动发现主机的需求 由于机房设备拆分,迁移服务器后,原来的监控失效.再重新搭建监控平台后,批量主机手动添加真的是很麻烦. 所以就用到了zabbix的自动发现功能 二.配置自动发现服务 配置--&g ...

随机推荐

  1. win cmd执行Python脚本提示找不到模块问题

    Windows关于命令行执行Python脚本,提示找不到模块的问题,我 本人也是在pycharm上运行没毛病的,后来在本地搞了个Jenkins做定时任务,谁知道就提示找不到模块 也百度了很多,都是说什 ...

  2. Conda 中安装 Keras

    conda create -n keras python=3.5 ipykernel activate keras python -m ipykernel install --user --name ...

  3. rocketmq架构设计

    # 架构设计 1 技术架构 RocketMQ架构上主要分为四部分,如上图所示: Producer:消息发布的角色,支持分布式集群方式部署.Producer通过MQ的负载均衡模块选择相应的Broker集 ...

  4. Jenkins配置git/github 插件的ssh key

    参考来源:http://jingyan.baidu.com/article/a65957f4f0acc624e67f9bc1.html 方式一:本地需要生成公私钥文件,git/github中新建ssh ...

  5. java File过滤文件的多种方法

    package com.qf.part1; import java.io.File; import java.io.FileFilter; import java.io.IOException; pu ...

  6. 科匠中国深圳java面试笔试题

  7. python 数值系列-进制转换

    进制转换 前语: 如果您不通二进制,八进制,十六进制,请移步:http://www.360doc.com/content/17/0211/21/40101294_628326994.shtml 问题 ...

  8. DR 项目小结

    前言 个人的项目总结, 非技术类博文. 需要补充的知识点 HTTP 协议与其内置方法 curl 指令和各选项的意义 Keystone 认证流程和各项目配置文件 [keystone_authtoken] ...

  9. jmeter之ServerAgent监控资源

    对linux服务器的服务进行压测时,服务器的运行情况可以通过添加插件来观察,而不用使用top命令实时的去看 1.资源准备 2.环境准备 3.资源监控 1.资源准备 可通过该网址下载jmeter所有插件 ...

  10. tomcat中的server.xml文件配置了URIEncoding="UTF-8"需要注意的问题

    1.      get请求传递中文时本地连正式库访问都正常,正式环境下单独访问报错 代码: 请求:project/projectInfo/export/?cks=’项目类型 public String ...