基于ucloud平台的eip动态调整脚本

网友投稿 809 2022-10-16

本站部分文章、图片属于网络上可搜索到的公开信息,均用于学习和交流用途,不能代表睿象云的观点、立场或意见。我们接受网民的监督,如发现任何违法内容或侵犯了您的权益,请第一时间联系小编邮箱jiasou666@gmail.com 处理。

基于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

上一篇:关于性能优化中slowquery(MySQL)优化的一些想法
下一篇:容器与虚拟化的结合:浅谈“安全容器”技术发展趋势
相关文章

 发表评论

暂时没有评论,来抢沙发吧~