

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

# Amazon SNS 中的主动跟踪
<a name="sns-active-tracing"></a>

[用于跟踪和分析用户通过您的亚马逊 SNS 主题传送 AWS X-Ray 到 Amazon Data [Firehose、Amazon [AWS Lambda](https://docs.aws.amazon.com/xray/latest/devguide/xray-services-lambda.html)](sns-firehose-as-subscriber.md)SQS 和终端节点订阅的请求。](https://docs.aws.amazon.com/xray/latest/devguide/xray-services-sqs.html) HTTP/S 

使用 X-Ray，您可以 end-to-end查看每个请求，从而使您能够：
+ 识别哪些服务在调用您的 Amazon SNS 主题，以及其订阅下游包含哪些服务。
+ 分析各类延迟，例如：
  + 请求在 Amazon SNS 主题中等待处理的时间。
  + 传输到每个订阅端点所花费的时间。

**重要**  
订阅数很多的 Amazon SNS 主题可能达到大小限制，无法完全跟踪。有关跟踪文档大小限制的信息，请参阅《 AWS 一般参考》中的 [X 射线服务配额](https://docs.aws.amazon.com/general/latest/gr/xray.html#limits_xray)。

如果您从正在跟踪的服务中调用 Amazon SNS API，则 Amazon SNS 会传递跟踪，即使在 API 上未启用 X-Ray 跟踪也是如此。

Amazon SNS 对于标准主题和 FIFO 主题都支持 X-Ray 跟踪。您可以使用 [Amazon SNS 控制台](https://console.aws.amazon.com/sns/v3/home)、[Amazon SNS `SetTopicAttributes` API](https://docs.aws.amazon.com/sns/latest/api/API_SetTopicAttributes.html)、[Amazon Simple Notification Service CLI 参考](https://docs.aws.amazon.com/cli/latest/reference/sns/)或 [CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sns-topic.html) 为 Amazon SNS 主题启用 X-Ray。

要了解有关将 Amazon SNS 与 X-Ray 结合使用的更多信息，请参阅《 AWS X-Ray 开发人员指南》中的 [Amazon SNS 和 AWS X-Ray](https://docs.aws.amazon.com/xray/latest/devguide/xray-services-sns.html)。

## 主动跟踪权限
<a name="sns-active-tracing-permissions"></a>

使用 Amazon SNS 控制台时，Amazon SNS 会尝试为 Amazon SNS 主题创建调用 X-Ray 所需的权限。如果您没有足够的权限使用 Amazon SNS 控制台，则尝试可能会被拒绝。有关更多信息，请参阅[Amazon SNS 中的 Identity and Access Management](security-iam.md)和[用于 Amazon SNS 访问控制的示例案例](sns-access-policy-use-cases.md)。

使用 CLI 时，必须手动配置权限。这些权限是使用资源策略配置的。有关在 X-Ray 中使用所需权限的更多信息，请参阅 [Amazon SNS 和 AWS X-Ray](https://docs.aws.amazon.com/xray/latest/devguide/xray-services-sns.html)。

## 使用控制台对 Amazon SNS 主题启用主动跟踪 AWS
<a name="sns-active-tracing-enable"></a>

在 Amazon SNS 主题上启用主动跟踪后，它会读取跟踪 ID，根据跟踪 ID 向客户发送数据，并将跟踪 ID 传播到下游服务。

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

1. 选择一个主题或创建一个新主题。有关创建主题的详细信息，请参阅[创建 Amazon SNS 主题](sns-create-topic.md)。

1. 在**创建主题**页面的**详细信息**部分，选择主题类型：**FIFO**或**标准**。

   1. 输入主题的**名称**。

   1. （可选）输入主题的**显示名称**。

1. 展开 **Active tracing**（主动跟踪），然后选择 **Use active tracing**（使用主动跟踪）。

为亚马逊 SNS 主题启用 X-Ray 后，您可以使用 [X-Ray 服务地图](https://docs.aws.amazon.com/xray/latest/devguide/xray-services-sns.html)查看该主题的 end-to-end跟踪和服务地图。

## 使用软件开发工具包对 Amazon SNS 主题启用主动跟踪 AWS
<a name="sns-enable-active-tracing-sdk"></a>

以下代码示例展示了如何使用适用于 Java 的 S AWS DK 在 Amazon SNS 主题上启用主动跟踪。

```
public static void enableActiveTracing(SnsClient snsClient, String topicArn) {

        try {

            SetTopicAttributesRequest request = SetTopicAttributesRequest.builder()
                .attributeName("TracingConfig")
                .attributeValue("Active")
                .topicArn(topicArn)
                .build();

            SetTopicAttributesResponse result = snsClient.setTopicAttributes(request);
            System.out.println("\n\nStatus was " + result.sdkHttpResponse().statusCode() + "\n\nTopic " + request.topicArn()
                + " updated " + request.attributeName() + " to " + request.attributeValue());

        } catch (SnsException e) {
            System.err.println(e.awsErrorDetails().errorMessage());
        }
    }
```

## 使用 CLI 在 Amazon SNS 主题上启用主动跟踪 AWS
<a name="sns-enable-active-tracing-cli"></a>

以下代码示例显示了如何使用 CLI AWS 在 Amazon SNS 主题上启用主动跟踪。

```
aws sns set-topic-attributes \
    --topic-arn arn:aws:sns:us-west-2:123456789012:MyTopic \
    --attribute-name TracingConfig \
    --attribute-value Active
```

## 使用在 Amazon SNS 主题上启用主动跟踪 CloudFormation
<a name="sns-enable-active-tracing-cf"></a>

以下 CloudFormation 堆栈显示了如何对 Amazon SNS 主题启用主动跟踪。

```
AWSTemplateFormatVersion: 2010-09-09
Resources:
  MyTopicResource:
    Type: 'AWS::SNS::Topic'
    Properties:
      TopicName: 'MyTopic'
      TracingConfig: 'Active'
```

## 验证为您的主题启用了主动跟踪
<a name="sns-active-tracing-verify"></a>

您可以使用 Amazon SNS 控制台来验证是否对您的主题启用了主动跟踪，或者资源策略是否添加失败。

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

1. 在左侧导航窗格中，选择**主题**。

1. 在 **Topics**（主题）页上，选择一个主题。

1. 请选择 **Integrations**（集成）选项卡。

   启用主动跟踪后，会显示绿色的 **Active**（活动）图标。

1. 如果您启用了主动跟踪但没有看到资源策略已添加，请选择 **Create policy**（创建策略）以添加所需的额外权限。

![\[屏幕截图显示了中名为 “SampleTopic” 的 Amazon SNS 主题的详细信息。 AWS 管理控制台它表示已为该主题启用 AWS X-Ray 主动跟踪，但缺少允许 Amazon SNS 发送跟踪数据的资源策略。提供了“创建策略”按钮来解决此问题。\]](http://docs.aws.amazon.com/zh_cn/sns/latest/dg/images/xray.png)


## 测试主动跟踪
<a name="sns-active-tracing-test"></a>

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

1. 创建 Amazon SNS 主题。有关如何执行该操作的详细信息，请参阅 [要使用创建主题 AWS 管理控制台](sns-create-topic.md#create-topic-aws-console)。

1. 展开 **Active tracing**（主动跟踪），然后选择 **Use active tracing**（使用主动跟踪）。

1. 向 Amazon SNS 主题发布消息。有关如何执行该操作的详细信息，请参阅 [要使用 Amazon SNS 主题发布消息 AWS 管理控制台](sns-publishing.md#sns-publishing-messages)。

1. 使用 [X-Ray 服务地图](https://docs.aws.amazon.com/xray/latest/devguide/xray-services-sns.html)查看该主题的 end-to-end跟踪和服务地图。

![\[显示 AWS X-Ray 服务地图，其中显示了从客户端流向名为 “” xray-topic 的 Amazon SNS 主题的请求的跟踪。 然后，消息将分发到各种下游服务，包括亚马逊 SQS 队列、Lambda 函数、Kinesis 消防水带和远程服务。每个连接都会显示诸如以毫秒（ms）为单位的延迟和每分钟交易速率（t/min）等指标，这有助于分析性能并识别消息传递过程中存在的任何延迟问题。\]](http://docs.aws.amazon.com/zh_cn/sns/latest/dg/images/xray-troubleshooting.png)
