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