Shellスクリプト作成Nagiosプラグイン監視プログラムのリソース占有率
普通、私たちはプログラムのプロセスを監視するだけでいいです。しかし、今回はこのようなことがあって、会社が開発したプログラムはまだ進行中ですが、ロックされました。広範囲の影響を与えて、もっと大変なのはどこに問題があるか分かりません。それとも他の試験部の同僚が見つけてくれましたか?
次回はこのような状況にならないように、今回のデッドロック現象を分析したところ、デッドロックが100%のcpuを占めることが分かりました。通常は10%以内です。nagiosプラグインの作成を決定しました。プログラムの占有リソースを監視します。cpu、メモリなどを含みます。
一、shellスクリプトの需要分析:
cpu、memの閾値を設定でき、資源占有が閾値を超えたら警報する。
このプロセスが存在するかどうかを判断するために、存在しないものがあれば、警察に通報します。
二、shellスクリプトの実行効果は以下の通りです。
1、入力形式が正しくない場合は、ヘルプ情報を出力します。
最近はshellの脚本を書くことが多くなりました。時には以前書いた台本を直して、しばらく見てから分かります。
後続のメンテナンスを便利にするために、シナリオの中で、各機能は、それぞれ備考をして、後は自分や他人がメンテナンスしてくれます。
次回はこのような状況にならないように、今回のデッドロック現象を分析したところ、デッドロックが100%のcpuを占めることが分かりました。通常は10%以内です。nagiosプラグインの作成を決定しました。プログラムの占有リソースを監視します。cpu、メモリなどを含みます。
一、shellスクリプトの需要分析:
cpu、memの閾値を設定でき、資源占有が閾値を超えたら警報する。
このプロセスが存在するかどうかを判断するために、存在しないものがあれば、警察に通報します。
二、shellスクリプトの実行効果は以下の通りです。
1、入力形式が正しくない場合は、ヘルプ情報を出力します。
[root@center230 libexec]# shcomponent_resource.sh
Usage parament:
component_resource.sh [--cpu] [--mem]
Example:
component_resource.sh --cpu 50 --mem 50
2、閾値を超えていない場合、資源の占用状況を出力し、終了値は0
[root@center230 libexec]# shcomponent_resource.sh --cpu 50 --mem 50
VueSERVER_cpu_use=5.6% VueCache_cpu_use=1.9%VueAgent_cpu_use=0.0% VueCenter_cpu_use=0.0% VueDaemon_cpu_use=0.0%;VueSERVER_mem_use=0.2% VueCache_mem_use=7.4% VueAgent_mem_use=0.5% VueCenter_mem_use=0.1%VueDaemon_mem_use=0.0%
[root@center230 libexec]# echo $?
0
3、閾値を超えたら、出力資源の占用状況、終了値は2
[root@center230 libexec]# shcomponent_resource.sh --cpu 5 --mem 5
VueSERVER_cpu_use=9.4% VueCache_cpu_use=0.0%VueAgent_cpu_use=0.0% VueCenter_cpu_use=0.0% VueDaemon_cpu_use=0.0%;VueSERVER_mem_use=0.2% VueCache_mem_use=7.4% VueAgent_mem_use=0.5%VueCenter_mem_use=0.1% VueDaemon_mem_use=0.0%
[root@center230 libexec]# echo $?
2
4、プロセスが存在しない場合、出力ダウンのプロセスと正常使用中のプロセス資源の状況、終了値は2です。
[root@yckj scripts]# sh component_resource.sh--cpu 50 --mem 50
Current VueDaemon VueCenter VueAgent VueCache VueSERVER is down.
[root@yckj scripts]# echo $?
2
三、Shellスクリプトコードは以下の通りです。
[root@center230 libexec]# catcomponent_resource.sh
#!/bin/sh
#author:yangrong
#date:2014-05-20
#mail:[email protected]
#pragrom_list=(VueDaemon VueCenter VueAgentVueCache VueSERVER VUEConnector Myswitch Slirpvde)
pragrom_list=(VueDaemon VueCenter VueAgentVueCache VueSERVER)
#### cpu mem #######
case $1 in
--cpu)
cpu_crit=$2
;;
--mem)
mem_crit=$2
;;
esac
case $3 in
--cpu)
cpu_crit=$4
;;
--mem)
mem_crit=$4
;;
esac
### , 4, var 1,var0 ####
if [[ $1 == $3 ]];then
var=1
elif [ $# -ne 4 ] ;then
var=1
else
var=0
fi
###
if [ $var -eq 1 ];then
echo "Usage parament:"
echo " $0 [--cpu][--mem]"
echo ""
echo "Example:"
echo " $0 --cpu 50 --mem50"
exit
fi
###
num=$(( ${#pragrom_list[@]}-1 ))
NotExist=""
for digit in `seq 0 $num`
do
a=`ps -ef|grep -v grep |grep ${pragrom_list[$digit]}|wc -l`
if[ $a -eq 0 ];then
NotExist="$NotExist ${pragrom_list[$digit]}"
unset pragrom_list[$digit]
fi
done
#echo"pragrom_list=${pragrom_list[@]}"
####
cpu_use_all=""
mem_use_all=""
compare_cpu_temp=0
compare_mem_temp=0
for n in ${pragrom_list[@]}
do
cpu_use=`top -b -n1|grep $n|awk '{print $9}'`
mem_use=`top -b -n1|grep $n|awk '{print $10}'`
if[[ $cpu_use == "" ]];then
cpu_use=0
fi
if[[ $mem_use == "" ]];then
mem_use=0
fi
compare_cpu=`echo "$cpu_use > $cpu_crit"|bc`
compare_mem=`echo "$mem_use > $mem_crit"|bc`
if[[ $compare_cpu == 1 ]];then
compare_cpu_temp=1
fi
if[[ $compare_mem == 1 ]];then
compare_mem_temp=1
fi
cpu_use_all="${n}_cpu_use=${cpu_use}% ${cpu_use_all}"
mem_use_all="${n}_mem_use=${mem_use}% ${mem_use_all}"
done
### , down。 2
if [[ "$NotExist" != ""]];then
echo -e "Current ${NotExist} isdown.$cpu_use_all;$mem_use_all"
exit 2
### cpu 1, , 2
elif [[ "$compare_cpu_temp" == 1]];then
echo -e "$cpu_use_all;$mem_use_all"
exit 2
## mem 1, mem , 2
elif [[ $compare_mem_temp == 1 ]];then
echo -e "$cpu_use_all;$mem_use_all"
exit 2
## , cpu
else
echo -e "$cpu_use_all;$mem_use_all"
exit 0
fi
四、後の話:最近はshellの脚本を書くことが多くなりました。時には以前書いた台本を直して、しばらく見てから分かります。
後続のメンテナンスを便利にするために、シナリオの中で、各機能は、それぞれ備考をして、後は自分や他人がメンテナンスしてくれます。