AIOps 一场颠覆传统运维的盛筵
809
2022-10-16
基于ucloud平台的eip动态调整脚本
这是王辉年轻时候的样子,先后就职于用友软件、思科中国、海尔云平台、现在于作业盒子负责运维条线,多年行走在dba、运维、架构师的道路上,但是每年都发现自己距离起点很近:)
ucloud的所有用户都可以用此脚本结合crontab来动态调整eip带宽,一年可以节省很多money的
#!/bin/bash
######################################################
#@@@ Author : bluewhalew(playful_bluewhale@hotmail.com)
#@@@ Name : GetEipINFO.sh
#@@@ Describe : get eip info
#@@@ Created in : 20170519
#@@@ Modified in : 20170531
######################################################
LogFile=/data/CallEipInfo.log
EIPIds=$1
Region=$2
#账户私钥
PublicKey="*********************************"
#账户公钥
PrivateKey="*********************************"
#URL转码后的公钥
PublicKeyURL="*********************************"
ts=`date +%s`;
Endpoint=`hostname`
error()
{
echo "##### ERROR #########################" >> $LogFile
echo `date "+%Y-%m-%d %H:%M:%S"` >> $LogFile
echo "STATUS:ERROR:INFO:""$1" >> $LogFile
echo "##### ERROR #########################" >> $LogFile
#echo "$1" 1>&2
exit 1
}
writeLog()
{
if [ $# -eq 1 ];then
echo $1 >> $LogFile
echo "##########################################################" >> $LogFile
else
echo "CallEIPWidthTime :"$1 >> $LogFile
echo "CallTotalBandwidthResult :"$2 >> $LogFile
echo "TotalBandwidth: "$3 >> $LogFile
echo "CallEIPWidthCosttime :"$4 >> $LogFile
echo " " >> $LogFile
echo "CallNetworkOutUsageTime :"$5 >> $LogFile
echo "CallNetworkOutUsageResult :"$6 >> $LogFile
echo "NetworkOut :"$7 >> $LogFile
echo "NetworkOutUsage :"$8 >> $LogFile
echo "NowNetworkOutUsage :"$9 >> $LogFile
echo "NetworkIn :"${10} >> $LogFile
echo "NetworkInUsage :"${11} >> $LogFile
echo "NowNetworkInUsage :"${12} >> $LogFile
echo "CallNetworkOutUsageCosttime :"${13} >> $LogFile
echo " " >> $LogFile
echo "CallSetEIPWidthTime :"${14} >> $LogFile
echo "SetEipBandWidthResult :"${15} >> $LogFile
echo "CurrentBandwidth is :"${16}"Mb" >> $LogFile
echo "UpdateBandwidth to :"${17}"Mb" >> $LogFile
echo "SetEipBandWidtStatudCode :"${18} >> $LogFile
echo "CallSetEipBandWidthCosttime :"${19} >> $LogFile
fi
}
if [ $# != 2 ];then
error "Parameter's count is false,should be two,example: EIPIds Region"
fi
#######################################################################################################################################
EIPURL="https://api.ucloud.cn/?Action=DescribeEIP&EIPIds.1=$EIPIds&PublicKey=$PublicKey&Region=$Region"
EIPURLEncrypt=`echo $EIPURL|sed 's/.*?//g'|sed 's/&//g'|sed 's/=//g'`$PrivateKey
#echo $EIPURLEncrypt
EIPURLSign=`echo -n $EIPURLEncrypt|sha1sum |awk '{print $1}'`
#echo $EIPURLSign
EIPCALLURL="https://api.ucloud.cn/?Action=DescribeEIP&EIPIds.1=$EIPIds&PublicKey=$PublicKeyURL&Region=$Region&Signature=$EIPURLSign"
CallEIPWidthTime=`date "+%Y-%m-%d %H:%M:%S"`
start_time=$(date +%s)
CallTotalBandwidthResult=`curl -s -k $EIPCALLURL`
end_time=$(date +%s)
TotalBandwidth=`echo $CallTotalBandwidthResult|awk -F "," '{for(i=1;i<=NF;i++) {print $i}}'|grep "TotalBandwidth"|cut -d : -f 2|awk 'gsub(/^ *| *$/,"")'`
EIPStatus=`echo $CallTotalBandwidthResult|sed 's/ResourceName/\n/g'|tail -1|sed 's/ResourceType/\n/g'|head -1|sed 's/://g'|sed 's/,//g'|sed 's/"//g'`
if [[ $EIPStatus =~ "学生" ]]; then
EIPStatus="student"
elif [[ $EIPStatus =~ "老师" ]]; then
EIPStatus="teacher"
elif [[ $EIPStatus =~ "web" ]]; then
EIPStatus="web"
fi
Metric="susuan_php"
CallEIPWidthCost=$(($end_time - $start_time))
isNumber=`echo $TotalBandwidth|sed -n '/^[0-9][0-9]*$/p'|wc -l`
newTotalBandwidth=`echo $TotalBandwidth|sed -n '/^[0-9][0-9]*$/p'`
if [ $isNumber -eq 0 ] || [ $newTotalBandwidth != $TotalBandwidth ]; then
error "Get TotalBandwidth is false!!!"
fi
#######################################################################################################################################
Seconds=119
NetworkOutUsageURL="https://api.ucloud.cn/?Action=GetMetric&MetricName.1=NetworkOutUsage&MetricName.2=NetworkInUsage&MetricName.3=NetworkOut&MetricName.4=NetworkIn&PublicKey=$PublicKey&Region=$Region&ResourceId=$EIPIds&ResourceType=eip&TimeRange=$Sec
onds"
NetworkOutUsageURLEncrypt=`echo $NetworkOutUsageURL|sed 's/.*?//g'|sed 's/&//g'|sed 's/=//g'`$PrivateKey
NetworkOutUsageURLSign=`echo -n $NetworkOutUsageURLEncrypt|sha1sum |awk '{print $1}'`
NetworkOutUsageCallURL="https://api.ucloud.cn/?Action=GetMetric&MetricName.1=NetworkOutUsage&MetricName.2=NetworkInUsage&MetricName.3=NetworkOut&MetricName.4=NetworkIn&PublicKey=$PublicKeyURL&Region=$Region&ResourceId=$EIPIds&ResourceType=eip&TimeRan
ge=$Seconds&Signature=$NetworkOutUsageURLSign"
CallNetworkOutUsageTime=`date "+%Y-%m-%d %H:%M:%S"`
start_time=$(date +%s)
CallNetworkOutUsageResult=`curl -s -k $NetworkOutUsageCallURL`
end_time=$(date +%s)
CallNetworkOutUsageCosttime=$(($end_time - $start_time))
valueNums=`echo $CallNetworkOutUsageResult|grep -o "Value"|wc -l`
if [ $valueNums -eq 4 ]; then
NetworkOutUsage=`echo $CallNetworkOutUsageResult|cut -d : -f 6|cut -d , -f 1`
NetworkInUsage=`echo $CallNetworkOutUsageResult|cut -d : -f 9|cut -d , -f 1`
NetworkOut=`echo $CallNetworkOutUsageResult|cut -d : -f 12|cut -d , -f 1`
NetworkIn=`echo $CallNetworkOutUsageResult|cut -d : -f 15|cut -d , -f 1`
fi
if [ $valueNums -eq 8 ]; then
NetworkOutUsage=`echo $CallNetworkOutUsageResult|cut -d : -f 8|cut -d , -f 1`
NetworkInUsage=`echo $CallNetworkOutUsageResult|cut -d : -f 11|cut -d , -f 1`
NetworkOut=`echo $CallNetworkOutUsageResult|cut -d : -f 18|cut -d , -f 1`
NetworkIn=`echo $CallNetworkOutUsageResult|cut -d : -f 21|cut -d , -f 1`
fi
isNumber=`echo $NetworkOutUsage|sed -n '/^[0-9][0-9]*$/p'|wc -l`
newNetworkOutUsage=`echo $NetworkOutUsage|sed -n '/^[0-9][0-9]*$/p'`
if [ $isNumber -eq 0 ] || [ $newNetworkOutUsage != $NetworkOutUsage ]; then
error "Get NetworkOutUsage is false!!!""@@@@@""$CallNetworkOutUsageResult""@@@@@""$NetworkOutUsage""@@@@@""$newNetworkOutUsage"
fi
isNumber=`echo $NetworkInUsage|sed -n '/^[0-9][0-9]*$/p'|wc -l`
newNetworkInUsage=`echo $NetworkInUsage|sed -n '/^[0-9][0-9]*$/p'`
if [ $isNumber -eq 0 ] || [ $newNetworkInUsage != $NetworkInUsage ]; then
error "Get NetworkInUsage is false!!!""@@@@@""$CallNetworkOutUsageResult""@@@@@""$NetworkInUsage""@@@@@""$newNetworkInUsage"
fi
isNumber=`echo $NetworkOut|sed -n '/^[0-9][0-9]*$/p'|wc -l`
newNetworkOut=`echo $NetworkOut|sed -n '/^[0-9][0-9]*$/p'`
if [ $isNumber -eq 0 ] || [ $newNetworkOut != $NetworkOut ]; then
error "Get NetworkOut is false!!!""@@@@@""$CallNetworkOutUsageResult""@@@@@""$NetworkOut""@@@@@""$NetworkOut"
fi
NetworkOut=`expr $NetworkOut / 1000000`
NowNetworkOutUsage=`awk 'BEGIN{printf "%.2f\n",'$NetworkOut'/'$TotalBandwidth'}'`
NowNetworkOutUsage=`awk -v x=$NowNetworkOutUsage -v y=100 'BEGIN{printf "%i\n",x*y }'`
isNumber=`echo $NetworkIn|sed -n '/^[0-9][0-9]*$/p'|wc -l`
newNetworkIn=`echo $NetworkIn|sed -n '/^[0-9][0-9]*$/p'`
if [ $isNumber -eq 0 ] || [ $newNetworkIn != $NetworkIn ]; then
error "Get NetworkIn is false!!!""@@@@@""$CallNetworkOutUsageResult""@@@@@""$NetworkIn""@@@@@""$newNetworkIn"
fi
NetworkIn=`expr $NetworkIn / 1000000`
NowNetworkInUsage=`awk 'BEGIN{printf "%.2f\n",'$NetworkIn'/'$TotalBandwidth'}'`
NowNetworkInUsage=`awk -v x=$NowNetworkInUsage -v y=100 'BEGIN{printf "%i\n",x*y }'`
#######################################################################################################################################
ExecUpate="YES"
ExecHoure=`date +'%H%m'`
if [ $ExecUpate == "YES" ] && [ $NowNetworkOutUsage -gt 70 ]; then
Rate=1.2
Bandwidth=`awk -v x=$Rate -v y=$TotalBandwidth 'BEGIN{printf "%i\n",x*y }'`
SetEipBandWidthURL="https://api.ucloud.cn/?Action=ModifyEIPBandwidth&Bandwidth=$Bandwidth&EIPId=$EIPIds&PublicKey=$PublicKey&Region=$Region"
SetEipBandWidthURLEncrypt=`echo $SetEipBandWidthURL|sed 's/.*?//g'|sed 's/&//g'|sed 's/=//g'`$PrivateKey
SetEipBandWidthURLSign=`echo -n $SetEipBandWidthURLEncrypt|sha1sum |awk '{print $1}'`
SetEipBandWidthCallURL="https://api.ucloud.cn/?Action=ModifyEIPBandwidth&Bandwidth=$Bandwidth&EIPId=$EIPIds&PublicKey=$PublicKeyURL&Region=$Region&Signature=$SetEipBandWidthURLSign"
CallSetEIPWidthTime=`date "+%Y-%m-%d %H:%M:%S"`
start_time=$(date +%s)
SetEipBandWidthResult=`curl -s -k $SetEipBandWidthCallURL`
end_time=$(date +%s)
CallSetEipBandWidthCosttime=$(($end_time - $start_time))
SetEipBandWidtStatudCode=`echo $SetEipBandWidthResult|sed 's/{\|}//g'|awk -F "," '{for(i=1;i<=NF;i++) {print $i}}'|grep RetCode|cut -d : -f 2|awk 'gsub(/^ *| *$/,"")'`
writeLog "$CallEIPWidthTime" "$CallTotalBandwidthResult" "$TotalBandwidth" "$CallEIPWidthCost" "$CallNetworkOutUsageTime" "$CallNetworkOutUsageResult" "$NetworkOut" "$NetworkOutUsage" "$NowNetworkOutUsage" "$NetworkIn" "$NetworkInUsage" "$Now
NetworkInUsage" "$CallNetworkOutUsageCosttime" "$CallSetEIPWidthTime" "$SetEipBandWidthResult" "$TotalBandwidth" "$Bandwidth" "$SetEipBandWidtStatudCode" "$CallSetEipBandWidthCosttime"
CallTotalBandwidthResult=`curl -s -k $EIPCALLURL`
UpdatedTotalBandwidth=`echo $CallTotalBandwidthResult|awk -F "," '{for(i=1;i<=NF;i++) {print $i}}'|grep "TotalBandwidth"|cut -d : -f 2|awk 'gsub(/^ *| *$/,"")'`
#sleep 5
if [ $SetEipBandWidtStatudCode -eq 0 ] && [ $UpdatedTotalBandwidth -eq $Bandwidth ]; then
writeLog "BEHAVIOR:UP:STATUS:SUCCESSFUL:INFO:"$SetEipBandWidtStatudCode:$TotalBandwidth"MB":$UpdatedTotalBandwidth"MB"
Value=$(($UpdatedTotalBandwidth - $TotalBandwidth))
curl -X POST -d "[{\"metric\": \"$Metric\", \"endpoint\": \"$Endpoint\", \"timestamp\": $ts,\"step\": 180,\"value\": $Value,\"counterType\": \"GAUGE\",\"tags\": \"status=$EIPStatus\"}]" http://*.*.*.*:1988/v1/push
else
writeLog "BEHAVIOR:UP:STATUS:ERROR:INFO:"$SetEipBandWidtStatudCode:$TotalBandwidth"MB"
fi
elif [ $ExecUpate == "YES" ] && [ $NowNetworkOutUsage -lt 30 ] && [ $TotalBandwidth -gt 50 ]; then
Rate=0.5
Bandwidth=`awk -v x=$Rate -v y=$TotalBandwidth 'BEGIN{printf "%i\n",x*y }'`
if [ $Bandwidth -lt 50 ]; then
Bandwidth=50
fi
SetEipBandWidthURL="https://api.ucloud.cn/?Action=ModifyEIPBandwidth&Bandwidth=$Bandwidth&EIPId=$EIPIds&PublicKey=$PublicKey&Region=$Region"
SetEipBandWidthURLEncrypt=`echo $SetEipBandWidthURL|sed 's/.*?//g'|sed 's/&//g'|sed 's/=//g'`$PrivateKey
SetEipBandWidthURLSign=`echo -n $SetEipBandWidthURLEncrypt|sha1sum |awk '{print $1}'`
SetEipBandWidthCallURL="https://api.ucloud.cn/?Action=ModifyEIPBandwidth&Bandwidth=$Bandwidth&EIPId=$EIPIds&PublicKey=$PublicKeyURL&Region=$Region&Signature=$SetEipBandWidthURLSign"
CallSetEIPWidthTime=`date "+%Y-%m-%d %H:%M:%S"`
start_time=$(date +%s)
SetEipBandWidthResult=`curl -s -k $SetEipBandWidthCallURL`
end_time=$(date +%s)
CallSetEipBandWidthCosttime=$(($end_time - $start_time))
SetEipBandWidtStatudCode=`echo $SetEipBandWidthResult|sed 's/{\|}//g'|awk -F "," '{for(i=1;i<=NF;i++) {print $i}}'|grep RetCode|cut -d : -f 2|awk 'gsub(/^ *| *$/,"")'`
writeLog "$CallEIPWidthTime" "$CallTotalBandwidthResult" "$TotalBandwidth" "$CallEIPWidthCost" "$CallNetworkOutUsageTime" "$CallNetworkOutUsageResult" "$NetworkOut" "$NetworkOutUsage" "$NowNetworkOutUsage" "$NetworkIn" "$NetworkInUsage" "$Now
NetworkInUsage" "$CallNetworkOutUsageCosttime" "$CallSetEIPWidthTime" "$SetEipBandWidthResult" "$TotalBandwidth" "$Bandwidth" "$SetEipBandWidtStatudCode" "$CallSetEipBandWidthCosttime"
CallTotalBandwidthResult=`curl -s -k $EIPCALLURL`
UpdatedTotalBandwidth=`echo $CallTotalBandwidthResult|awk -F "," '{for(i=1;i<=NF;i++) {print $i}}'|grep "TotalBandwidth"|cut -d : -f 2|awk 'gsub(/^ *| *$/,"")'`
#sleep 5
if [ $SetEipBandWidtStatudCode -eq 0 ] && [ $UpdatedTotalBandwidth -eq $Bandwidth ]; then
writeLog "BEHAVIOR:DOWN:STATUS:SUCCESSFUL:INFO:"$SetEipBandWidtStatudCode:$TotalBandwidth"MB":$UpdatedTotalBandwidth"MB"
Value=$(($UpdatedTotalBandwidth - $TotalBandwidth))
curl -X POST -d "[{\"metric\": \"$Metric\", \"endpoint\": \"$Endpoint\", \"timestamp\": $ts,\"step\": 180,\"value\": $Value,\"counterType\": \"GAUGE\",\"tags\": \"status=$EIPStatus\"}]" http://*.*.*.*:1988/v1/push
else
writeLog "BEHAVIOR:DOWN:STATUS:ERROR:INFO:"$SetEipBandWidtStatudCode:$TotalBandwidth"MB"
fi
else
curl -X POST -d "[{\"metric\": \"$Metric\", \"endpoint\": \"$Endpoint\", \"timestamp\": $ts,\"step\": 180,\"value\": 0,\"counterType\": \"GAUGE\",\"tags\": \"status=$EIPStatus\"}]" http://*.*.*.*:1988/v1/push
fi
发表评论
暂时没有评论,来抢沙发吧~