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的数据。
先了解一下这和目录下数据的含义:
A B C 1 2 3 4 5 6 7 8 9 10 11 8 16 sdb 113686 7710 7704472 65448 225772 188612 184042704 298452 0 51952 363852
agent安装完之后开始改配置文件。
先改一下配置文件:etc/zabbix_agentd.conf
UnsafeUserParameters=1 # 把这个值改为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 $1 $2
当然这两行可以单独写在另一个配置文件中,注意路径:
# 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 2>/dev/null`) length=${#diskarray[@]} printf "{\n" printf '\t'"\"data\":[" for ((i=0;i<$length;i++)) do printf '\n\t\t{' printf "\"{#DISK_NAME}\":\"${diskarray[$i]}\"}" if [ $i -lt $[$length-1] ];then printf ',' fi done printf "\n\t]\n" printf "}\n"
检测磁盘状态的脚本内容
#/bin/sh device=$1 DISK=$2 case $DISK in read.ops) /bin/cat /proc/diskstats | grep "\b$device\b" | head -1 | awk '{print $4}' #//磁盘读的次数 ;; read.merged) /bin/cat /proc/diskstats | grep "\b$device\b" | head -1 | awk '{print $5}' #//合并读完成次数 ;; read.sectors) /bin/cat /proc/diskstats | grep "\b$device\b" | head -1 | awk '{print $6}' #//读扇区的次数(一个扇区的等于512B) ;; read.ms) /bin/cat /proc/diskstats | grep "\b$device\b" | head -1 | awk '{print $7}' #//磁盘读的毫秒数 ;; write.ops) /bin/cat /proc/diskstats | grep "\b$device\b" | head -1 | awk '{print $8}' #//磁盘写的次数 ;; write.merged) /bin/cat /proc/diskstats | grep "\b$device\b" | head -1 | awk '{print $9}' #//合并写完成次数 ;; write.sectors) /bin/cat /proc/diskstats | grep "\b$device\b" | head -1 | awk '{print $10}' #//写扇区的次数(一个扇区的等于512B) ;; write.ms) /bin/cat /proc/diskstats | grep "\b$device\b" | head -1 | awk '{print $11}' #//磁盘写的毫秒数 ;; io.active) /bin/cat /proc/diskstats | grep "\b$device\b" | head -1 | awk '{print $12}' #//I/O的当前进度, ;; io.ms) /bin/cat /proc/diskstats | grep "\b$device\b" | head -1 | awk '{print $13}' #//花费在IO操作上的毫秒数 ;; esac
然后启动agent就可以了。启动路径在/sbin/zabbix-agentd
到此agent端的配置完成,开始在server端配置。
1.创建一个模板(可选),建议配置一个,名字根据需求写
配置--模板--创建模板
2.创建自动发现
3. 在自动发现规则里选创建监控原型(注意这里,之前有一个文章直接在监控项里创建的,误导了我一上午)
具体的监控项原型
效果图:
详细的步骤各解释后期补充
参考链接:https://idc.wanyunshuju.com/zabbix/563.html