CloudWatch Loggroup 中失败的 SNS 消息的日志格式

问题描述 投票:0回答:1

我正在构建一个 lambda 函数,用于监控 CloudWatch 日志组中 SNS 消息传送失败的日志。这是我从日志中得到的信息:

{
    “通知”:
    {
        "messageId": "9f807381-7795-5cbd-af1a-2db23e0c112c",
        “时间戳”:“2024-01-30 19:00:41.925”
    },
    “送货”:
    {
        "phoneCarrier": "T-mobile USA Inc.",
        “跨国公司”:800,
        “消息部分数量”:1,
        "目的地": "+1xxxxxxxxxx",
        “美元价格”:0.00831,
        "smsType": "事务性",
        “MCC”:310,
        "providerResponse": "手机已阻止短信",
        “停留时间”:0,
        “停留时间MsUntilDeviceAck”:1304
    },
    “状态”:“失败”
}

我的问题是,当消息发布到主题时,是否可以将此布局或格式配置为包含 topicARN 或 subscriptionARN。我需要这些信息,以便我可以更方便地识别手机阻止消息的接收者;否则它会非常乏味,因为它来自 45 个应用程序之一(因此需要在 45 个数据库中搜索它)。通过 topicARN 或 subscriptionARN,我可以轻松识别接收者所在的应用程序。 非常感谢您的帮助!

sms amazon-cloudwatchlogs
1个回答
0
投票

SNS 支持主题级别的某些目标的传送状态日志记录(SQS、Firehose、Lambda、HTTP、Push)。当为这些目标启用日志记录时,您会在日志中获取主题 ARN 和订阅 ARN。

不幸的是,SMS 传送状态的日志记录似乎不是由相同的代码处理的,并且主题 ARN 确实没有被记录。

要通过SNS向电话号码发送短信,您可以将其发布到该号码订阅的主题,或直接发送到该号码。

不幸的是,负责 SMS 传输日志记录的 AWS 基础设施无法区分这些路径。无论您的消息现在正在发送,它都会被记录在一个日志组中,其名称中包含

DirectPublishToPhoneNumber

 一词,即使该消息最初是通过将其发布到某个主题来发送的。主题 ARN 或订阅 ARN 也不属于这些日志的一部分。

如果您绝对需要将消息传递状态与主题联系起来,则必须推出自己的索引解决方案。您可以通过将主题订阅到 Lambda 或 API Gateway 终端节点(除了 SMS)并将主题 ARN 和消息 ID 记录在 DynamoDB 表或其他位置来实现此目的。通过在此表中查找消息 ID,您将能够将其与主题关联起来。

© www.soinside.com 2019 - 2024. All rights reserved.