亚马逊AWS官方博客
基于 QuickSight 的成本可视化方案
问题现状
随着业务用量的增长和服务的多元化,越来越多的企业需要对其成本进行详细的监控和分析。为了让更多的 AWS 用户能够清晰地了解其云上用量,大中华区企业支持团队根据企业服务团队与企业客户协作的实际经验,创建了基于 CUR (cost and usage report) + QuickSight 的成本分析方案。
尽管我们拥有 Cost Explorer,但在了解其用量和成本方面仍存在一些限制。例如,有些客户希望了解资源ID颗粒度的成本费用情况或者将相关度特别高的成本分析放在同一页面展示,以便同时了解其所有使用情况和成本,这些需求在当前的 Cost Explorer 却无法实现。基于 CUR + QuickSight的成本分析方案将协助我们快速实现一个简单的仪表盘视图,成本管理人员可以方便地可视化用量成本,并能够通过电子邮件或仪表盘进行监视。
QuickSight仪表盘
根据企业服务团队的经验,我们创建了基于 QuickSight 的 Dashboard 来帮助客户了解使用情况。整个方案都是从AWS服务构建的,该方案从客户的 CUR 中提取数据,并将其呈现在 QuickSight 中。 QuickSight Dashboard 是预定义的,也可以根据需求自定义。预定义的模版内容反映了大多数客户和客户团队对其成本可视化的要求。基于 Dashboard 的数据,我们还可以按计划发送警报或报告,以及检测当前环境的异常使用情况。
基于 QuickSight Dashboard 的成本分析方案有如下优势:
* 效率 – 这是一个汇总的信息中心,您无需从 Cost Explorer 中选择并渲染多个项目。
* 全面 – 它涵盖了大多数服务,包括 EC2 / S3 / EMR / RDS / ElastiCache / WAF / CloudFront 等,之后会逐步添加更多的服务到Dashboard 中。
* 资源联动 – 根据客户的资源使用情况,我们可以弄清楚客户如何使用它。例如,在哪个S3存储桶上,每小时发生多少数据传输?在EMR服务中,竞价型实例如何影响客户的成本。
* 见解 – 可展示与其他仪表盘对比分析后的见解,例如,我们根据客户的使用情况进行比较,并提供其 MoM (Month over Month,按月环比增长)增量视图。
* 定期报告 – 可以向利益相关者(包括CEO/CTO/OPS Director等)提供计划的成本报告(每天/每周)。
* 异常检测 – 基于机器学习的异常检测可以帮助客户发现异常用量并及时通知利益相关者。
* …
方案架构图
方案部署:
为了让您能够更加方便的利用QuickSight 进行成本可视化,我们制作了一个易于部署的脚本工具,并将整体步骤整理如下:
注意:
- 此向导中用到的脚本工具是基于 Mac 进行设计的。如果您用的是 Windows 系统,请拷贝至 Amazon Linux 或 AWS Cloud 9 上运行
先决条件:
1.已经配置好 AWS CLI 运行环境(aws-cli/1.18.79 或更新版本)
2.确保您的 IAM 用户打开过 QuickSight 控制台进行过用户订阅
3.升级为 QuickSight 企业版本
注意: 如果您之前尚未使用过 QuickSight,启用企业版每月会增加 $18 或 $24 的用户订阅成本
4.已经安装了 “jq” 工具用于解析 json 字符串
- 在 Amazon linux 或 Cloud 9 上安装 jq
sudo yum -y install jq
- 在 Mac 上安装 jq
brew install jq
部署步骤:
1.参考“设置 Athena 集成” 启用CUR报告
注意:报告名称不要包含减号“-”,按照如下截图勾选“包括资源ID”及“Amazon Athena”
- 在存放 CUR 的 S3 桶将生成名为“crawler-cfn.yml”的cloudformation模版,使用 CloudFormation模版设置 Athena
【可选】: 如果您想要分析由 AWS 中国区域生成的 CUR 报告,需要把 CUR 报告从中国区的 S3 Bucket 同步到 Global 区域中的 S3 Bucket 中,然后再继续此文档的其它步骤
a. 在 AWS 中国区域和 Global 区域分别创建两个同名 S3 Bucket
b. 在中国区域创建 CUR 报告,并保存到准备好的 S3 Bucket 中
c. 准备一个长期运行的 EC2 实例,配置 Cron job 定期运行如下命令,以便同步中国区域和Global区域的 CUR 数据
aws s3 sync s3://S3-bucket-name . –exclude “aws-programmatic-access-test-object” –exclude
“*/cost_and_usage_data_status/cost_and_usage_data_status.parquet” –profile china-iam-profile
aws s3 sync . s3://S3-bucket-name –acl bucket-owner-full-control –profile global-iam-profile
d. 使用 CloudFormation 模版设置 Athena 集成,然后继续第三步
注意:
- 替换 S3-bucket-name 为您自己的 S3 Bucket Name,替换 china-iam-profile 为AWS 中国区域 IAM 用户的 AWS CLI profile, 替换 global-iam-profile 为AWS Global 区域 IAM 用户的 AWS CLI profile
- 如果您希望利用无服务器化的方式进行同步,可参考此博客进行配置
3.设置存储 CUR Report 的 S3 Bucket 的访问权限,以便 QuickSight 可以正常读取所需数
4.访问 此站点,输入公司名称和 AWS Account ID 进行模版访问授权
5.打开 Github 链接,选择 “Code → Download ZIP ” 下载 quicksight-cur-deployment-tool
6.进入解压后的文件夹,然后运行 “deployQSCUR.sh” 脚本工具
cd quicksight-cur-deployment-tool-master
bash deployQSCUR.sh
7.脚本运行过程中会收集一些配置信息,按需求填写即可
注:如您完全按照本博客内容进行配置,且计划把 QuickSight Dashboard 部署在美东一区域,全部保持默认值即可
a. Please enter the destination region to deploy this solution(same with Athena/QuickSight) [default:us-east-1]
b. If you know what SPICE is and want to use SPICE mode, type “spice”. [default:DIRECT_QUERY]
c. Please input the database name in Athena, which will be used to connect CUR data on S3
d. Please input the table name within database in previous step, which will be used to connect CUR data on S3
e. Please input the “Query result location” value from Settings in Athena console [default: s3://aws-athena-query-results-ACCOUNTID–REGION/].
8.脚本成功运行后,即可打开 QuickSight Dashboard 进行成本分析
效果展示及视图说明
在部署完成后,您将可以在quicksight的主页面→ 控制面板,找到成功部署的成本分析面板。从模版部署的成本分析面板已经包含了成本概览及常用的主要服务成本分析,您可以通过点击不同的 sheet 以了解帐号中主要服务的使用情况。
在成本概览页面中,您将会看到按月及按日的用量趋势。值得注意的是,这里的成本主要使用Amortized Cost(摊销成本)进行展示。摊销成本的展示方可以把预置型的费用,如一次性预付的RI或者Savings Plans分摊到所覆盖的周期,因此您将不会看到一次性预置费用所带来的成本波动,而是分摊后的实际成本。除此之外,您将会看到“Top movers”,即自动异常检测发现的用量变化较大的服务,从而帮助您更及时地发现异常使用。
*关于按日费用展示:由于预置费用,support费用等周期性费用会统一在每月一号进行扣除而导致费用呈现突增的现象,为了避免影响其它日期的费用展示,默认会在按日展示的视图中隐藏一号费用。
在成本概览的页面中,模版也依然包含了Unblended Cost(非摊销成本)的视图。非摊销成本的展示方式将把预置型的一次付款展示在支付当月,如下图中在多个月份出现浅蓝色的费用突增,这就是一次性预付款带来的费用波动。非摊销成本的展示方式将匹配您的AWS账单费用,以帮助您了解一次性付款对于当月的财务支出影响。
浏览至EC2页面,您将看到更多关于该服务的用量情况,包括帐号中EC2实例的数量及其分布情况,EC2各项费用的细分及用量。值得注意的是EC2包含较多的费用类型,比如EC2实例,EBS,EC2相关的流量费用等均会包含在EC2中,因此EC2页面将帮助您更好地了解细分费用的情况。
作为成本优化的一个重要方式,您可能会购买RI或者Savings Plans,这个情况下,RI及Savings Plans的覆盖情况,利用率将成为您关注的一个重要内容。在EC2页面中,您将可以轻松地了解到RI及Savings Plans的总体覆盖情况,利用率。如下图所示, 每当RI或者Savings Plans过期,增加采购时都会引起覆盖率比较明显的变化,RI/SP覆盖率视图将帮助您了解最新的覆盖情况。对于覆盖率不足的时候,您可能会增加覆盖,同时也需要透过利用率了解是否存在没有被充分利用的预留资源。面板中除了展示利用率,也会展示闲置的具体条目以帮助您更充分地利用闲置RI或者Savings Plans。
AWS上的流量费用采用按需付费的模式,传输费用的类型主要有三类:可用区之间的数据传输,区域与区域的数据传输及数据传出到Internet。在DataTransfer页面中,传输费用及数据量会被单独进行展示以帮助您更好地发现异常流量。例如下图中的ELB DTO(ELB传输到Internet的费用)及Inter-AZ(可用区之间的传输费用)占比较高时,您可能需要进一步分析流量产生的原因。
在DataTransfer页面中,您将会看到资源级别的流量费用情况,如下图中对上月的流量费用进行了资源级别的排序,您将能轻松地定位到top流量费用的资源,从而进一步分析。
如果您使用AWS托管的大数据服务EMR,您将可以在EMR页面找到更多关于集群层面的费用洞察。如下图中,在9月的时候某个EMR集群出现比较明显的费用上涨。结合平均vCPU成本的视图,可以清晰了解到9月的Ondemand费用有比较明显的上升,这意味着集群可能采用更高内存比例的实例。根据这种情况进行及时的机型调整后,10月的集群费用有了明显的下降。通过每天费用的视图,您将及时了解集群费用的波动以快速定为到优化的机会。
自定义分析视图:
如果您想基于现有 QuickSight Dashboard 自定义成本视图,可以在控制台中启用“另存为”功能,然后创建新的 analysis 进行可视化定制。
a. 打开 QuickSight Dashboard,单击右上角的“共享”,然后选择“共享控制面板”
b. 在弹出的窗口中,选择 “管理控制面板访问”
c. 在 “管理控制面板访问”页面中,对需要授权的账号勾选“另存为”选项
d. 在“启用另存为”窗口中单击“确认”,关闭 “管理控制面板访问”弹窗后,QuickSight Dashboard 右上角会新增一个“另存为”选项
e. 单击“另存为” 创建一个新的分析并为其命名
f. 在新建的 Analysis 中单击“Data set” 图标进行编辑
g. 在弹出的 “Data sets in this analysis” 页面中选中 Data set 进行编辑
h. 进入到 Data set 编辑页面后等待所有 CUR 字段加载完成,然后单击 “Save&visualize” 更新 Data set 中的 CUR 字段后,您即可根据自己的需求在 analysis 面板中自定义成本视图了
本方案涉及的主要成本:
1.QuickSight 企业版订阅费,根据订阅方式不同,每月 $18 或 $24 美元
https://aws.amazon.com/cn/quicksight/pricing/
2.Athena 数据查询费用
以美东一区域为例,每扫描 1TB 数据 $5.00 美元
https://aws.amazon.com/cn/athena/pricing/
3.S3 数据存储费用
以美东一区域为例
每 1GB 数据存储1个月成本为 $0.023 美元
每 1,000 个 GET 请求 $0.0004 美元
https://aws.amazon.com/cn/s3/pricing/
4.每天运行 2~3 次的 Glue Crawler,可以使您在 Athena 中的 CUR Table 保持最新状态
以美东一区域为例,每 DPU-Hour $0.44 美元,按秒计费,每运行一次最小计费单元为10分钟
https://aws.amazon.com/cn/glue/pricing/
5.每天运行 2~3 次的 Lambda 程序,用来触发 Glue Crawler
以美东一区域为例,配置为 128MB 内存, 每秒 $0.000002083 美元
https://aws.amazon.com/cn/lambda/pricing/
6.如果您在 EC2 或 Cloud 9 上运行此脚本工具,将会按照实例类型单独收取相关费用
https://aws.amazon.com/cn/ec2/pricing/on-demand/
https://aws.amazon.com/cn/cloud9/pricing/