CloudWatch无法跨维度聚合自定义指标?详解其真实含义
核心概念定义
基于AWS CloudWatch官方定义:
- 指标(metric):按时间排序的数据点集合,由命名空间、指标名称和维度集合唯一标识。
- 维度(dimension):键值对,是指标标识的一部分。比如
Domain=Frankfurt,Server=Prod的ServerStats指标,和Domain=Rio,Server=Beta的ServerStats指标是两个完全独立的指标。
示例场景
假设在法兰克福和里约各有2台服务器(Prod、Beta),定期向CloudWatch上报自定义指标,数据点如下:
Dimensions: Server=Prod, Domain=Frankfurt, Unit: Count, Timestamp: 2016-10-31T12:30:00Z, Value: 105 Dimensions: Server=Beta, Domain=Frankfurt, Unit: Count, Timestamp: 2016-10-31T12:31:00Z, Value: 115 Dimensions: Server=Prod, Domain=Rio, Unit: Count, Timestamp: 2016-10-31T12:32:00Z, Value: 95 Dimensions: Server=Beta, Domain=Rio, Unit: Count, Timestamp: 2016-10-31T12:33:00Z, Value: 97
这些指标在CloudWatch控制台中可见:
文档描述与实际操作的矛盾
官方文档中有这样的描述:
对于部分AWS服务(如Amazon EC2)生成的指标,CloudWatch可以跨维度聚合数据。例如,若您在AWS/EC2命名空间中搜索指标但不指定任何维度,CloudWatch会聚合指定指标的所有数据以生成您请求的统计数据。而对于自定义指标,CloudWatch无法跨维度聚合数据。
我理解的“跨维度聚合”是指仅指定命名空间或指标名、不指定维度,就能获取该名称下所有指标的聚合结果。比如EC2的CPUUtilization指标,无论带InstanceId还是ImageId维度,都能聚合得到整体CPU使用率。
但实际操作中,我通过以下Metric Insights查询,成功聚合了所有Server=Prod的自定义指标:
SELECT SUM(ServerStats) FROM DataCenter WHERE Server = 'Prod'
该查询将Server=Prod,Domain=Frankfurt和Server=Prod,Domain=Rio两个指标的数据求和,结果如下:
澄清说明
文档中提到的“自定义指标无法跨维度聚合”,针对的是传统的CloudWatch指标统计方式:在控制台直接选择指标、不指定维度时,自定义指标不会自动生成聚合后的统计结果,必须明确选择具体维度组合的指标;而AWS服务指标(如EC2)会自动完成这种无维度指定的聚合。
而你使用的SELECT SUM(...)是CloudWatch Metric Insights功能,这是AWS后续推出的增强查询能力,支持对自定义指标进行灵活的跨维度聚合、筛选计算,属于文档描述未覆盖的新功能场景,这就导致了文档描述和实际操作的差异。
内容的提问来源于stack exchange,提问作者YoavKlein

