阿里云月度消费统计脚本

总的入口

#cat Month.sh
#!/bin/bash
Time="$1"

if [ "$1" == "" ];then
	echo -e "\033[32m=====================================================脚本帮助提示================================================================= \033[0m";
	echo -e "\033[32m=====本次操作必须传参数,参数的数量为1个 \033[0m";
	echo -e "\033[32m=====请输入您要检查的月份格式必须如:2022-01 \033[0m";
	echo -e "\033[32m=====如果数据中台的新购或者不再使用某些阿里云产品请修改/aliyun/bssopenapi/Analyse.sh脚本里的过滤条件\033[0m";
	echo -e "\033[32m=====如果ERP产品新增机器或者新增阿里云产品需要修改修改/aliyun/bssopenapi/Analyse.sh和/aliyun/bssopenapi/Service/下的服务ID对应\033[0m";
	echo -e "\033[32m=====================================================脚本帮助提示================================================================= \033[0m";
	exit;
else
	ALL_Service_Values=`/usr/bin/aliyun bssopenapi QueryBillOverview --BillingCycle "$Time"|grep -E  "PaymentAmount|ProductDetail|CommodityCode"|sed --expression='s/"//g' --expression='s/,//g'|awk '{print $NF}'|awk '{if (NR%3==0) {print} else {printf "%s:",$0}}' |awk -F: '{print $2}'|awk '{sum+=$1}END{print sum}'`
	sh /aliyun/bssopenapi/V1/Project/Service/Action.sh
	###----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
	#获取订单列表
	/usr/bin/aliyun bssopenapi DescribeInstanceBill --MaxResults  299  --BillingCycle $Time|grep -E  'InstanceID|PretaxAmount|ProductDetail|NextToken'|awk -F: '{print $NF}'|sed --expression='s/"//g' --expression='s/,//g'|awk '{if (NR%3==0) {print} else {printf "%s:",$0}}' >/aliyun/bssopenapi/V1/Tmp/All_Order_List_0
	Page_Tag=`/usr/bin/aliyun bssopenapi DescribeInstanceBill --MaxResults  299  --BillingCycle $Time|grep TotalCount|awk '{print  (($2-299)/299)}'|awk -F. '{print $1}'`
	TotalCount=`/usr/bin/aliyun bssopenapi DescribeInstanceBill --MaxResults  299  --BillingCycle $Time|grep TotalCount|awk -F: '{print $NF}'|sed 's/ //g'`
	TotalCount_Number=`echo "$Page_Tag+1"|bc`
	if [ "$TotalCount" -lt 299 ];then
		/usr/bin/aliyun bssopenapi DescribeInstanceBill --MaxResults  299  --BillingCycle $Time|grep -E  'InstanceID|PretaxAmount|ProductDetail|NextToken'|awk -F: '{print $NF}'|sed --expression='s/"//g' --expression='s/,//g'|awk '{if (NR%3==0) {print} else {printf "%s:",$0}}' >/aliyun/bssopenapi/V1/Tmp/All_Order_List
	else
		for Page in $(seq 1 $TotalCount_Number)
		do
			Page_Num=`echo "$Page-1"|bc`
			NextToken=`tail -n1 /aliyun/bssopenapi/V1/Tmp/All_Order_List_$Page_Num|awk -F: '{print $1}'|sed 's/ //g'`
			sed -i '$d' /aliyun/bssopenapi/V1/Tmp/All_Order_List_$Page_Num
			/usr/bin/aliyun bssopenapi DescribeInstanceBill --MaxResults  299  --NextToken   $NextToken --BillingCycle $Time|grep -E  'InstanceID|PretaxAmount|ProductDetail|NextToken'|awk -F: '{print $NF}'|sed --expression='s/"//g' --expression='s/,//g'|awk '{if (NR%3==0) {print} else {printf "%s:",$0}}' >/aliyun/bssopenapi/V1/Tmp/All_Order_List_$Page
		done
		less /aliyun/bssopenapi/V1/Tmp/All_Order_List_* > /aliyun/bssopenapi/V1/Tmp/All_Order_List
		rm -rf /aliyun/bssopenapi/V1/Tmp/All_Order_List_*
	fi
