在使用zabbix监控Linux主机的时候,我们希望zabbix能够自动发现Linux主机上有多少块硬盘,而不是我们手动去添加。


实验目的:

  让zabbix能够自动发现Linux服务器的磁盘,并能够监控磁盘IO且绘出图形

实验设备:

  zabbix-server: 172.17.5.230

  zabbix-client:  172.17.5.219

实验环境:

 linux centos 6.6

 zabbix-2.4.6

实验步骤

 1. 在zabbix客户端的安装目录,如/usr/local/zabbix/bin/目录下添加名为diskiocheck.sh的脚本

 2. 进入/usr/local/zabbix/bin/目录

 3. 创建新文件touch diskiocheck.sh

 4. 编写vim diskiocheck.sh

#!/bin/sh
#disk_io monitor
disk=$2
function disk_count {
diskarray=(`cat /proc/diskstats | grep -E "\bsd[a-z]\b| \
\bxvd[a-z]\b|cciss/c[0-9]d[0-9]\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"
}
function qps {
qps=$(iostat $disk -x 1 2 | grep -E "^sd|^cciss" | awk '{if(NR==2)print $NF}')
echo $qps
}
$1


为了zabbix能够读取执行结果,需要把它输出为json格式。如下所示执行脚本里函数disk_count

sh /usr/local/zabbix/bin/disk_io_check.sh disk_count

输出如下:

{
"data":[
    {"{#DISK_NAME}":"sda"},
    {"{#DISK_NAME}":"sdb"},
    {"{#DISK_NAME}":"sdc"},
    {"{#DISK_NAME}":"sdd"}
    ]
}

脚本执行验证通过,我们还需要修改zabbix-client端,修改zabbix_agentd.conf配置文件

vim /usr/local/zabbix/etc/zabbix_agentd.conf

添加(没有注销的是新增的,把注销的也写出来主要是为了方便查看在什么位置添加)如下所示

# Include=/usr/local/etc/zabbix_agentd.userparams.conf
# Include=/usr/local/etc/zabbix_agentd.conf.d/
# Include=/usr/local/etc/zabbix_agentd.conf.d/*.conf
Include=/usr/local/zabbix/etc/zabbix_agentd.conf.d/

然后在/usr/local/zabbix/etc/zabbix_agentd.conf.d/目录底下创建文件,名字可以随便起个,在这里文件名为:zabbixd.conf 编辑文件

cd /usr/local/zabbix/etc/zabbix_agentd.conf.d/
vim zabbixd.conf

在文件中添加zabbix监控项目的key值,文件内容如下

UserParameter=iostat.count[*],/usr/local/zabbix/bin/disk_io_check.sh disk_count $1
UserParameter=iostat.util[*],/usr/local/zabbix/bin/disk_io_check.sh qps $1


添加完毕后重启 zabbix_agentd

/etc/init.d/zabbix_agentd

到此在服务器端配置完成,接下来需要打开zabbix服务器端web页面进行配置在浏览器中打开点configuration--->templates----->create tempalte如果有现有的模版也可以直接编辑现有的模版,这里我们直接编辑一个现有的模版如下图所示:

wKiom1cPZNOQYXXeAADTpkiYfMs236.png

然后再点击右上角的create item prototype

wKioL1cPZfDxv5OPAABiahnY0xw306.png

这个key值写iostat.count,填写完这个后保存,然后点击item prototypes 如下图所示

wKioL1cPZYyDlfLRAAB0zqwHCw4731.png

然后再点击右上角的create item prototype