CloudWatch日志中失败SNS消息日志格式配置咨询
CloudWatch日志中失败SNS消息日志格式配置咨询
嗨,这个需求完全可以实现!你不用再挨个查45个数据库了——SNS支持配置投递状态日志,让失败消息的CloudWatch日志自动带上Topic ARN和Subscription ARN。下面是具体的实现方式:
核心思路
SNS的**投递状态日志(Delivery Status Logging)**功能允许你自定义日志中包含的元数据,其中就包括你需要的Topic ARN和Subscription ARN。默认情况下可能没开启这些字段,但通过简单配置就能添加上。
具体配置步骤
1. 通过AWS控制台配置
- 打开SNS控制台,找到你要监控的主题(如果是多个主题,也可以批量配置)
- 进入主题的配置标签页,找到「投递状态日志」板块
- 点击「编辑」,首先确保已经启用了投递状态日志(选择对应的CloudWatch日志组,以及具备权限的IAM角色)
- 在「日志格式」选择JSON(和你现在收到的格式一致),然后勾选「包含Topic ARN」和「包含Subscription ARN」选项
- 保存配置后,新的失败投递日志就会自动带上这两个字段
2. 通过CLI/API配置
如果需要批量自动化配置,可以用AWS CLI或者SDK调用对应的接口:
- 对于主题,使用
aws sns set-topic-attributes命令,设置LoggingConfig属性,指定includeTopicArn=true和includeSubscriptionArn=true:
aws sns set-topic-attributes \ --topic-arn arn:aws:sns:us-east-1:123456789012:your-topic \ --attribute-name LoggingConfig \ --attribute-value '{"CloudWatchLogsLogGroupArn":"arn:aws:logs:us-east-1:123456789012:log-group:your-log-group:*","IncludeTopicArn":true,"IncludeSubscriptionArn":true}'
- 对于单个订阅,也可以用
aws sns set-subscription-attributes单独配置订阅的日志属性
配置后的日志示例
配置完成后,你收到的失败日志会新增对应的ARN字段,大概是这样:
{ "notification": { "messageId": "9f807381-7795-5cbd-af1a-2db23e0c112c", "timestamp": "2024-01-30 19:00:41.925", "topicArn": "arn:aws:sns:us-east-1:123456789012:your-app-topic", "subscriptionArn": "arn:aws:sns:us-east-1:123456789012:your-app-topic:xxxx-xxxx-xxxx" }, "delivery": { "phoneCarrier": "T-mobile USA Inc.", "mnc": 800, "numberOfMessageParts": 1, "destination": "+1xxxxxxxxxx", "priceInUSD": 0.00831, "smsType": "Transactional", "mcc": 310, "providerResponse": "Phone has blocked SMS", "dwellTimeMs": 0, "dwellTimeMsUntilDeviceAck": 1304 }, "status": "FAILURE" }
注意事项
- 确保配置的IAM角色具备SNS写入CloudWatch日志的权限,以及CloudWatch日志组的写入权限
- 如果是跨账号的主题或订阅,需要额外配置跨账号的权限策略,保证日志能正常投递到你的CloudWatch日志组
- 配置生效后,只有新产生的失败日志会带上ARN字段,历史日志不会自动更新
这样一来,你就能直接通过日志里的Topic ARN或Subscription ARN快速定位到对应的应用,不用再折腾45个数据库啦!
备注:内容来源于stack exchange,提问作者Haiyu Hou
相关产品推荐
相关产品推荐