###----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
	echo -e "\033[31m===================消费总览===========================\033[0m";
        echo -e "\033[32m总计:$ALL_Service_Values\033[0m";
	table=""
	#设置行,可以是表头,也可以是表格内容。
	#如果是表格内容,“—”表示空值
	function setRow(){
	    value=$*
	    table=${table}"|${value// /#|}#|\n"
	}

	#行分隔线
	#入参:表格的列数。如表格有5列,则入参为5
	function splitLine(){
	    local num=`expr $1 + 2`
	    split=`seq -s '+#' $num | sed 's/[0-9]//g'`    # 生成连续个的+#
	    table=${table}"${split}\n"
	}

	#绘制表格
	#入参:table
	function setTable(){
	    echo -e $1|column -s "#" -t|awk '{if($0 ~ /^+/){gsub(" ","-",$0);print $0}else{print $0}}'
	}
	if [ "$SHLVL" -eq "2" ]
	then
	   table=""
	    splitLine 3
	    setRow "阿里云服务项目(消费总览)" "消费金额(人民币-¥)" "账期(月份)"
	    splitLine 3
	    less  /aliyun/bssopenapi/V1/Tmp/All_Order_List|awk -F: '{print   $NF}'|sort -u > /aliyun/bssopenapi/V1/Tmp/All_Order_Detail_List
	    while read Item
	    do
	        Values=`less /aliyun/bssopenapi/V1/Tmp/All_Order_List|grep -w "$Item"|awk -F: '{print  $2}'|awk '{sum+=$1}END{print sum}'`
		Item_Values=`echo $Item|awk '{print $1}'`;
		setRow "$Item_Values" "$Values" "$Time"
	    done </aliyun/bssopenapi/V1/Tmp/All_Order_Detail_List
	    splitLine 3
	    setTable ${table}
	fi |tee /aliyun/bssopenapi/V1/Tmp/Order_Detail_List
fi
################拆分-------标准化服务###################
PROJECT_LIST='
	POS
	QCR
	BUSINESS
	NCC
	DATA
	BASE
'
for PROJECT in $PROJECT_LIST;
do
	ALL_LIST=`less /aliyun/bssopenapi/V1/Project/Values/$PROJECT|awk -F: '{print $2}' |xargs|sed 's/ /|/g'`
	ALL_PROJECT_VALUES=`grep -E "$ALL_LIST" /aliyun/bssopenapi/V1/Tmp/All_Order_List|grep -v DAS|awk -F: '{print $2}'|sed 's/ //g'|awk '{sum+=$1}END{print sum}'`
	ECS_LIST=`less /aliyun/bssopenapi/V1/Project/Values/$PROJECT|grep ECS|awk -F: '{print $2}' |xargs|sed 's/ /|/g'`
	if [ "$ECS_LIST" != "" ];then
		ECS_PROJECT_VALUES=`grep -E "$ECS_LIST" /aliyun/bssopenapi/V1/Tmp/All_Order_List|grep -v DAS|awk -F: '{print $2}'|sed 's/ //g'|awk '{sum+=$1}END{print sum}'`
	else
		ECS_PROJECT_VALUES=0;
	fi
	RDS_LIST=`less /aliyun/bssopenapi/V1/Project/Values/$PROJECT|grep RDS|awk -F: '{print $2}' |xargs|sed 's/ /|/g'`
	if [ "$RDS_LIST" != "" ];then
		RDS_PROJECT_VALUES=`grep -E "$RDS_LIST" /aliyun/bssopenapi/V1/Tmp/All_Order_List|grep -v DAS|awk -F: '{print $2}'|sed 's/ //g'|awk '{sum+=$1}END{print sum}'`
	else
		RDS_PROJECT_VALUES=0
	fi
	SLB_LIST=`less /aliyun/bssopenapi/V1/Project/Values/$PROJECT|grep SLB|awk -F: '{print $2}' |xargs|sed 's/ /|/g'`
	if [ "$SLB_LIST" != "" ];then
		SLB_PROJECT_VALUES=`grep -E "$SLB_LIST" /aliyun/bssopenapi/V1/Tmp/All_Order_List|grep -v DAS|awk -F: '{print $2}'|sed 's/ //g'|awk '{sum+=$1}END{print sum}'`
	else
		SLB_PROJECT_VALUES=0;
	fi
	REDIS_LIST=`less /aliyun/bssopenapi/V1/Project/Values/$PROJECT|grep REDIS|awk -F: '{print $2}' |xargs|sed 's/ /|/g'`
	if [ "$REDIS_LIST" != "" ];then
		REDIS_PROJECT_VALUES=`grep -E "$REDIS_LIST" /aliyun/bssopenapi/V1/Tmp/All_Order_List|grep -v DAS|awk -F: '{print $2}'|sed 's/ //g'|awk '{sum+=$1}END{print sum}'`
	else
		REDIS_PROJECT_VALUES=0;
	fi
	EIP_LIST=`less /aliyun/bssopenapi/V1/Project/Values/$PROJECT|grep EIP|awk -F: '{print $2}' |xargs|sed 's/ /|/g'`
	if [ "$EIP_LIST" != "" ];then
		EIP_PROJECT_VALUES=`grep -E "$EIP_LIST" /aliyun/bssopenapi/V1/Tmp/All_Order_List|grep -v DAS|awk -F: '{print $2}'|sed 's/ //g'|awk '{sum+=$1}END{print sum}'`
	else
		EIP_PROJECT_VALUES=0;
	fi
	echo "---------------------------------------------"
	echo "$Time $PROJECT 总花费 : $ALL_PROJECT_VALUES"
	echo "$Time $PROJECT ECS云服务器花费 : $ECS_PROJECT_VALUES"
	echo "$Time $PROJECT RDS数据库服务花费 : $RDS_PROJECT_VALUES"
	echo "$Time $PROJECT SLB负载均衡服务花费 : $SLB_PROJECT_VALUES"
	echo "$Time $PROJECT REDIS数据库服务花费 : $REDIS_PROJECT_VALUES"
	echo "$Time $PROJECT EIP弹性ip地址服务花费 : $EIP_PROJECT_VALUES"
