第一步:编写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.创建模板。随便取一个名字,随便选择一个群组即可。模板就是为了将某些监控项进行统一设置,以后那个主机要用,直接引用模板就行了。

zabbix监控 python脚本 zabbix shell脚本执行监控_客户端

2.点击创建好的模板,进行创建监控项

 

zabbix监控 python脚本 zabbix shell脚本执行监控_sed_02

3.给模块创建图形

zabbix监控 python脚本 zabbix shell脚本执行监控_sed_03

至此,模块就创建好了, 只要你想监控的主机,引用这个模块,就能全部拥有这个模块的东西了

4.被监控主机,引用模块

 点击主机,选择你要监控的主机。然后选择模块。进行添加模块

 

zabbix监控 python脚本 zabbix shell脚本执行监控_客户端_04

至此。你就能看见模块配置的所有图形了。开心不,这么简单。

 写到这儿就完了?你想太多了

有没有注意到,在第二步:编写监控项的shell脚本时,那么多的监控最后调用都是同一个脚本,为啥不成一个监控项,然后再zabbix配置监控项的时候,传不同的参数就行。如下图:

zabbix监控 python脚本 zabbix shell脚本执行监控_zabbix监控 python脚本_05

答案:因为每个监控项,必须拥有唯一的键值,并一一对应,不然zabbix就会找不数据的。如上面,想监控磁盘的写和读,我们就必须在zabbix开两个监控项,这是两个监控项,就必须有两个不同的键。