

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

# Amazon SNS 短信活动监控
<a name="sms_stats"></a>

通过监控您的 SMS 活动，您可以跟踪目标电话号码、成功或失败的传输、失败的原因、成本及其他信息。Amazon SNS 通过在控制台中汇总统计数据、向亚马逊 CloudWatch发送信息以及将每日短信使用报告发送到您指定的亚马逊 S3 存储桶来提供帮助。

# 查看 Amazon SNS 短信传输统计数据
<a name="sms_stats_console"></a>

您可以使用 Amazon SNS 控制台查看您近期 SMS 传输的统计数据。

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

1. 在控制台菜单上，将区域选择器设置为[支持 SMS 消息收发的区域](https://docs.amazonaws.cn/sms-voice/latest/userguide/phone-numbers-sms-by-country.html)。

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

1. 在 **Text messaging (SMS) (文本消息(SMS))** 页面上的 **Account stats (账户统计数据)** 部分中，查看关于您的事务处理和促销 SMS 信息传输的图表。每个图表显示之前 15 天内的以下数据：
   + 传输率（成功传输的百分比）
   + 发送（传输尝试的数量）
   + 失败（传输失败的数量）

在此页面，您还可以选择 **Usage**（使用量）按钮转到存储您的每日使用情况报告的 Amazon S3 存储桶。有关更多信息，请参阅 [订阅 Amazon SNS 每日短信使用量报告](sms_stats_usage.md)。

# 使用亚马逊 CloudWatch 指标和日志监控 Amazon SNS 短信发送情况
<a name="sms_stats_cloudwatch"></a>

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

## 查看亚马逊 CloudWatch 指标
<a name="sms_stats_cloudwatch_metrics"></a>

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

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

## 查看 CloudWatch 日志
<a name="sns-viewing-cloudwatch-logs"></a>

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

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

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

1. 在控制台菜单上，将区域选择器设置为[支持 SMS 消息收发的区域](https://docs.amazonaws.cn/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 用户指南*中的[为 Amazon 服务创建](https://docs.amazonaws.cn/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 传输的示例日志
<a name="example-log-successful-sms-delivery"></a>

成功 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 传输的示例日志
<a name="example-log-failed-sms-delivery"></a>

失败 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 传输失败的原因
<a name="sms_stats_delivery_fail_reasons"></a>

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

# 订阅 Amazon SNS 每日短信使用量报告
<a name="sms_stats_usage"></a>

您可以通过从 Amazon SNS 订阅每日使用量报告来监控您的 SMS 消息传输。在每个您至少发送了一条 SMS 消息的日子，Amazon SNS 都将向您指定的 Amazon S3 存储桶发送 CSV 文件格式的使用情况报告。SMS 使用报告需要 24 小时才在 Amazon S3 存储桶中可用。

## 每日使用量报告信息
<a name="daily_usage_info"></a>

该使用情况报告包括通过您的账户发送的每条 SMS 消息的以下信息。

 请注意，此报告不包含发送到已选择退出的收件人的消息。
+ 消息发布时间（UTC 时间）
+ 消息 ID
+ 目标电话号码
+ 消息类型
+ 传输状态
+ 消息价格 (USD)
+ 分段编号（如果一条消息过长，则会拆分为多个分段）
+ 分段总数

**注意**  
如果 Amazon SNS 没有收到部分编号，我们将其值设置为零。

## 订阅每日使用量报告
<a name="subscribe-to-daily-usage-reports"></a>

要订阅每日使用情况报告，您必须通过适当的权限创建 Amazon S3 存储桶。

**为您的每日使用情况报告创建 Amazon S3 存储桶**

1. 从发送短信 Amazon Web Services 账户 的，登录 [Amazon S3 控制台](https://console.amazonaws.cn/s3/)。

1. 选择**创建存储桶**。

1. 对于**存储桶名称**，我们建议您输入对账户和组织唯一的名称。例如，使用模式 `<my-bucket-prefix>-<account_id>-<org-id>`。

   有关存储桶名称约定和限制的信息，请参阅 *Amazon Simple Storage Service 用户指南*中的[存储桶命名规则](https://docs.amazonaws.cn/AmazonS3/latest/userguide/BucketRestrictions.html#bucketnamingrules)。

1. 选择**创建**。

1. 在 **All Buckets**（所有存储桶）表中，选择存储桶。

1. 在 **Permissions**（权限）部分中，选择 **Bucket policy**（存储桶策略）。

1. 在 **Bucket Policy Editor**（存储桶策略编辑器窗口中，提供允许 Amazon SNS 服务委托人写入您的存储桶的策略。有关示例，请参阅[存储桶策略的示例](#example_bucket_policy)。

   如果您使用示例策略，请记得*my-s3-bucket*使用您在步骤 3 中选择的存储桶名称进行替换。

1. 选择**保存**。

**订阅每日使用情况报告**

1. 登录 [Amazon SNS 控制台](https://console.amazonaws.cn/sns/)。

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

1. 在 **Text messaging (SMS) (文本消息收发(SMS))** 页上，在 **Text messaging preferences (文本消息收发首选项)** 部分中，选择 **Edit (编辑)**。  
![\[Amazon SNS 控制台中的“文本消息首选项”部分\]](http://docs.amazonaws.cn/sns/latest/dg/images/daily-usage-report1.png)

1. 在 **Edit text messaging preferences (编辑文本消息收发首选项)** 页上，在 **Details (详细信息)** 部分中，指定 **Amazon S3 bucket name for usage reports (使用率报告的 Amazon S3 存储桶名称)**。  
![\[Amazon SNS 控制台中“编辑文本消息发送首选项”页面的“详细信息”部分\]](http://docs.amazonaws.cn/sns/latest/dg/images/daily-usage-report2.png)

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

### 存储桶策略的示例
<a name="example_bucket_policy"></a>

以下策略允许 Amazon SNS 服务委托人执行 `s3:PutObject`、`s3:GetBucketLocation` 和 `s3:ListBucket` 操作。

Amazon 为所有服务提供工具，其服务委托人已被授予访问您账户中资源的权限。当 Amazon S3 存储桶策略声明中的主体是[混淆代理问题](https://docs.amazonaws.cn/IAM/latest/UserGuide/confused-deputy.html)时。要限制哪些存储桶中的哪些区域和账户可以接收每日使用情况报告，请使用 `aws:SourceArn`，如下面的示例所示。如果您不想限制可生成这些报告的区域，请使用 `aws:SourceAccount` 限制生成报告的账户。如果您不知道源的 ARN，请参阅 `aws:SourceAccount`。

在您创建 Amazon S3 存储桶以便从 Amazon SNS 接收每日 SMS 使用情况报告时，请使用以下包含混淆代理人保护的示例。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AllowPutObject",
            "Effect": "Allow",
            "Principal": {
                "Service": "sns.amazonaws.com"
            },
            "Action": "s3:PutObject",
            "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*",
            "Condition": {
                "StringEquals": {
                    "aws:SourceAccount": "account_id"
                },
                "ArnLike": {
                    "aws:SourceArn": "arn:aws:sns:us-west-1:123456789012:*"
                }
            }
        },
        {
            "Sid": "AllowGetBucketLocation",
            "Effect": "Allow",
            "Principal": {
                "Service": "sns.amazonaws.com"
            },
            "Action": "s3:GetBucketLocation",
            "Resource": "arn:aws:s3:::amzn-s3-demo-bucket",
            "Condition": {
                "StringEquals": {
                    "aws:SourceAccount": "account_id"
                },
                "ArnLike": {
                    "aws:SourceArn": "arn:aws:sns:us-west-1:123456789012:*"
                }
            }
        },
        {
            "Sid": "AllowListBucket",
            "Effect": "Allow",
            "Principal": {
                "Service": "sns.amazonaws.com"
            },
            "Action": "s3:ListBucket",
            "Resource": "arn:aws:s3:::amzn-s3-demo-bucket",
            "Condition": {
                "StringEquals": {
                    "aws:SourceAccount": "account_id"
                },
                "ArnLike": {
                    "aws:SourceArn": "arn:aws:sns:us-west-1:123456789012:*"
                }
            }
        }
    ]
}
```

------

**注意**  
您可以将使用情况报告发布到 Amazon S3 存储桶，这些存储桶由 Amazon S3 策略中 `Condition` 元素指定的 Amazon Web Services 账户 拥有。要将使用情况报告发布到其他人 Amazon Web Services 账户 拥有的 Amazon S3 存储桶，请参阅[如何从另一个存储桶复制 Amazon S3 对象 Amazon Web Services 账户？](https://www.amazonaws.cn/premiumsupport/knowledge-center/copy-s3-objects-account/) 。

### 每日使用量报告的示例
<a name="example_report"></a>

在您订阅每日使用量报告后，Amazon SNS 会每天将包含使用量数据的 CSV 文件放在以下位置：

```
<my-s3-bucket>/SMSUsageReports/<region>/YYYY/MM/DD/00x.csv.gz
```

每个文件可包含最多 50000 条记录。如果一天内的记录超出此配额，则 Amazon SNS 会添加多个文件。下面显示了一个示例报告：

```
PublishTimeUTC,MessageId,DestinationPhoneNumber,MessageType,DeliveryStatus,PriceInUSD,PartNumber,TotalParts
2016-05-10T03:00:29.476Z,96a298ac-1458-4825-a7eb-7330e0720b72,1XXX5550100,Promotional,Message has been accepted by phone carrier,0.90084,0,1
2016-05-10T03:00:29.561Z,1e29d394-d7f4-4dc9-996e-26412032c344,1XXX5550100,Promotional,Message has been accepted by phone carrier,0.34322,0,1
2016-05-10T03:00:30.769Z,98ba941c-afc7-4c51-ba2c-56c6570a6c08,1XXX5550100,Transactional,Message has been accepted by phone carrier,0.27815,0,1
```