done  |tee /aliyun/bssopenapi/V1/Project/ONLY/ALL_VALUES
################拆分-------独有服务###################
DATA_ONLY_LIST=`less /aliyun/bssopenapi/V1/Project/ONLY/DATA|xargs|sed 's/ /|/g'`
DATA_ONLY_VALUES=`grep -E "$DATA_ONLY_LIST" /aliyun/bssopenapi/V1/Tmp/Order_Detail_List|awk '{print $2}'|awk -F'|' '{print $2}'|awk '{sum+=$1}END{print sum}'`
BUSINESS_ONLY_LIST=`less /aliyun/bssopenapi/V1/Project/ONLY/BUSINESS|xargs|sed 's/ /|/g'`
BUSINESS_ONLY_VALUES=`grep -E "$BUSINESS_ONLY_LIST" /aliyun/bssopenapi/V1/Tmp/Order_Detail_List|awk '{print $2}'|awk -F'|' '{print $2}'|awk '{sum+=$1}END{print sum}'`
#TAG_ONLY_LIST=`less  /aliyun/bssopenapi/V1/Project/ONLY/DATA /aliyun/bssopenapi/V1/Project/ONLY/BUSINESS |xargs|sed 's/ /|/g'`
#BASE_ONLY_LIST=`grep -Ev "$TAG_ONLY_LIST" /aliyun/bssopenapi/V1/Tmp/Order_Detail_List|awk -F'|' '{print $2,$3}'|grep [0-9]`
#BASE_ONLY_VALUES=`grep -E "$BASE_ONLY_LIST" /aliyun/bssopenapi/V1/Tmp/Order_Detail_List|awk '{print $2}'|awk -F'|' '{print $2}'|awk '{sum+=$1}END{print sum}'`
ECS_RDS_EIP_REDIS_SLB_Values=`less  /aliyun/bssopenapi/V1/Project/ONLY/ALL_VALUES|grep "总花费"|awk -F:  '{print $2}'|sed 's/ //g'|awk '{sum+=$1}END{print sum}'`
echo "-------------------------------------------------"
echo "数据中台独有服务 $Time 花费 $DATA_ONLY_VALUES";
echo "-------------------------------------------------"
grep -E "$DATA_ONLY_LIST" /aliyun/bssopenapi/V1/Tmp/Order_Detail_List|awk -F'|' '{print $2":"$3 }'
echo "-------------------------------------------------"
echo "业务中台独有服务 $Time 花费 $BUSINESS_ONLY_VALUES";
echo "-------------------------------------------------"
grep -E "$BUSINESS_ONLY_LIST" /aliyun/bssopenapi/V1/Tmp/Order_Detail_List|awk -F'|' '{print $2":"$3 }'
echo "-------------------------------------------------"
echo  "公共服务 $Time 花费(以下明显仅供参考,因为一些资源已经释放掉了,和展示的服务的花费是对不齐的,但是钱还是要支付的)"
echo "$ALL_Service_Values-$DATA_ONLY_VALUES-$BUSINESS_ONLY_VALUES-$ECS_RDS_EIP_REDIS_SLB_Values"|bc
echo "-------------------------------------------------"
less /aliyun/bssopenapi/V1/Tmp/Order_Detail_List|grep -E '负载均衡|关系型数据库RDS(包月)|KvStore|弹性公网IP|云服务器ECS-按量付费|云服务器ECS-包年包月'|awk -F'|' '{print $2}' >/aliyun/bssopenapi/V1/Project/ONLY/ECS_SLB_REDIS_RDS_EIP
OTHER_SERVICE_LIST=`less /aliyun/bssopenapi/V1/Project/ONLY/BUSINESS /aliyun/bssopenapi/V1/Project/ONLY/DATA /aliyun/bssopenapi/V1/Project/ONLY/ECS_SLB_REDIS_RDS_EIP|xargs|sed 's/ /|/g'`
grep -Ev "$OTHER_SERVICE_LIST" /aliyun/bssopenapi/V1/Tmp/Order_Detail_List|grep -v "关系型数据库RDS(包月)"
#cat Action.sh
#!/bin/bash
#
#
#--------------------------ECS---------------------------------
/usr/bin/aliyun ecs DescribeInstances --pager|grep -E 'InstanceId|InstanceName'|sed --expression='s/"//g' --expression='s/,//g'|awk '{if (NR%2==0) {print} else {printf "%s:",$0}}' >/aliyun/bssopenapi/V1/Project/Tmp/ALL_ECS_ID_NAME
#--------------------------SLB---------------------------------
/usr/bin/aliyun   slb  DescribeLoadBalancers|grep  -E 'LoadBalancerId|LoadBalancerName'|sed --expression='s/"//g' --expression='s/,//g'|awk '{if (NR%2==0) {print} else {printf "%s:",$0}}'>/aliyun/bssopenapi/V1/Project/Tmp/ALL_SLB_ID_NAME
#--------------------------RDS---------------------------------
/usr/bin/aliyun  rds   DescribeDBInstances  |grep  -E 'DBInstanceId|DBInstanceDescription'|grep -v  ReadOnlyDBInstanceId|awk '{print $1,$2}'|grep -Ev 'rr-bp10cs7t3ygv30t18|DATA-source'|sed --expression='s/"//g' --expression='s/,//g'|awk '{if (NR%2==0) {print} else {printf "%s:",$0}}'|awk -F: '{print $2,":"$4 }'>/aliyun/bssopenapi/V1/Project/Tmp/ALL_RDS_ID_NAME
#--------------------------REDIS---------------------------------
aliyun r-kvstore  DescribeInstancesOverview|grep -E 'InstanceName|InstanceId'|sed --expression='s/"//g' --expression='s/,//g'|awk '{if (NR%2==0) {print} else {printf "%s:",$0}}' >/aliyun/bssopenapi/V1/Project/Tmp/ALL_REDIS_ID_NAME
#--------------------------EIP---------------------------------
aliyun  vpc  DescribeEipAddresses|grep -E 'Name|AllocationId'|grep -v  SegmentInstanceId|sed --expression='s/"//g' --expression='s/,//g'|awk '{if (NR%2==0) {print} else {printf "%s:",$0}}'> /aliyun/bssopenapi/V1/Project/Tmp/ALL_EIP_ID_NAME
PROJECT_LIST='
	POS
	QCR
	NCC
	BUSINESS
	DATA
	BASE
