亚马逊AWS官方博客

基于详细账单的成本监控及优化解决方案

 一.背景和挑战

成本的监控,分析以及优化是企业日常运营中的一项重要工作。为了帮助管理成本,AWS提供了监控和报告工具,例如月度账单,详细账单(Detail Billing Report)等。详细账单中提供了关于资源用量和费用的详细信息,但如何有效的处理,分析,展示这些信息,需要用户自己构建相应的应用来实现,因涉及到解析,存储,分析,展示等一系列的步骤,对于用户来说有一定的技术门槛。

为了支持客户进行成本优化,AWS开发了成本优化监控解决方案。此解决方案可自动解析详细账单,抽取账单中的信息,生成可在可自定义的仪表板中进行搜索,分析和可视化的精细度量标准。该解决方案使用Amazon Elasticsearch Service(Amazon ES)并利用其对Kibana的内置支持,使您能够在处理完第一批数据后立即将其可视化。

本篇文章将介绍如何在AWS中国大陆区域(北京和宁夏)部署成本监控及优化的解决方案,并提供适用于中国大陆区域(北京和宁夏)的Cloud Formation模版。对于适用于AWS其他区域的文档和代码,请参考文末的链接。

二.架构设计

该方案基于AWS提供的详细账单(Detail Billing Report)实现。在AWS账单控制台,可以启用详细账单报告并定期上传到用户指定的AWS S3存储桶。本方案将定期扫描存储桶,并将报告经过处理后导入到Amazon Elastic Search服务,以便在Kibana的用户界面进行分析和可视化。

方案的详细架构图如下:

三.方案特点

本方案有如下特点:

  • 高可用:

Amazon ES是一种托管服务,可以跨不同的可用区自动复制和分发您的多节点Elasticsearch集群。通过代理服务器管理来自客户端的对Amazon ES Kibana的访问请求,使用Auto Scaling和Elastic Load Balancing维护代理服务器的可用性。

  • 可定制:

用户可以根据自己的数据处理量选择不同的ES集群的节点类型。以下为模版中预定义的资源,用户也可以通过修改模版来变更配置

区域 部署大小 ES主节点类型 ES数据节点类型 代理服务器类型
北京 Small 1 – m4.large.elasticsearch 2 – t3.small
Medium 3 – m4.large.elasticsearch 2 – m4.large.elasticsearch 2 – t3.small
Large 3 – m4.large.elasticsearch 4 – m4.large.elasticsearch 2 – m5.large
宁夏 Small 1 – m4.large.elasticsearch 2 – t3.small
Medium 3 – t2.small.elasticsearch 2 – m4.large.elasticsearch 2 – t3.small
Large 3 – m4.large.elasticsearch 4 – m4.large.elasticsearch 2 – m5.large

 

  • 安全性:

此解决方案使用Nginx代理服务器来限制对Kibana仪表板的访问。同时通过安全组对该代理服务器的访问进行细粒度控制。

  • 可扩展:

用户可以随时更改ES集群的节点数目而无需重新部署方案。

  • 报告可定制:

本解决方案中默认包含了一些常用的视图,借助Kibana的功能,用户也可以创建,保存和共享自定义可视化视图。

四.部署和配置

本方案使用预定义的Cloud Formation模版部署。模版的下载链接如下:

https://aws-quickstart.s3.cn-northwest-1.amazonaws.com.cn/cost-optimization-monitor/v1.1/cost-optimization-monitor-cn.template 

部署和配置详细步骤:

Step 1: 使用Cloud Formation创建环境

1.登录到AWS的管理控制台,访问“Cloud Formation”控制台,点击创建堆栈。

