shellスクリプトによるzabbixモニタリングdockerの実装

1583 ワード

前に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

どのように使うかはすでに前の文章で紹介したので、ここでは書かないで、転送ドアをクリックしてください.
ヒント
このシナリオは特定の環境向けに開発されているので、実際の状況に応じて修正しなければならない場合は、問題があれば伝言や私信を書くことができます.