'
for PROJECT in $PROJECT_LIST
do
	>/aliyun/bssopenapi/V1/Project/Values/$PROJECT
done
SERVICE_LIST='
	ECS
	RDS
	SLB
	REDIS
	EIP
'
for SERVICE  in $SERVICE_LIST;
do
	for ProJect in `ls /aliyun/bssopenapi/V1/Project/Values/`;
	do
		less  /aliyun/bssopenapi/V1/Project/Tmp/ALL_"$SERVICE"_ID_NAME|grep $ProJect|awk -F:  '{print  $2}' |sed "s/ /$SERVICE:/g" >>/aliyun/bssopenapi/V1/Project/Values/$ProJect
	done
done

目录结构

#pwd
/aliyun/bssopenapi
#tree  -L 3 V1
V1
├── 2022-01.txt
├── 2022-02.txt
├── 2022-03.txt
├── 2022-04.txt
├── Month.sh
├── Month.sh.bak
├── Project
│   ├── ONLY
│   │   ├── ALL_VALUES
│   │   ├── BUSINESS
│   │   ├── DATA
│   │   ├── ECS_SLB_REDIS_RDS_EIP
│   │   └── list
│   ├── Service
│   │   └── Action.sh
│   ├── Tmp
│   │   ├── ALL_ECS_ID_NAME
│   │   ├── ALL_EIP_ID_NAME
│   │   ├── ALL_RDS_ID_NAME
│   │   ├── ALL_REDIS_ID_NAME
│   │   └── ALL_SLB_ID_NAME
│   └── Values
│       ├── BASE
│       ├── BUSINESS
│       ├── DATA
│       ├── NCC
│       ├── POS
│       └── QCR
└── Tmp
    ├── All_Order_Detail_List
    ├── All_Order_List
    ├── All_Order_List_0
    └── Order_Detail_List

6 directories, 27 files

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

完颜振江

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值