关于服务器资源监控shell脚本
监控容器服务器cpu%和mem%
#!bin/bash
#判断参数个数
if [ != 3 ] ; then
echo "err:pram is null"
exit 1;
fi
#判断参数是否符合规则,引入一个数组判断
app_name=(aaa,bb,cc,dd,ee,ff)
if echo "${app_name[@]}"|grep -w "$1" &>/dev/null;then
echo "yes"
else
echo "err:pram error"
exit 1;
fi
Date=`date "+%Y%m%d%H%M%S"`
#监控容器,该容器监控只能使用vmstat和free
mem_total=`kubectl exec $1 -n ipdo -- free -k |awk '{print $2}'|sed -n 2p`
kubectl exec $1 -nipdo -- vmstat $2 $3|awk '{print $15,$4,$5,$6}' > m_data.txt
#过滤掉监控文本中的非数值,避免后续求平均值bug
cat m_data.txt |grep -v buff|grep -v system > s_data.txt
#按列求均值
cpu_use=`cat s_data.txt|awk '{sum+=$1}END{print "",sum/NR}'`
mem_buf=`cat s_data.txt|awk '{sum+=$3}END{print "",sum/NR}'`
mem_free=`cat s_data.txt|awk '{sum+=$2}END{print "",sum/NR}'`
mem_cache=`cat s_data.txt|awk '{sum+=$4}END{print "",sum/NR}'`
#由于只能使用free和vmstat,vmstat中mem以K为单位,数值过大会使用科学记数法,导致运算时bug,此处把科学记数法转换为一般文本进行计算
m_free=`echo "$mem_free"|awk '{priintf("%.4f"),$0}'`
m_cache=`echo "$mem_cache"|awk '{priintf("%.4f"),$0}'`
#计算cpu和mem使用,shell默认运算为整数计算,此处引入浮点型计算,使用bc,也可以使用awk,其中scale为保留几位小数
mem_use=`echo "scale=4;(1-($mem_buf+$m_free+$m_cache)/$mem_total)*100"|bc`
cpu_use1=`echo "100-$mem_use"|bc`
echo "appserver:$1 cpu=$cpu_use1% mem=$mem_use% ---testDate:$Date"
#打印日志
echo "appserver:$1 cpu=$cpu_use1% mem=$mem_use% ---testDate:$Date" >> monitor.log