#! /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//\'/\"}`
        echo $result
    elif [ "$1" -eq 3 ];then 
        echo "无法获取到指标,疑似组件故障,请确认并请检查监控脚本和运维平台配置"
    fi

    exit $1
}

function contain(){
    result=$(echo $1 | 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 '{print $3}')
    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 ',' '{print $1}' | sed "s/[^0-9\.]//g" )
    parseFileds "load1"


    USEDNUM=$(uptime | awk -F 'average:' '{print $2}' | awk -F ',' '{print $2}' | sed "s/[^0-9\.]//g" )
    parseFileds "load5" 


    USEDNUM=$(uptime | awk -F 'average:' '{print $2}' | awk -F ',' '{print $3}' | 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
    case $arg 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"}

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

Captcha Code