如何基于自定义指标创建AWS CloudWatch告警并实现错误跨维度聚合
AWS CloudWatch自定义指标全局错误告警解决方案
你当前上报的自定义指标采用了EMF(嵌入式指标格式),绑定的维度组合为[LogGroup, ServiceName, ServiceType, HttpMethod, Hostname],CloudWatch本身确实不支持直接对已有的细粒度维度指标做跨维度聚合告警,可行方案如下:
方案1:EMF新增粗粒度维度组合(官方推荐最优方案)
不需要额外生成完整的指标组,仅需要修改你当前EMF配置中的Dimensions数组,新增一组剔除HttpMethod、Hostname的维度组合即可,修改后的配置示例如下:
"_aws": { "Timestamp": 1629271402304, "CloudWatchMetrics": [ { "Dimensions": [ [ "LogGroup", "ServiceName", "ServiceType", "HttpMethod", "Hostname" ], // 新增粗粒度维度组合,用于全局聚合 [ "LogGroup", "ServiceName", "ServiceType" ] ], "Metrics": [ { "Name": "latency", "Unit": "Milliseconds" }, { "Name": "errors", "Unit": "Count" } ], "Namespace": "ExternalAPI" } ] }
修改后CloudWatch会自动生成两套时间序列:
- 全维度序列:保留原有的细粒度维度,用于后续问题排查时按HttpMethod、Hostname过滤统计
- 粗粒度序列:仅保留三个通用维度,直接对这个序列的
errors指标做聚合统计就能设置全局错误告警,计算延迟最低,额外产生的指标成本也极低。
方案2:使用Metric Math聚合所有细粒度序列(无需修改上报逻辑)
如果暂时不想调整EMF上报配置,可以通过CloudWatch Metric Math的SUM()函数把所有细粒度的errors时间序列加总,对计算结果设置告警。
该方案存在两个限制:
- 单个Metric Math告警最多支持引用100个时间序列,如果你的HttpMethod和Hostname的组合数量超过100,无法覆盖全量数据
- 告警计算延迟高于方案1,长期使用的成本也更高
方案3:基于Contributor Insights做统计(适合大维度基数场景)
如果你的维度组合超过100种,又不想修改上报逻辑,可以基于EMF对应的日志组开启Contributor Insights,配置规则统计所有错误事件的总数,再对统计结果设置告警即可。该方案适合维度基数很大的场景,但使用成本高于方案1。
内容的提问来源于stack exchange,提问作者lobbin
相关产品推荐
相关产品推荐

