

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 使用亚马逊 CloudWatch 指标和日志监控 Amazon SNS 短信发送情况
查看 CloudWatch 指标和日志

您可以使用 Amazon CloudWatch 和 Amaz CloudWatch on Logs 来监控您的短信发送情况。

## 查看亚马逊 CloudWatch 指标


Amazon SNS 会自动收集有关您发送短信的指标并将其推送到亚马逊。 CloudWatch您可以使用 CloudWatch 监控这些指标并创建警报，以便在指标超过阈值时提醒您。例如，您可以监控 CloudWatch 指标以了解您的短信发送率和 month-to-date短信费用。

有关监控 CloudWatch 指标、设置 CloudWatch 警报和可用指标类型的信息，请参阅[使用监控亚马逊 SNS 主题 CloudWatch](sns-monitoring-using-cloudwatch.md)。

## 查看 CloudWatch 日志


通过启用 Amazon SNS 写入亚马逊 CloudWatch 日志，您可以收集有关成功和不成功发送短信的信息。对于您发送的每条 SMS 消息，Amazon SNS 会写入日志，其中包括消息价格、成功或失败状态、失败原因（如果消息发送失败）、消息停留时间以及其他信息。

**启用和查看 SMS 消息的 CloudWatch 日志**

1. 登录 [Amazon SNS 控制台](https://console.aws.amazon.com/sns/home)。

1. 在控制台菜单上，将区域选择器设置为[支持 SMS 消息收发的区域](https://docs.aws.amazon.com/general/latest/gr/end-user-messaging.html)。

1. 在导航面板上，选择**文本消息(SMS)**。

1. 在**移动文本消息(SMS)** 页上，在**文本消息发送首选项**部分中，选择**编辑**。

1. 在下一页上，展开 **Delivery status logging**（传输状态日志记录）部分。

1. 对于**成功采样率**，请指定 Amazon SNS 将在日志中 CloudWatch 写入日志的成功发送短信的百分比。例如：
   + 要仅将失败传输写入日志，请将此值设为 0。
   + 要将 10% 的成功传输写入日志，请将其设为 10。

   如果您不指定百分比，Amazon SNS 会将所有成功传输写入日志。

1. 为提供所需的权限，请执行以下操作之一：
   + 要创建新的服务角色，请选择 **Create new service role**（创建新的服务角色），然后选择 **Create new roles**（创建新角色）。在下一页上，选择 **Allow**（允许）以授予 Amazon SNS 对您账户资源的写入访问权限。
   + 要使用现有服务角色，请选择 **Use existing service role**（使用现有服务角色），然后将 ARN 名称粘贴到 **IAM role for successful and failed deliveries**（成功和失败传输的 IAM 角色）框中。

     您指定的服务角色必须允许对账户资源进行写入访问。有关创建 IAM 角色的更多信息，请参阅 I *AM 用户指南*中的[为 AWS 服务创建](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-service.html#roles-creatingrole-service-console)角色。

1. 选择**保存更改**。

1. 回到 **Mobile text messaging (SMS)**（移动文本消息 (SMS)）页面上，转至 **Delivery status logs**（传输状态日志）部分查看任何可用的日志。
**注意**  
根据目标电话号码的运营商，Amazon SNS 控制台中显示传输日志最长可能需要 72 小时。

## 成功 SMS 传输的示例日志


成功 SMS 传输的传输状态日志与下面的示例类似：

```
{
    "notification": {
        "messageId": "34d9b400-c6dd-5444-820d-fbeb0f1f54cf",
        "timestamp": "2016-06-28 00:40:34.558"
    },
    "delivery": {
        "phoneCarrier": "My Phone Carrier",
        "mnc": 270,
        "numberOfMessageParts": 1,
        "destination": "+1XXX5550100",
        "priceInUSD": 0.00645,
        "smsType": "Transactional",
        "mcc": 310,
        "providerResponse": "Message has been accepted by phone carrier",
        "dwellTimeMs": 599,
        "dwellTimeMsUntilDeviceAck": 1344
    },
    "status": "SUCCESS"
}
```

## 失败 SMS 传输的示例日志


失败 SMS 传输的传输状态日志与下面的示例类似：

```
{
    "notification": {
        "messageId": "1077257a-92f3-5ca3-bc97-6a915b310625",
        "timestamp": "2016-06-28 00:40:34.559"
    },
    "delivery": {
        "mnc": 0,
        "numberOfMessageParts": 1,
        "destination": "+1XXX5550100",
        "priceInUSD": 0.00645,
        "smsType": "Transactional",
        "mcc": 0,
        "providerResponse": "Unknown error attempting to reach phone",
        "dwellTimeMs": 1420,
        "dwellTimeMsUntilDeviceAck": 1692
    },
    "status": "FAILURE"
}
```

## SMS 传输失败的原因


`providerResponse` 属性中提供失败的原因。SMS 消息传输失败可能是因为以下原因：
+ 被电话运营商作为垃圾消息屏蔽
+ 目的地位于阻止列表中
+ 电话号码无效
+ 消息正文无效
+ 电话运营商已屏蔽此消息
+ 电话运营商目前无法访问/不可用
+ 电话已屏蔽 SMS
+ 电话位于阻止列表中
+ 电话当前无法访问/可用
+ 电话号码已退出
+ 此传输会超过最高价格
+ 尝试联系电话时发生未知错误