亚马逊 SNS 和 Amazon X-Ray - Amazon X-Ray
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

亚马逊 SNS 和 Amazon X-Ray

您可以使用 Amazon X-Ray 亚马逊简单通知服务 (Amazon SNS) Simple Notification Service 来跟踪和分析通过您的 SNS 主题传送到您的 SNS 支持的订阅服务的请求。使用 X-Ray 跟踪与 Amazon SNS 分析消息及其后端服务的延迟(例如,请求在某个主题上花费了多长时间,以及将消息传送到该主题的每个订阅花费了多长时间)。Amazon SNS 对于标准主题和 FIFO 主题都支持 X-Ray 跟踪。

如果您从已经使用 X-Ray 检测过的服务发布到 Amazon SNS 主题,则 Amazon SNS 会将发布者的跟踪上下文传递给订阅用户。此外,还可以为从已检测 SNS 客户端发布的消息,打开主动跟踪将与 Amazon SNS 订阅相关的分段数据发送给 X-Ray。使用 Amazon SNS 控制台为某个 Amazon SNS 主题打开主动跟踪,或通过使用 Amazon SNS API 或 CLI。请参阅检测应用程序,详细了解如何检测 SNS 客户端。

配置 Amazon SNS 主动跟踪

您可以使用 Amazon SNS 控制台、CL Amazon I 或 SDK 来配置 Amazon SNS 主动跟踪。

使用 Amazon SNS 控制台时,Amazon SNS 会尝试为 SNS 创建调用 X-Ray 所需的权限。如果您没有足够的权限修改 X-Ray 资源策略,则尝试可能会被拒绝。有关这些权限的更多信息,请参阅《Amazon Simple Notification Service 开发人员指南》中的 Amazon SNS 中的标识和访问管理Amazon SNS 访问控制示例。如需了解如何使用 Amazon SNS 控制台打开主动跟踪的更多信息,请参阅《Amazon Simple Notification Service 开发人员指南》中的在 Amazon SNS 主题上启用主动跟踪

使用 Amazon CLI 或 SDK 开启主动跟踪时,必须使用基于资源的策略手动配置权限。使用 PutResourcePolicy 基于资源的必要策略配置 X-Ray,以允许 Amazon SNS 将跟踪发送给 X-Ray。

例 Amazon SNS 主动跟踪的 X-Ray 基于资源的策略示例

以下示例策略文档指定了 Amazon SNS 将跟踪数据发送给 X-Ray 所需要的权限:

{ Version: "2012-10-17", Statement: [ { Sid: "SNSAccess", Effect: Allow, Principal: { Service: "sns.amazonaws.com", }, Action: [ "xray:PutTraceSegments", "xray:GetSamplingRules", "xray:GetSamplingTargets" ], Resource: "*", Condition: { StringEquals: { "aws:SourceAccount": "account-id" }, StringLike: { "aws:SourceArn": "arn:partition:sns:region:account-id:topic-name" } } } ] }

使用 CLI 创建基于资源的策略,赋予 Amazon SNS 将跟踪数据发送给 X-Ray 的权限:

aws xray put-resource-policy --policy-name MyResourcePolicy --policy-document '{ "Version": "2012-10-17", "Statement": [ { "Sid": "SNSAccess", "Effect": "Allow", "Principal": { "Service": "sns.amazonaws.com" }, "Action": [ "xray:PutTraceSegments", "xray:GetSamplingRules", "xray:GetSamplingTargets" ], "Resource": "*", "Condition": { "StringEquals": { "aws:SourceAccount": "account-id" }, "StringLike": { "aws:SourceArn": "arn:partition:sns:region:account-id:topic-name" } } } ] }'

要使用这些示例,请将partitionregionaccount-id、和topic-name替换为您的特定 Amazon 分区、区域、账户 ID 和 Amazon SNS 主题名称。如需赋予所有 Amazon SNS 主题将跟踪数据发送给 X-Ray 的权限,请将主题名称替换为 *

在 X-Ray 控制台中查看 Amazon SNS 发布者和订阅用户跟踪。

使用 X-Ray 控制台查看追踪地图和追踪详情,其中显示了 Amazon SNS 发布者和订阅者的关联视图。开启主题的 Amazon SNS 活动追踪功能后,X-Ray 跟踪地图和跟踪详情地图会显示亚马逊 SNS 发布者、亚马逊 SNS 主题和下游订阅者的连接节点:


                与 Amazon SNS 出版商和订阅者一起追踪地图

选择跨越某个 Amazon SNS 发布商和订阅者的跟踪后,X-Ray 跟踪详情页面将显示跟踪详情地图和区段时间表。

例 显示 Amazon SNS 发布者和订阅订阅用户的时间线示例

此示例显示的时间线中包含向某个 Amazon SNS 主题发送一条消息的 Amazon SNS 发布者,由 Amazon SNS 订阅用户处理。


                    显示 Amazon SNS 发布者和订阅订阅用户的分段时间线

上面的示例时间线提供有关 Amazon SNS 消息流的详细信息:

  • SNS 分段代表从客户端发出的 Publish API 调用的往返持续时间。

  • myTopic 分段代表 Amazon SNS 响应发布请求的延迟。

  • SQS 子分段表示 Amazon SNS 将消息发布到 Amazon SQS 队列所花费的往返时间。

  • MyTopic 分段和 SQS 子分段之间的时间代表这条消息在 Amazon SNS 系统中花费的时间。

例 包含批处理的 Amazon SNS 消息的时间线示例

如果在一个跟踪里批处理多条 Amazon SNS 消息,则分段时间线中会显示代表被处理的每条消息的分段。


                    显示 Amazon SNS 批量消息的分段时间线