2. AWS成本与性能度量体系

在AWS生产环境中做成本与性能的协同优化,第一步不是改配置,而是建立一套可信的度量体系。没有度量,优化就只能靠感觉:账单涨了不知道涨在哪里,延迟高了不知道是哪个环节,实例买大了还是买小了也说不清。本节围绕四类工具和两类基础数据(成本分摊标签、性能基线指标)展开,目标是让团队能够回答三个问题:钱花在谁身上、资源用得怎么样、下一步该动哪里。

四类工具的分工

AWS提供的度量工具并不是互相替代的关系,而是处在不同的观察层次上,理解它们的分工比记住功能列表更重要。

  • Cost Explorer:面向“钱”的聚合与下钻。它按服务、账号、区域、标签、使用类型等维度展示历史成本与用量,支持按日/月粒度查看趋势,也能做简单的成本预测。它的价值在于把账单从一张总额变成可归因的结构。
  • CloudWatch:面向“资源运行状态”的时序数据。它采集CPU、内存(需Agent)、磁盘IO、网络、请求延迟、错误率等指标,是性能基线的数据来源,也是告警的触发点。
  • Trusted Advisor:面向“最佳实践检查”的规则引擎。它给出成本、性能、安全、容错、服务配额等类别的检查结果,例如闲置的负载均衡器、未关联的弹性IP、低利用率的EC2实例。它提供的是线索,不是精确结论。
  • Compute Optimizer:面向“规格是否合适”的推荐引擎。它基于CloudWatch历史指标,对EC2、Auto Scaling组、EBS、Lambda等给出过度配置或配置不足的判断,并给出建议规格。它回答的是“这台机器该不该换型号”。

这四者的关系可以概括为:Cost Explorer告诉你钱在哪,CloudWatch告诉你资源在怎么跑,Trusted Advisor告诉你哪里可能有问题,Compute Optimizer告诉你具体换成什么。它们共同构成从“发现异常”到“定位对象”再到“给出动作”的链路。

AWS成本与性能度量体系:从数据源到优化动作 数据源层 成本分摊标签 Env / Team / App / CostCenter CloudWatch指标 CPU / 内存 / 延迟 / 错误率 账单与用量记录 按服务/区域/使用类型 资源清单与配置 实例规格 / 挂载 / 配额 分析工具层 Cost Explorer 成本聚合 · 趋势 · 下钻 按标签归因 CloudWatch 指标时序 · 告警 · 基线 日志与仪表盘 Trusted Advisor 最佳实践检查 闲置 / 低利用率线索 Compute Optimizer 规格推荐 过度/不足配置判断 输出与动作层 成本归因视图 按团队/应用分摊 识别异常增长项 性能基线 P95延迟 / 错误率阈值 资源利用率区间 优化候选清单 闲置资源 / 低利用率 规格调整建议 执行与验证 变更后对比 成本/性能双看 反馈校准

成本分摊标签策略

Cost Explorer能按标签拆分成本,前提是资源上确实打了标签,而且标签键值规范统一。标签策略的核心不是“多打标签”,而是“用最少的标签键覆盖归因需求”。实践中建议固定四个维度:

  • Env:prod / staging / dev,用于区分生产与非生产成本,避免开发环境消耗被误算进生产预算。
  • Team:归属团队,用于内部结算和责任人定位。
  • App:应用或服务名,用于按业务线归因。
  • CostCenter:财务成本中心编码,用于与财务口径对齐。

标签落地要解决两个工程问题。第一是激活:在Billing控制台的Cost Allocation Tags中把自定义标签激活为成本分配标签,否则Cost Explorer看不到它们。第二是覆盖:EC2、EBS、RDS、S3、Lambda等主要计费资源都要打上,且要防止拼写漂移(例如“prod”和“Prod”会被当成两个值)。可以用AWS Config规则或Tag Policies约束允许的键值集合,把标签合规变成可检查项。

一个常见的判断依据是“未分配成本占比”。在Cost Explorer中按标签分组后,如果某个标签出现大量“No tag key”或空值,说明覆盖不足,此时任何按团队的成本结论都不可靠。建议把未分配成本控制在总成本的5%以内作为治理目标。

性能基线指标

性能基线是“正常运行时指标应该落在什么范围”的书面约定。没有基线,就无法判断一次延迟上升是异常还是正常波动。建立基线时,建议对每类资源选取少量关键指标,并明确统计口径:

资源类型关键指标建议基线口径
EC2 / ASGCPUUtilization、内存使用率生产稳态CPU 20%–60%,内存 40%–75%
应用负载P95响应时间、5xx错误率P95 < 300ms,错误率 < 0.5%
RDSCPU、连接数、读延迟连接数 < 最大连接数70%
EBSVolumeQueueLength、吞吐队列长度持续 < 1

基线不是拍脑袋定的,而是从CloudWatch历史数据中取一段稳定期(例如过去30天)的P50和P95,再结合业务SLO调整。基线一旦确定,就应配置对应的CloudWatch告警,让偏离可被自动发现。需要注意的是,内存、磁盘空间等指标默认不采集,需要在实例上安装CloudWatch Agent并配置采集项,否则基线里会缺一块。

把工具串成一条判断链

实际工作中,这四个工具通常按以下顺序使用:先用Cost Explorer按标签看月度趋势,发现某个Team或App成本环比上升;再用CloudWatch查看对应资源的CPU、内存、延迟是否同步变化;如果指标显示资源长期低负载,用Compute Optimizer获取规格建议;同时用Trusted Advisor检查是否存在闲置的EIP、未使用的负载均衡器等“零收益成本”。最后把结论落到变更上,并在变更后重新观察成本和性能两条曲线,确认优化没有以牺牲稳定性为代价。

标签是成本归因的前提,基线是性能判断的前提。两者都属于“先建度量、再谈优化”的基础设施,建议在优化项目启动前先完成标签覆盖检查和基线定义,否则后续所有优化动作都缺少可验证的参照。
Compute Optimizer和Trusted Advisor的推荐基于历史指标,存在滞后性。对于有明显波峰波谷或即将上量的业务,不能直接照搬推荐规格,应结合业务排期和压测结果人工复核,避免把“当前低负载”误判为“长期低负载”。