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

swap_total_mem_min=99999999990
swap_total_mem_max=99999999999
swap_total_mem=0

swap_used_mem_min=
swap_used_mem_max=
swap_used_mem=0

swap_free_mem_min=
swap_free_mem_max=
swap_free_mem=0

swap_use_per_min=20
swap_use_per_max=70
swap_use_per=0

total_mem_min=99999999990
total_mem_max=99999999999
total_mem=0

used_mem_min=
used_mem_max=
used_mem=0

free_mem_min=
free_mem_max=
free_mem=0

mem_used_per_min=20
mem_used_per_max=70
mem_used_per=0


load1min=
load1max=
load1=0
load5min=
load5max=
load5=0
load15min=
load15max=
load15=0

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

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

quota=
QUOTASTR=

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


swap_total_mem_value=0
swap_used_mem_value=0
swap_free_mem_value=0

total_mem_value=0
used_mem_value=0
free_mem_value=0
#依据传入的参数值来判断我们要监控的服务是什么
#然后通过各个函数获取到具体的值
#值之间的
function analysisStat(){
    mem_info=`free -m`
    total_mem_value=`echo "$mem_info" |awk 'NR==2{print $2}'`
    used_mem_value=`echo "$mem_info" |awk 'NR==2{print $3}'`
    free_mem_value=`echo "$mem_info" |awk 'NR==2{print $4}'`
    title=`echo "$mem_info" | head -n 1`
    if [[ "$title" =~ "buff/cache" ]];then
        swap_total_mem_value=`echo "$mem_info"|awk 'NR==3{print $2}'`
        swap_used_mem_value=`echo "$mem_info" |awk 'NR==3{print $3}'`
        swap_free_mem_value=`echo "$mem_info" |awk 'NR==3{print $4}'`
        buffers_cached_value=`echo "$mem_info" |awk 'NR==2{print $6}'`
#        used_mem_value=$(( $used_mem_value - $buffers_cached_value ))
#        free_mem_value=$(( $used_mem_value + $buffers_cached_value ))
    else
        swap_total_mem_value=`echo "$mem_info"|awk 'NR==4{print $2}'`
        swap_used_mem_value=`echo "$mem_info" |awk 'NR==4{print $3}'`
        swap_free_mem_value=`echo "$mem_info" |awk 'NR==4{print $4}'`
        buffers_mem_value=`echo "$mem_info" |awk 'NR==2{print $6}'`
        buffers_cached_value=`echo "$mem_info" |awk 'NR==2{print $7}'`
        used_mem_value=$(( $used_mem_value - $buffers_cached_value - $buffers_mem_value ))
        free_mem_value=$(( $used_mem_value + $buffers_cached_value + $buffers_mem_value ))
    fi




    CURNUM=$swap_total_mem_value
    parseFileds "swap_total_mem" 


    CURNUM=$swap_used_mem_value
    parseFileds "swap_used_mem" 

    CURNUM=$swap_free_mem_value
    parseFileds "swap_free_mem" 

    if [ "$swap_total_mem_value" -eq 0 ];then
        CURNUM=0
    else
        CURNUM=`awk 'BEGIN{printf "%.2f\n",('$swap_used_mem_value'/'$swap_total_mem_value')*100}'`
    fi
    parseFileds "swap_use_per" 

    CURNUM=$total_mem_value
    parseFileds "total_mem"

    CURNUM=$used_mem_value
    parseFileds "used_mem" 

    CURNUM=$free_mem_value
    parseFileds "free_mem" 

    CURNUM=`awk 'BEGIN{printf "%.2f\n",('$used_mem_value'/'$total_mem_value')*100}'`
    parseFileds "mem_used_per" 

}

#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_mem.sh 可以监听本地的memory的状态"
    exit 1
}

while getopts "h" arg
do
    case $arg in
        h)
            showHelp
            ;;
        ?) 
            showHelp
            ;;
    esac
done


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

使用:

[root@sre ~]# bash check_mem.sh 
{"cpname":"mem","swap_total_mem":"2027","swap_used_mem":"73","swap_free_mem":"1954","swap_use_per":"3.60","total_mem":"1837","used_mem":"1150","free_mem":"89","mem_used_per":"62.6
0"}

发表回复

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

Captcha Code