第一步:编写shell脚本,要求输出结果为数值。
如下统计磁盘io /读写,队列,繁忙率等
#cat /opt/zabbix/list.sh
# !/bin/bash
device=$1 #监控那个磁盘:sda,sdb
action=$2 #监控项:read,write,queue还是util
str=`iostat -d -x | grep 'util'`
#str2=`echo "$str" | awk '{split($0,arr," ");print arr[7]}'`
case $action in
read)
str2=`echo "$str" | awk '{split($0,arr," ");print arr[6]}'` #判断iostat中第六列是不是关于read的
if [ $str2 == "rkB/s" ];then
printf "%.f" `iostat -d -x 1 3 | grep $1 | sed -n '3p' | awk '{print $6/1024}'` #输出3行,取第三行的值,然后再将值转化为MB
fi
;;
write)
str2=`echo "$str" | awk '{split($0,arr," ");print arr[7]}'`
if [ $str2 == "wkB/s" ];then
printf "%.f" `iostat -d -x 1 3 | grep $1 | sed -n '3p' | awk '{print $7/1024}'`
fi
;;
queue)
str2=`echo "$str" | awk '{split($0,arr," ");print arr[9]}'`
if [ $str2 == "avgqu-sz" ];then
printf "%.f" `iostat -d -x 1 3 | grep $1 | sed -n '3p' | awk '{print $9}'`
fi
;;
util)
str2=`echo "$str" | awk '{split($0,arr," ");print arr[14]}'`
if [ $str2 == "%util" ];then
printf "%.f" `iostat -d -x 1 3 | grep $1 | sed -n '3p' | awk '{print $14}'`
fi
;;
esac
注:可能存在脚本无端报错问题,可能是拷贝进服务器后,脚本换行标识符有问题,可以用以下命令查看:如果看见有行后有^M,记得要一一删除
$ vi -b list.sh
第二步:部署zabbix 客户端
注意:部署的是zabbix客户端(数据被收集端),不是zabbix 服务器端,
1.进入以下目录:这里面存放的就是zabbix 的监控规则
/etc/zabbix/zabbix_agentd.d
2.创建监控项
需要vi 一个.conf 的文件,并填写以下的内容,
UserParameter=custom.vfs.dev.read.second[*],./opt/zabbix_script/discovery_io.sh $1 $2
UserParameter=custom.vfs.dev.write.second[*],./opt/zabbix_script/discovery_io.sh $1 $2
UserParameter=custom.vfs.dev.io.queue[*],./opt/zabbix_script/discovery_io.sh $1 $2
UserParameter=custom.vfs.dev.io.util[*],./opt/zabbix_script/discovery_io.sh $1 $2
解释:UserParameter 代表的是zabbix 监控项的键值(这个后面会用到,到时候就知道干嘛了),逗号后面的部分,其实就是脚本执行命令, $1,$2代表这个脚本需要传两个参数
3 重启zabbix客户端
systemctl restart zabbix-agent
第三步 配置zabbix
1.创建模板。随便取一个名字,随便选择一个群组即可。模板就是为了将某些监控项进行统一设置,以后那个主机要用,直接引用模板就行了。
2.点击创建好的模板,进行创建监控项
3.给模块创建图形
至此,模块就创建好了, 只要你想监控的主机,引用这个模块,就能全部拥有这个模块的东西了
4.被监控主机,引用模块
点击主机,选择你要监控的主机。然后选择模块。进行添加模块
至此。你就能看见模块配置的所有图形了。开心不,这么简单。
写到这儿就完了?你想太多了
有没有注意到,在第二步:编写监控项的shell脚本时,那么多的监控最后调用都是同一个脚本,为啥不成一个监控项,然后再zabbix配置监控项的时候,传不同的参数就行。如下图:
答案:因为每个监控项,必须拥有唯一的键值,并一一对应,不然zabbix就会找不数据的。如上面,想监控磁盘的写和读,我们就必须在zabbix开两个监控项,这是两个监控项,就必须有两个不同的键。