#! /bin/bash
export LANG=en_US.UTF-8

rsecs=0
rsecsmin=
rsecsmax=   
wsecs=0
wsecsmin=
wsecsmax=
await=0
awaitmin=
awaitmax=
util=0
utilmin=
utilmax=
quota=
QUOTASTR=

FLAGE="sda"

StatStr=
CURNUM=             #当前的性能参数

WranResultStr=      #最后形成的告警字符串
ErrorResultStr=     #最后形成的错误字符串
DataResultStr=      #性能呢个参数字符串

function gotErr(){
    if [ "$1" -eq 2 ];then 
        result="{'cpname':'diskio',$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
}

#返回是否服务是否存活
function getInfo(){

    StatStr=$(iostat  -x 1 1 |grep "$FLAGE")
    if [ "$StatStr" == "" ];then
        gotErr 3
    fi

    contain "$StatStr" "iostat"
    if [ $? -eq 1 ];then
        gotErr 3
    fi

}

#依据传入的参数值来判断我们要监控的服务是什么
#然后通过各个函数获取到具体的值
#值之间的
function analysisStat(){

rsec_value=$(echo $StatStr | awk -F ' ' '{print $6} ')
wsec_value=$(echo $StatStr | awk -F ' ' '{print $7} ')
avgrq_value=$(echo $StatStr | awk -F ' ' '{print $8} ')

        CURNUM=$(echo $StatStr | awk -F ' ' '{print $6} ')
        parseFileds "rsecs" 

        CURNUM=$(echo $StatStr | awk -F ' ' '{print $7} ')
        parseFileds "wsecs"

        CURNUM=$(echo $StatStr | awk -F ' ' '{print $10} ')
        parseFileds "await"

        CURNUM=$(echo $StatStr | awk -F ' ' '{print $NF} ')
        parseFileds "util"

        CURNUM=$(echo $StatStr | awk -F ' ' '{print $2} ')
        parseFileds "rrqm"

        CURNUM=$(echo $StatStr | awk -F ' ' '{print $3} ')
        parseFileds "wrqm"

        CURNUM=$(echo $StatStr | awk -F ' ' '{print $4} ')
        parseFileds "rs"

        CURNUM=$(echo $StatStr | awk -F ' ' '{print $5} ')
        parseFileds "ws"

        CURNUM=$(echo $StatStr | awk -F ' ' '{print $8} ')
        parseFileds "avgrq"

        CURNUM=$(echo $StatStr | awk -F ' ' '{print $9} ')
        parseFileds "avgqu"

        CURNUM=$(echo $StatStr | awk -F ' ' 'BEGIN{column_size=$ColumnSize}{if(column_size==12){print $11}else if(column_size==14){print $13}else{print 0}} ')
        parseFileds "svctm"

        CURNUM=`awk 'BEGIN{printf "%.2f\n",('$avgrq_value'/ 1024) * '$wsec_value'}'`
        parseFileds "write_speed"

        CURNUM=`awk 'BEGIN{printf "%.2f\n",('$avgrq_value'/ 1024) * '$rsec_value'}'`
        parseFileds "read_speed"


}

#CURNUM            当前值
#WARNLIMIT         告警的上限
#ERRORLIMIT    异常的上限
#判断以上三个值并拼接结果字符串
function parseFileds(){
    if [[ "$DataResultStr" != "" ]];then
        DataResultStr=$DataResultStr","
    fi
    DataResultStr="$DataResultStr'$1':'$CURNUM'"
}

#分析结果 给出给出状态
function analysisResult(){

        gotErr 2

}

#输出错误信息并且退出程序
function showHelp(){
    if [ "$1" != "" ];then
        echo "请输入$1"
    fi
    echo "check_iostat.sh 可以监听本地的io的状态 参数如下"
    echo "check_iostat.sh [-f <str>]"
    echo "-f <str> 特征字符串 表示监控哪个磁盘"
    exit 1
}

while getopts "f:h" arg
do
    case $arg in
        f)
            FLAGE=$OPTARG
            ;;
        h)
            showHelp
            ;;
        ?) 
            showHelp
            ;;
    esac
done

if [[ "$FLAGE" == "" ]];then
    showHelp "特征项"
fi


#插件正题部分 
#确定存活的
#启动
#分析
getInfo
analysisStat
analysisResult

发表回复

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

Captcha Code