领导都想知道自己的钱买了哪些服务(资源),针对各个资源的消费如何做个统计呢?下面就简单的介绍下阿里云下每日报表的统计方法,以及通过钉钉发送每日报表
里面涉及到oss存储、删除操作以及解析csv文档
一:阿里云账单功能转储到oss,把每日消费转到oss存储
二:通过每日定时拉取oss存储,把昨天消费记录下载至本地 指定csv文档名称
三:解析csv,统计各个类型的消费
四:钉钉发送(当然可以做成自动化,自动录入数据库,每月消费自动生成图表,接口已经做好,感兴趣的留言回复)
1:首先返回oss的bucket对象
def get_info(key_id, key_secret, name, point):
# 首先初始化AccessKeyId、AccessKeySecret、Endpoint等信息。
access_key_id = os.getenv('OSS_TEST_ACCESS_KEY_ID', key_id)
access_key_secret = os.getenv('OSS_TEST_ACCESS_KEY_SECRET', key_secret)
bucket_name = os.getenv('OSS_TEST_BUCKET', name)
endpoint = os.getenv('OSS_TEST_ENDPOINT', point)
# 确认上面的参数都填写正确了
for param in (access_key_id, access_key_secret, bucket_name, endpoint):
assert '<' not in param, '请设置参数:' + param
# 创建Bucket对象,所有Object相关的接口都可以通过Bucket对象来进行
bucket = oss2.Bucket(oss2.Auth(access_key_id, access_key_secret), endpoint, bucket_name)
return bucket
2:下载对应日前下需要解析的文档,放入download.csv,删除前一天的存储文档,节约存储空间(存储也是收费的)
def main():
#设置参数
key_id = ''
key_secret = ''
name = ''
point = 'oss-cn-hangzhou-internal.aliyuncs.com'
#下载之后的文件名
filename = 'download.csv'
#获取时间格式为日期前缀,拿到Object下的文件
times = 86400 * 2
day = date.fromtimestamp(time.time()).strftime("%Y-%m-%d")
old = date.fromtimestamp(time.time() - times).strftime("%Y-%m-%d")
bucket = get_info(key_id, key_secret, name, point)
'''删除旧文件'''
for b in oss2.ObjectIterator(bucket, prefix=old):
bucket.delete_object(b.key)
#下载文件
for obj in oss2.ObjectIterator(bucket, prefix=day):
bucket.get_object_to_file(obj.key, filename)
# 解析download.csv,获取日消费
cost_values = get_costs()
3:解析download.csv,方法就是get_costs(),附主要解析代码
def total_cost(name):
#打开消费文件
with open("download.csv", "r") as f:
#消费额度初始化
total_costs=0
#读取文件
reader = csv.reader(f)
reader = [row[5:22] for row in reader]
reader = reader[1:]
#额度计费
for row in reader:
if name == 'all':
total_costs=total_costs+float(row[-1])
if name in row[0]:
total_costs=total_costs+float(row[-1])
return total_costs
#如果你想获取到昨天总消费:
#昨天总消费
total = total_cost('all')
#如果是ecs
ecs = total_cost('云服务器ECS')
4:发送钉钉
webhook = ''
ding = DingtalkChatbot(webhook)
ding.send_text(msg="时间:" + str(cost_values[0]) + "后面各种类型的消费都可以统计出来了" ,is_at_all=False)
说明:
上面第二点下 point 参数,如果你是阿里云下ECS可以带internal
如果想要做成自动化,看每月消费报表的也完全没问题
上月各个类型资源的消费信息
@app.route("/getTypecosts", methods=["GET"])
每月总消费信息
@app.route("/getMonthcosts", methods=["GET"])
取时间段内(各个月分),每种类型的消费信息
@app.route("/getAllTypeMonthcosts", methods=["GET"])