总的入口
#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