用shell脚本实现zabbix监控docker

之前有补充过一个用python脚本来实现监控docker,奈何python不是太熟练,而且因为环境特殊用python脚本不能实现我所想要的效果,所以又写了个shell脚本。相比python脚本,shell更简单,更灵活,更容易理解
看这里用python脚本实现zabbix监控docker
废话不多说直接上脚本

#!/bin/bash
#author: li
#获取容器的名称
containers=(`sudo docker ps|tail -n +2 |awk '{print $NF}' |sed -r "s#r-(.*)-[1-9]-.*#\1#"`)
let num=(${#containers[@]}-1)
#自动发现函数
discover () {
for i in  `seq 0 $num` ; do
   cname[i]="{\"{#CONTAINERNAME}\":\"${containers[$i]}\"}"
done
echo "{\"data\":[${cname[@]}]}" |tr ' ' ','
}
#资源使用查询函数
stata () {
ccode=`sudo docker ps |grep $1 |head -n 1 |awk '{print $1}'`
if  [ $2 == 'ping' ] ; then
   statuscode=`sudo docker inspect --format="{{.State.Running}}" ${ccode}`
   if [[ ${statuscode} == 'true' ]] ;then
      echo 1
   else 
      echo 0
   fi
elif [[ $2 == 'MemUsage' ]] ; then
   value1=`sudo docker stats --no-stream --format "{{.MemUsage}}" ${ccode} |sed  -r "s#(.*)([A-Z])iB.*iB#\1 \2#" |awk '{if ($2=="M") print $1; else if ($2=="G") print $1*1024 ; else if ($2=="K") print $1/1024 }'` 
   echo ${value1}   
else
   value2=`sudo docker stats --no-stream --format "{{.$2}}" ${ccode}`
   echo ${value2} |tr -d '%'  
fi
}
#当有位置变量传入执行查询函数,没有执行发现函数
if [ $# = 0 ];then
   discover
else
   stata $1 $2
fi

因为如何使用已经在上篇文章介绍过了这里就不写啦,可点击传送门

提示

因为这个脚本是针对特定环境开发的,如果拿去用还要根据实际情况做些修改,如有问题可以留言、私信

你可能感兴趣的:(zabbix,zabbix)