You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于MessageAttributes在CloudWatch中按服务分区监控SNS?

解决方案:基于SNS MessageAttributes在CloudWatch分区监控消息量

核心结论

可以实现按MessageAttributes中的服务标识分区监控,且无需创建额外过滤订阅(避免成本浪费),推荐通过CloudWatch日志投递+Metric Filter的方案实现。

具体实现步骤

  • 开启SNS主题日志投递
    进入SNS主题配置页面,找到「日志」设置,关联一个CloudWatch Logs日志组,确保日志输出包含MessageAttributes字段(默认开启后会包含完整消息元数据)。这一步仅产生CloudWatch日志存储和 ingestion 的低成本,不会增加SNS订阅相关费用。

  • 创建CloudWatch Metric Filter

    1. 进入关联的CloudWatch Logs日志组,点击「创建指标过滤器」;
    2. 编写过滤模式匹配MessageAttributes中的服务标识字段(假设你的服务标识key为service_id,过滤模式示例:{$.MessageAttributes.service_id.StringValue = "*"});
    3. 配置自定义指标:设置指标命名空间(如SNS/ServiceMetrics)、指标名称(如MessagePublishCount),并将提取到的service_id值设为指标维度(如维度名ServiceId);
    4. 保存后,CloudWatch会自动按服务标识分区统计消息发布量。

关于过滤策略的成本担忧

你担心的成本问题确实存在:如果为每个服务创建带过滤策略的SNS订阅,即使没有实际消费端点,符合过滤条件的消息仍会被投递到订阅端点(如SQS),产生额外的消息交付费用。而上述日志+Metric Filter的方案完全复用现有单订阅架构,不会产生额外SNS投递成本,仅需承担少量CloudWatch日志和自定义指标费用,成本可控。

替代方案(需修改后端代码)

如果不想依赖日志投递,也可以让每个后端服务在发布SNS消息的同时,调用CloudWatch的PutMetricData接口,主动上报自身的消息计数指标,并携带ServiceId维度。这种方案无需日志,但需要修改所有后端服务的代码逻辑。

内容的提问来源于stack exchange,提问作者Yaakov Bressler

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 21:57:32