#! /bin/bash
cpumin=
cpumax=
load5=0
FLAGE=
StatStr=
CURNUM= #当前的性能参数(剩余cpu)
USEDNUM= #已使用的cpu(包括sys+user用户)
WranResultStr= #最后形成的告警字符串
ErrorResultStr= #最后形成的错误字符串
DataResultStr= #性能呢个参数字符串
quota=
QUOTASTR=
function gotErr(){
if [ "1" -eq 2 ];then result="{'cpname':'cpu',DataResultStr}"
result=`echo {result//\'/\"}`
echoresult
elif [ "1" -eq 3 ];then echo "无法获取到指标,疑似组件故障,请确认并请检查监控脚本和运维平台配置"
fi
exit1
}
function contain(){
result=(echo1 | grep "2")
if [[ "result" != "" ]]
then
return 1
else
return 0
fi
}
#获取CPU的空闲时间
function getId(){
top -n 2 -b>top.txt
id=`cat top.txt|grep 'Cpu(s):'|awk -F ',' 'NR==2{print 4}'|sed "s/[^0-9\.]//g"`
}
#依据传入的参数值来判断我们要监控的服务是什么
#然后通过各个函数获取到具体的值
#值之间的
function analysisStat(){
#剩余cpu百分比(是一个数字)
columns=`sar -P ALL 1 1 | grep -v Average | grep -v Linux | grep 0 | grep -v CPU| awk '{print NF}'|sort -u`
if [[ "columns" == "9" ]];then
USEDNUM=(sar -P ALL 1 1 | grep -v Average | grep -v Linux | grep 0 | grep -v CPU|head -n{FLAGE} | tail -n 1| awk '{print 4}')
else
USEDNUM=(sar -P ALL 1 1 | grep -v Average | grep -v Linux | grep 0 | grep -v CPU|head -n {FLAGE} | tail -n 1| awk '{print3}')
fi
#USEDNUM=(sar -P ALL 1 1 | grep 'Average' | grep -v CPU | head -n{FLAGE} | tail -n 1 | awk '{print 3}')
CORENUM=`cat /proc/cpuinfo |grep "physical id"|wc -l`
let CORENUM=CORENUM+1
if [[{FLAGE} -gt CORENUM ]];then
USEDNUM=""
fi
parseFileds "cpu"
USEDNUM=(uptime | awk -F 'average:' '{print 2}' | awk -F ',' '{print1}' | sed "s/[^0-9\.]//g" )
parseFileds "load1"
USEDNUM=(uptime | awk -F 'average:' '{print2}' | awk -F ',' '{print 2}' | sed "s/[^0-9\.]//g" )
parseFileds "load5"
USEDNUM=(uptime | awk -F 'average:' '{print 2}' | awk -F ',' '{print3}' | sed "s/[^0-9\.]//g" )
parseFileds "load15"
getId
USEDNUM=(awk 'BEGIN{printf "%.2f\n",(100-'id')}')
parseFileds "cpu_average_rate"
USEDNUM=(timeout 10s ps xH|wc -l )
parseFileds "thread_total"
USEDNUM=(timeout 8s ps xH|grep -w java|wc -l)
parseFileds "thread_java"
}
#CURNUM 当前值
#WARNLIMIT 告警的上限
#ERRORLIMIT 异常的上限
#判断以上三个值并拼接结果字符串
function parseFileds(){
if [[ "DataResultStr" != "" ]];then
DataResultStr=DataResultStr","
fi
DataResultStr="DataResultStr'1':'USEDNUM'"
}
#分析结果 给出给出状态
function analysisResult(){
gotErr 2
}
#输出错误信息并且退出程序
function showHelp(){
if [ "1" != "" ];then
echo "请输入1"
fi
echo "check_cpu.sh 可以监听本地的cpu使用情况的状态 参数如下"
echo "check_cpu.sh -f <<FLAGE>>"
echo "-c 表示cpu的标识"
exit 1
}
while getopts "f:h" arg
do
casearg in
f)
if [[ "OPTARG" == "all" ]];then
FLAGE=1;
else
FLAGE=[OPTARG+2]
fi
;;
h)
showHelp
;;
?)
showHelp
;;
esac
done
if [[ $FLAGE == "" ]];then
showHelp "特征项"
fi
#插件正题部分
#确定存活的
#启动
#分析
analysisStat
analysisResult
例子:
[root@sre ~]# bash check_cpu.sh -f all
{"cpname":"cpu","cpu":"0.50","load1":"0.14","load5":"0.14","load15":"0.08","cpu_average_rate":"5.50","thread_total":"103","thread_java":"1"}