亚马逊AWS官方博客

利用QuickSight实现AWS精细化成本管理

问题现状

Amazon QuickSight 是一项云规模的商业智能 (BI) 服务。云上成本一直是客户在上云体验中持续关注的方面,对于不管是业务快速发展期,还是成熟稳定期的客户,成本管理始终是工作中的重中之重。对于和AWS打交道多年的企业客户,已经熟悉了Cost Explorer, CUR (Cost & Usage Report) 和Trusted Advisor这些云上成本管理服务的基本使用,逐渐的对于成本管理提出了更多精细化的要求,大中华区企业支持团队在和企业客户的日常沟通和成本优化的工作支持中,越来越发现Quicksight可以有效的助力企业客户管理者从多维度,多视角获取成本现状和优化方向,从而做出有效决策,同时QuickSight内置的如时间聚合,统计函数等功能可以帮助客户从繁重的通过SQL Query语句来获取细粒度资源使用的工作中解脱出来,通过定制化的可视化的QuickSight视图获得精细化成本管理的体验。

QuickSight 常用概念

  • 数据集(DataSet):在数据集层,您可以从不同的来源中提取数据,定义连接条件,应用初步过滤器,为列提供更友好的名称,并准备数据以在分析层中可视化。
  • 分析(Analysis):您可以在分析中分析和可视化数据,完成后,您可以将分析作为仪表板(Dashboard)发布。在单个工作表中支持多达 30 个视觉对象,每个分析限制为 20 个工作表。
  • 视觉对象(Visual):数据的图形化表示,包含字段列表(Fields list)  ,视觉对象类型(Visual types) 等部分。

准备数据源

(1) 在AWS账号中启用了CUR, 并设置了使用Athena查询报告

https://docs.thinkwithwp.com/zh_cn/cur/latest/userguide/cur-query-athena.html

(2) 通过“AWS Trusted Advisor Explorer”解决方案将Trusted Advisor中的成本优化数据定期更新到S3并可以为Athena查询

https://thinkwithwp.com/solutions/implementations/aws-trusted-advisor-explorer/

巧用QuickSight功能进行精细化管理:

堆积条形图(Stacked Bar Chart)

为每个父维度显示一个条,它在条中使用着色块以显示子维度中的每个项目的相对值。颜色块反映子维度中的每个项目相对于该度量总数的值,堆积条形图使用基于选定度量的最大值的比例。

堆积图案例1:

下图为使用垂直堆积条形图展现近三周内的每周AWS花费,可通过代表不同服务类别的色块的高低看出单周的每个服务的用量趋势:

其中还利用了QuickSight时间聚合功能,更加灵活展示区间效果:

在分析(Analysis)中选择line_item_usage_start_date作为衡量用量时间的字段,聚合方式点选如Aggregate by Week可以有效展示每周用量的对比,客户有时考虑到按日对比用量代表率不足,按月对比用量时效性不佳,在一些运转频率较快的成本优化项目中会选用按周对比来做每周的成本回顾和决策。

另外,此时间聚合功能包含了“年/季度/月/周/日/时/分/秒“也可以有效的弥补Cost Explorer中只能按照“小时/天/月/”三种聚合维度展示的现状。

堆积图案例2:

在低利用率资源的总量统计中,利用堆积条形图按照project聚合,可以快速看到每个project各自的低利用率的分布,快速落实到项目负责人进行进一步低利用率资源梳理,且通过足够长时段数据支撑来排除因为新上项目流量未打满从而造成的低利用率场景等:

KPI (Key Performance Indicator)

使用关键绩效指标 (KPI) 可以直观呈现关键值与其目标值之间的比较。

KPI案例:

利用Trusted Advisor总结出的Monthly Estimated Savings, 可使用KPI显示每月的可节省成本的差值,清楚的显示近期的减少低资源利用的工作进展:

数据透视表(Pivot Table)

可以使用数据透视表显示两个维度的交集的度量值,包含操作如:对数据透视表行或列中的值进行排序, 应用统计函数,为行和列添加总计和小计。

数据透视表案例1:

统计函数中,我们多会利用Difference和percentDifference函数计算出两个计费周期中的环比增幅,比如添加两个Calculated Field分别为ServiceWoW和ServiceWoW%, 内容分别定义为:

Difference(
sum({line_item_unblended_cost}),[{bill_billing_period_start_date}ASC],-1,[{line_item_product_code}])

percentDifference(
sum({line_item_unblended_cost}),[{bill_billing_period_start_date}ASC],-1,[{line_item_product_code}])

选择透视表,字段井(Field wells)中添加如下项目:

点击ServiceWoW,选择“Sort descending”使服务按照cost增量从高到低排序:

下图即为在透视表类型下单个服务每周用量环比值,将增幅最大的排在最上面,对于增幅较多的服务一目了然:

通过替换上述示例中的Difference和percentDifference中{line_item_product_code}项目为{line_item_usage_account_id},或者{line_item_usage_type},可轻松获得两个相邻统计时段的账号层面的费用增长,使用类别层面的费用增长,并按需做排序,最可快看到主要增长来源。

数据透视表案例2:

利用ifelse函数实现未打特定tag的资源花费总量统计。

在Analysis中选择添加Calculated Field,名称为emptycost, 利用ifelse函数挑选出没有打上team tag,或者team tag内容为空的资源:

ifelse(
(isnull({resource_tags_user_team}) OR {resource_tags_user_team}=''),
{line_item_unblended_cost},
0
)

同时添加另一个Calculated Field, 名称为emptycost%,以百分比形式展示

sum(emptycost)/sum({line_item_unblended_cost})

继续选用透视表类型作为Visual Type, 展示效果如下:

可以关注到在透视表的行选项中,我们不仅选择了时间度量项,还加上了服务类别product_servicename, 同步实现通过点击时间度量项前面的“+”来展示每个服务的未打tag的cost比例:

数据透视表案例3:

利用数据透视表计算功能实现未打特定tag的资源花费总量统计,这种方式会将未打team tag (下图中的null项)和打了team tag但是值为空(下图中的empty项)分开显示。

依旧选用透视表, 在Values项目上选择两次line_item_unblended_cost

点击第二个line_item_unblended_cost, 选择Add table calculation – Percent of Total(Percent of Total 函数计算给定单元格占计算中包含的所有单元格总和的百分比), 利用内置函数功能自动显示成百分比形式。

再调整resource_tags_user_team排序,Sort by a->z, 使“null”和“empty”显示到最前面:

最终显示效果:

相应的,当我们要显示每个服务的没打tag的花费占该服务总花费比例时,除了在Rows侧加上”product_servicename”以外,Values处依旧选择两次line_item_unblended_cost, 点击第二个line_item_unblended_cost,选择Add table calculation – Percent of total, 选择Calculate as – Table across(使用 Table across (表横向) 将沿数据透视表中的行应用计算,而不考虑分组), 从而达到目标。

最终显示效果:

结论:

通用巧妙选用视觉对象类型和QuickSight内置的时间聚合,计算函数等功能,可以高效的体现AWS成本增幅,闲置资源来源等,实现精细化成本管理的目标。

本篇作者

Sunny Fang

AWS技术客户经理,主要支持金融,互联网行业客户的架构优化、成本管理、技术咨询等工作,并专注在大数据和容器方向的技术研究和实践。在加入AWS之前,曾就职于Citrix和微软等科技公司,拥有8年虚拟化与公有云领域的架构优化和支持经验。