
#! /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