Amazon SNS 中的主动跟踪 - Amazon Simple Notification Service

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

Amazon SNS 中的主动跟踪

使用 AWS X-Ray,可以在用户请求经过 Amazon SNS 主题并流向 Amazon Data FirehoseAWS LambdaAmazon SQS 和 HTTP/S 端点订阅的过程中,对这些请求进行追踪和分析。

借助 X-Ray,您可以获得每个请求的端到端可视化视图,从而能够:

  • 识别哪些服务在调用您的 Amazon SNS 主题,以及其订阅下游包含哪些服务。

  • 分析各类延迟,例如:

    • 请求在 Amazon SNS 主题中等待处理的时间。

    • 传输到每个订阅端点所花费的时间。

重要

订阅数很多的 Amazon SNS 主题可能达到大小限制,无法完全跟踪。有关跟踪文档大小限制的信息,请参阅《AWS 一般参考》中的 X-Ray 服务限额

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

Amazon SNS 对于标准主题和 FIFO 主题都支持 X-Ray 跟踪。您可以使用 Amazon SNS 控制台Amazon SNS SetTopicAttributes APIAmazon Simple Notification Service CLI 参考CloudFormation 为 Amazon SNS 主题启用 X-Ray。

要了解有关将 Amazon SNS 与 X-Ray 结合使用的更多信息,请参阅《AWS X-Ray 开发人员指南》中的 Amazon SNS 和 AWS X-Ray

主动跟踪权限

使用 Amazon SNS 控制台时,Amazon SNS 会尝试为 Amazon SNS 主题创建调用 X-Ray 所需的权限。如果您没有足够的权限使用 Amazon SNS 控制台,则尝试可能会被拒绝。有关更多信息,请参阅Amazon SNS 中的 Identity and Access Management用于 Amazon SNS 访问控制的示例案例

使用 CLI 时,必须手动配置权限。这些权限是使用资源策略配置的。有关在 X-Ray 中使用所需权限的更多信息,请参阅 Amazon SNS 和 AWS X-Ray

使用 AWS 管理控制台对 Amazon SNS 主题启用主动跟踪

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

  1. 登录 Amazon SNS 控制台

  2. 选择一个主题或创建一个新主题。有关创建主题的详细信息,请参阅创建 Amazon SNS 主题

  3. 创建主题页面的详细信息部分,选择主题类型:FIFO标准

    1. 输入主题的名称

    2. (可选)输入主题的显示名称

  4. 展开 Active tracing(主动跟踪),然后选择 Use active tracing(使用主动跟踪)。

一旦您已为 Amazon SNS 主题启用了 X-Ray,则可以使用 X-Ray 服务地图查看该主题的端到端跟踪和服务地图。

使用 AWS SDK 对 Amazon SNS 主题启用主动跟踪

以下代码示例显示如何使用 AWS SDK for Java 对 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()); } }

使用 AWS CLI 对 Amazon SNS 主题启用主动跟踪

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

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

使用 CloudFormation 对 Amazon SNS 主题启用主动跟踪

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

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

验证为您的主题启用了主动跟踪

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

  1. 登录 Amazon SNS 控制台

  2. 在左侧导航窗格中,选择主题

  3. Topics(主题)页上,选择一个主题。

  4. 请选择 Integrations(集成)选项卡。

    启用主动跟踪后,会显示绿色的 Active(活动)图标。

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

屏幕截图显示了 AWS 管理控制台中名为“SampleTopic”的 Amazon SNS 主题的详细信息。它表示已为该主题启用 AWS X-Ray 主动跟踪,但缺少允许 Amazon SNS 发送跟踪数据的资源策略。提供了“创建策略”按钮来解决此问题。

测试主动跟踪

  1. 登录 Amazon SNS 控制台

  2. 创建 Amazon SNS 主题。有关如何执行该操作的详细信息,请参阅 要使用创建主题 AWS 管理控制台

  3. 展开 Active tracing(主动跟踪),然后选择 Use active tracing(使用主动跟踪)。

  4. 向 Amazon SNS 主题发布消息。有关如何执行该操作的详细信息,请参阅 要使用 AWS 管理控制台将消息发布到 Amazon SNS 主题

  5. 使用 X-Ray 服务地图查看该主题的端到端跟踪和服务地图。

显示 AWS X-Ray 服务地图,其中显示了从客户端流向名为“xray-topic”的 Amazon SNS 主题的请求的跟踪。然后,消息将分发到各种下游服务,包括 Amazon SQS 队列、Lambda 函数、Kinesis firehose 和远程服务。每个连接都会显示诸如以毫秒(ms)为单位的延迟和每分钟交易速率(t/min)等指标,这有助于分析性能并识别消息传递过程中存在的任何延迟问题。