2.指定模版页面:输入模版的URL (https://aws-quickstart.s3.cn-northwest-1.amazonaws.com.cn/cost-optimization-monitor/v1.1/cost-optimization-monitor-cn.template).也可以将模版下载到本地后进行定制化的修改。

注意:本模版仅适用于AWS中国大陆区域(北京和宁夏),如果需要部署在AWS其他区域,请参考文末的链接。

3.【指定堆栈详细信息】页面:

堆栈名:可自由指定,本例中使用【cost-monitor-cn】

参数:参数在堆栈配置过程中使用,参数的列表及默认值如下表所示,可根据实际情况修改:

 

参数 默认值? 参数说明
User Name <Requires Input> 用于访问Ngnix代理服务器的用户名
Password <Requires Input>

用于访问Ngnix代理服务器的密码

注意:

密码必须至少6个字符,且至少包含一个大写字母,一个小些字母以及一个特殊字符(!@#$%^&+)

Access CIDR Block <Requires Input> 可访问Ngnix代理服务器的CIDR block
SSH Key <Requires Input> 用于以SSH方式访问Ngnix代理服务器的公钥
Domain Name <Requires Input>

需要创建的Amazon ES集群的domain名

注意:

Domain名必须以小些字母开头,包含3-28个字符。有效字符包括a-z(仅小写字符)/0-9/-(中划线)

Cluster Size Small 堆栈的大小,可以选择:Small,Medium,Large,每个选项的具体配置可以参考【三.方案特点】部分
Use Existing Bucket? No 用于保存详细账单的S3存储桶的名字。选择yes使用已有的桶,选择No将自动创建一个新的桶.
Existing S3 Bucket Name <Requires Input> 如果上个参数选择了yes,这里需要输入已有的S3桶的名字,如果选择No,这里不必填写
VPC CIDR Block 10.255.0.0/16 本解决方案使用的VPC的CIDR block;可做必要修改以避免与已有VPC重复.
1st Subnet Network 10.250.250.0/24 VPC可用区1中子网的CIDR block
2nd Subnet Network 10.250.251.0/24 VPC可用区2中子网的CIDR block
Send Anonymous Usage Data Yes 向AWS发送匿名数据,以帮助我们了解整个客户群的解决方案使用情况和相关成本节省。 要取消此功能,请选择No

 

配置截图如下:

4.【配置堆栈选项】页面:
在该页面可以指定创建资源的标签以及其它的选项,这里我们均使用默认值。

5.【审核】页面中检查配置项目,选中【我确认,AWS CloudFormation 可能创建 IAM 资源。】的复选框,点击【创建堆栈】。

6.通过控制台【事件】页面监控堆栈的创建过程。整个创建过程大约需要30分钟左右的时间。

7.创建完成后,可以在【输出】选项卡确认访问堆栈的信息。

下面的列表描述了各输出参数的详细信息:

描述
BucketName 用于存放详细账单文件的S3 存储桶
SingleDashboardURL

对于单个AWS账户:访问Kibana仪表板的代理服务器URL

注意:

账单数据是通过定时任务导入到ES中,因此当创建完成后立即访问Kibana仪表板时,不会立即显示账单数据,需要等待定时任务将详细账单解析完成并导入到ES集群时,才会显示。

 

ConsolidatedDashboardURL 对于使用统一账单的用户:访问Kibana仪表板的代理服务器URL

 

Step 2: 配置详细账单报告

在成本监控堆栈创建完成之后,需要完成详细账单的配置,使详细账单定期保存到Step 1中指定的S3存储桶中。

1.在AWS Cloud Formation控制台中,点击【输出】选项卡,拷贝S3的存储桶名字。

2.打开【我的账单控制面板】->【账单首选项】,选中【接收账单报告】选项

3.点击【配置】,参照提示配置详细账单保存的S3存储桶及权限,点击保存后,系统将自动验证存储桶的有效性。

4.在报告选择界面选择【包含资源和标签的详细账单报告】,点击【保存首选项】。

5.AWS最多可能需要24小时才能开始向S3存储桶发送详细账单报告。新报告生成时将会覆盖S3存储桶中旧的同名文件。生成的报告在下一次的Python脚本运行时会被解析并且导入到ES的集群中。

配置【成本分配标签】,在【账单和成本管理控制面板】中点击左侧导航栏中的【成本分配标签】选项卡,选择需要在详细账单报告中包含的标签信息。通过标签,可以按照部门,应用负载等来查询账单情况。

Step 3: 配置账单解析和导入的定时任务

如果使用默认配置,运行在proxy server上的python脚本将于每天23:00( UTC时间)从S3存储桶中的详细账单导入数据,如需更改,默认配置,可以参考如下步骤。

1.确认运行python脚本的proxy server的IP
账单解析和导入工具运行在proxy server 1上,从Cloud Formation的资源标签页找到proxy server 1的EIP。

2.使用SSH工具访问proxy server 1
访问实例时,需要使用创建堆栈时指定的密钥文件,命令如下:

3.定时任务,在【dbrparser】用户下运行,可以切换到root用户后进行确认或者修改

默认每天的23:00(UTC时间)从S3存储桶中导入当前月份的账单,每月1号的23:30(UTC时间)处理上个月的账单。导入的时间和频率,您可以根据自己的需求通过修改该crontab文件来实现。

 

Step 4: 访问Kibana仪表板

当数据导入到ES集群中后,用户可以访问Kibana的仪表板进行可视化图表的修改,保存和共享。

1.在Cloud Formation堆栈中的【输出】选项卡,点击SingleDashboardURL或者 ConsolidatedDashboardURL,访问Kibana

2.输入创建堆栈时指定的用户名和密码,认证通过后将转到Kibana的仪表板


Kibana仪表板:

3.通过点击右上角的时间图标,自定义视图的时间段

4.该解决方案中默认已经创建了一些账单分析中常用的视图,可以通过点击上方【setting】-> 【Objects】查看。详细的默认视图说明请参考如下的文档:
https://docs.thinkwithwp.com/solutions/latest/cost-optimization-monitor/appendix-a.html

用户可以根据自己业务需求在Kibana中定制化自己的视图

 

Step 5: 创建自定义视图

用户可以基于详细账单的Metrics,创建自定义的视图。本步骤介绍基于用户自定义的标签(Tag),创建基于标签的成本分析视图。

本示例数据中包含用户自定义标签,AppPjCode, 通过该标签来区分资源所属的应用项目,我们将创建一个基于时间轴的柱状图,来展示每个时间点各个应用使用的资源成本情况。

1.更新Index的属性列表:当详细账单中有新的属性(比如新的tag)时,需要在kibana中更新属性列表以便这些属性能在视图中使用。更新方法:点击【Setting】->【Indices】->选中【Billing-*】->点击【Reload Field List】


2.弹出对话框中,点击【OK】

3.在上方的菜单中选择【Visualize】选项卡,点击【Vertical Bar Chart】创建柱状图

4.【Select a search source】界面,用户可以选择从新的Search或者一个已有的Search来创建。这里我们使用从新的Search创建,Index使用【billing-*】,该index包含详细账单的所有属性信息。


5.在视图编辑界面,用户可以设置视图的横轴和纵轴的信息,对象Metrics信息.同时Kibana也提供了一些聚合函数来方便用户对数据进行查询,处理或者展示。
适用于Vertical Bar Chart组件的聚合函数可以参考下面的文档:
https://www.elastic.co/guide/en/kibana/4.1/vertical-bar-chart.html

在本实例中,Y轴我们基于【UnblendedCost】属性使用sum来获得一段时间内的费用的合计值;X轴我们基于时间,同时在特定时间段按照资源所属的【AppPjCode】标签来分组展示各应用的成本情况。配置过程,如下图所示:①配置metrics,②点击【Apply Changes】使配置生效,③确认视图的预览。

确认无误后点击右上角【Save Visualization】,输入视图名【TagVisualizationSample】,保存视图。

6.在Dashboad中使用新添加的自定义视图:打开Dashboard,点击右上角【Add Visualization】,选择视图【TagVisualizationSample】。

视图将被添加到该Dashboard的底部。

以上为如何创建自定义视图及将视图添加到Dashboard的步骤。用户可以参照Kibana的文档,结合自己的业务需求,灵活创建自定义视图。

五.总结

本解决方案使用AWS Elastic Search和其内嵌的Kibana工具,实现了基于AWS详细账单的成本监控和分析,同时通过可视化图表的方式展示。用户也可以根据自己的业务需求创建自定义视图,满足定制化的需求。

六.附录本解决方案中使用的工具及参考资料

1.详细账单报告解析工具DBRParser

https://github.com/awslabs/aws-detailed-billing-parser

2.适用于AWS Global Region的成本优化及监控解决方案

https://thinkwithwp.com/jp/solutions/cost-optimization-monitor/

3.AWS ElasticSearch开发人员指南

https://docs.amazonaws.cn/elasticsearch-service/latest/developerguide/what-is-amazon-elasticsearch-service.html

4.Kibana用户文档

https://www.elastic.co/guide/en/kibana/4.1/index.html

 

本篇作者

刘芳超

AWS解决方案架构师,负责跨国企业客户的解决方案咨询,应用架构设计优化,同时致力于 AWS 云服务知识体系的传播与普及。在云计算,数据库领域有丰富的实践经验。