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

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

Amazon X-Ray 和 Step Functions

您可以使用 Amazon X-Ray 可视化状态机的组件、确定性能瓶颈以及对导致错误的请求进行故障排除。状态机会向 X-Ray 发送跟踪数据,X-Ray 会处理这些数据,生成服务图和可搜索的跟踪摘要。

为状态机启用 X-Ray 后,您可以跟踪所有可用 X-Ray 的 Amazon 区域在 Step Functions 中执行的请求。这样,您就可以详细了解整个 Step Functions 请求的全貌。即使上游服务没有传递跟踪 ID,Step Functions 也会向 X-Ray 发送状态机执行的跟踪。您可以使用 X-Ray 服务地图来查看请求的延迟,包括与 X-Ray 集成的任何 Amazon 服务。您也可以配置采样规则,以根据您指定的标准指示 X-Ray 记录哪些请求以及以哪种采样率进行记录。

当状态机未启用 X-Ray 且上游服务未传递跟踪 ID 时,Step Functions 不会向 X-Ray 发送状态机执行的跟踪。但是,如果上游服务传递了跟踪 ID,Step Functions 就会向 X-Ray 发送状态机执行的跟踪。

在同时支持 Step Functions 的区域,你可以 Amazon X-Ray 与 Step Functions 一起使用。有关 X-Ray 和 Step Functions 的区域支持信息,请参阅 Step FunctionsX-Ray 端点和配额页面。

X-Ray 和 Step Functions 组合配额

您最多可以向跟踪中添加七天的数据,并查询三十天前的跟踪数据,即 X-Ray 存储跟踪数据的时间长度。您的跟踪将受到 X-Ray 配额的限制。除了其他配额外,X-Ray 还为 Step Functions 状态机提供了 100KB 的最小保证跟踪大小。如果向 X-Ray 提供的跟踪数据超过 100KB,可能会导致跟踪被冻结。有关 X-Ray 其他配额的更多信息,请参阅 X-Ray 端点和配额页面的服务限额部分。

重要

Step Functions 不支持对分布式 Map 状态 启动的子工作流执行进行 X-Ray 跟踪,因为此类执行很容易超出跟踪文档大小限制

设置和配置

创建状态机时启用 X-Ray 跟踪

通过在指定详细信息页面上选择启用 X-Ray 跟踪,即可在创建新状态机时启用 X-Ray 跟踪。

  1. 打开 Step Functions 控制台,然后选择创建状态机

  2. 选择创作方法页面上,选择适当的选项来创建状态机。如果选择运行示例项目,则无法在创建状态机期间启用 X-Ray 跟踪,并且需要在创建状态机后启用 X-Ray 跟踪。有关在现有状态机中启用 X-Ray 的更多信息,请参阅在现有状态机中启用 X-Ray

    选择下一步

  3. 指定详细信息页面,配置状态机。

  4. 选择启用 X-Ray 跟踪

    Step Functions 状态机现在将向 X-Ray 发送状态机执行的跟踪。

    注意

    如果您选择使用现有 IAM 角色,则应确保允许 X-Ray 写入。有关所需权限的更多信息,请参阅适用于 X-Ray 的 IAM 策略

在现有状态机中启用 X-Ray

要在现有状态机中启用 X-Ray,请执行以下操作:

  1. Step Functions 控制台中,选择要为其启用跟踪的状态机。

  2. 选择编辑

  3. 选择启用 X-Ray 跟踪

    您将看到一条通知,告知您可能需要进行其他更改。

    注意

    为现有状态机启用 X-Ray 时,必须确保您的 IAM 策略授予了 X-Ray 执行跟踪的足够权限。您可以手动添加一个,也可以生成一个。有关更多信息,请参阅适用于 X-Ray 的 IAM 策略。

  4. (可选)为状态机自动生成新角色,用于包含 X-Ray 权限。

  5. 选择保存

为 Step Functions 配置 X-Ray 跟踪

首次运行启用了 X-Ray 跟踪的状态机时,它将使用默认配置值进行 X-Ray 跟踪。 Amazon X-Ray 不会为发送到应用程序的每个请求收集数据。相反,它会为统计上显著数量的请求收集数据。默认情况下,每秒记录第一个请求,并记录所有其他请求的5% 。每秒一个请求是容器。这可确保只要服务正在处理请求,就会每秒至少记录一个跟踪。5% 是对超出容器尺寸的额外请求进行采样的比率

为避免在您入门时产生服务费用,保守做法是使用默认采样率。您可以配置 X-Ray 以修改默认采样规则并配置基于服务或请求的属性应用采样的其他规则。

例如,您可能想要禁用采样并跟踪所有修改状态或句柄 Amazon Web Services 账户 或事务的呼叫的请求。对于量非常大的只读调用,例如后台轮询、运行状况检查或连接维护,您采用较低的采样率仍可获取足够的数据来观察出现的任何问题。

要为状态机配置采样规则,请执行以下操作:

  1. 前往 X-Ray 控制台

  2. 选择采样

  3. 要创建规则,请选择创建采样规则

    要编辑规则,请选择规则的名称。

    要删除规则,请选择一条规则并使用操作菜单来删除它。

现有采样规则的某些部分(例如名称和优先级)无法更改。相反,您可以添加或克隆现有规则,进行所需的更改,然后使用新规则。

有关 X-Ray 采样规则以及如何配置各种参数的详细信息,请参阅在 X-Ray 控制台中配置采样规则

集成上游服务

要将 Step Functions 工作流程(例如快速、同步和标准工作流)的执行与上游服务集成,您需要设置 traceHeader。如果您使用的是 API Gateway 中的 HTTP API,则系统会自动为您完成此操作。但是,如果您使用的是 Lambda 函数和/或开发工具包,则需要自己在 StartExecutionStartSyncExecution API 调用中设置 traceHeader

您必须将 traceHeader 格式指定为 \p{ASCII}∗。此外,要让 Step Functions 使用相同的跟踪 ID,必须将格式指定为 Root={TRACE_ID};Sampled={1 or 0}。如果您使用的是 Lambda 函数,请将 TRACE_ID 替换为当前分段中的跟踪 ID,如果采样模式为 true,则将“已采样”字段设为 1,如果采样模式为 false,则设为 0。以这种格式提供跟踪 ID 可确保您获得完整的追踪信息。

下面是使用 Python 编写的示例,展示如何指定 traceHeader

state_machine = config.get_string_paramter("STATE_MACHINE_ARN") if (xray_recorder.current_subsegment() is not None and xray_recorder.current_subsegment().sampled) : trace_id = "Root={};Sampled=1".format( xray_recorder.current_subsegment().trace_id ) else: trace_id = "Root=not enabled;Sampled=0" LOGGER.info("trace %s", trace_id) # execute it response = states.start_sync_execution( stateMachineArn=state_machine, input=event['body'], name=context.aws_request_id, traceHeader=trace_id ) LOGGER.info(response)

概念

X-Ray 控制台

通过 Amazon X-Ray 控制台,您可以查看应用程序所处理的请求的服务映射和跟踪。当状态机启用 X-Ray 时,您可以访问控制台,查看 X-Ray 收集的详细信息。

有关如何访问状态机执行的 X-Ray 控制台的信息,请参阅查看 X-Ray 控制台

有关 X-Ray 控制台的详细信息,请参阅 X-Ray 控制台文档

分段、子分段和跟踪

分段记录有关向状态机发出的请求信息。它包含诸如状态机执行的工作之类的信息,也可能包含有关下游调用信息的子分段

跟踪会收集单个请求生成的所有分段。

采样

为确保高效跟踪并为应用程序所服务的请求提供代表性样本,X-Ray 应用采样算法来确定跟踪哪些请求。这可以通过编辑采样规则来更改。

指标

对于状态机,X-Ray 将测量调用时间、状态转换时间、Step Functions 的总体执行时间以及执行时间的差异。这些信息可通过 X-Ray 控制台获取。

分析

Amazon X-Ray Analytics 控制台是一款用于解释跟踪数据的交互式工具。您可以通过单击与当前跟踪集关联的指标和字段的图表和面板,使用越来越精细的筛选条件细化活动的数据集。这使您可以分析状态机的运行情况,并快速定位和识别性能问题。

有关 X-Ray 分析的详细信息,请参阅与 Analy Amazon X-Ray tics 控制台交互

Step Functions 服务集成和 X-Ray

一些与 Step Functions 集成的 Amazon 服务 Amazon X-Ray 通过向请求添加跟踪标头、运行 X-Ray 守护程序或做出采样决策并将跟踪数据上传到 X-Ray 来提供集成。其他人必须使用 Amazon X-Ray SDK 进行检测。还有一些服务尚未支持 X-Ray 集成。在使用与 Step Functions 集成的服务时,X-Ray 集成是提供完整跟踪数据的必要条件

原生 X-Ray 支持

使用原生 X-Ray 支持的服务集成包括:

所需检测

需要 X-Ray 检测的服务集成:

  • Amazon Elastic Container Service

  • Amazon Batch

  • Amazon Fargate

仅客户端跟踪

其他服务集成不支持 X-Ray 跟踪。但是,仍然可以收集客户端跟踪:

  • Amazon DynamoDB

  • Amazon EMR

  • Amazon SageMaker

  • Amazon CodeBuild

  • Amazon Glue

查看 X-Ray 控制台

X-Ray 从服务以分段形式接收数据。然后,X-Ray 将具有共同请求的分段分组为跟踪。X-Ray 处理跟踪以生成服务图,服务图提供您的应用程序的可视化表示形式。

启动状态机执行后,在执行详细信息部分选择 X-Ray 跟踪视图链接,即可查看其 X-Ray 跟踪。


        X-Ray 跟踪

为状态机启用 X-Ray 后,则可以在 X-Ray 控制台中查看其执行跟踪信息。

查看 Step Functions 的 X-Ray 跟踪信息

以下步骤说明启用 X-Ray 并运行执行后,您可以在控制台中看到的信息类型。展示了 回调模式示例(Amazon SQS、Amazon SNS、Lambda) 示例项目的 X-Ray 跟踪。

跟踪

执行完成后,您可以导航到 X-Ray 控制台,在在此处可以看到 X-Ray 跟踪页面。这将显示服务图的概述以及状态机的跟踪和分段信息。


        X-Ray 跟踪

服务图

X-Ray 控制台中的服务图可帮助您识别发生错误的服务、存在高延迟连接的服务,或查看请求不成功的跟踪。


        X-Ray 跟踪

在跟踪视图中,您可以选择一个服务节点来查看该节点的请求,或选择两个节点之间的边缘来查看经过该连接的请求。在这里,WaitForCallBack 节点已被选中,您可以查看有关其执行和响应状态的其他信息。


        X-Ray 跟踪

您可以看到 X-Ray 服务图如何与状态机相关联。只要支持 X-Ray,Step Functions 调用的每个服务集成都有一个服务图节点。


        X-Ray 跟踪

分段和子分段

跟踪是由单个请求生成的片段集合。每个分段提供资源的名称、有关请求的详细信息以及有关所完成工作的详细信息。在跟踪页面上,您可以看到分段,如果展开,还可以看到其相应的子分段。您可以选择一个分段或子分段来查看其详细信息。

选择每个选项卡,查看分段和子分段信息的显示方式。

Overview of Segments

此状态机的分段和子分段概览。服务图上的每个节点都有不同的分段。


              分段
View segment detail

选择分段可提供资源的名称、有关请求的详细信息以及有关所完成工作的详细信息。


              分段详细信息
View subsegment detail

分段可以将关于已完成工作的数据细分为子分段。选择子分段可以查看更精细的时间信息和详细信息。子分段可以包含有关调用 Amazon 服务、外部 HTTP API 或 SQL 数据库的其他详细信息。


              子分段详细信息

分析

Amazon X-Ray Analytics 控制台是一款用于解释跟踪数据的交互式工具。您可以使用它来更轻松地了解状态机的性能。借助该控制台,您可以通过交互式响应时间图表和时间序列图表探索、分析和直观地显示跟踪。这可以帮助您快速找到性能和延迟问题。

您可以通过单击与当前跟踪集关联的指标和字段的图表和面板,使用越来越精细的筛选条件细化活动的数据集。


        分析

配置

您可以从 X-Ray 控制台配置采样和加密选项。

Sampling

选择采样,查看有关采样率和配置的详细信息。您可以更改采样规则来控制记录的数据量,并修改采样行为来满足您的特定要求。


              采样
Encryption

选择加密可修改加密设置。您可以使用默认设置,其中 X-Ray 对跟踪和静态日期进行加密,或者,如果需要,您可以选择客户主密钥。标准 Amazon KMS 会对后一种情况收费。

如果追踪视图或服务图中没有数据怎么办?

如果您启用了 X-Ray,但在 X-Ray 控制台中看不到任何数据,请检查:

  • IAM 角色设置是否正确,允许写入 X-Ray。

  • 采样规则是否允许对数据进行采样。

  • 由于在应用新创建或修改的 IAM 角色之前可能会有短暂延迟,因此请在几分钟后再次检查跟踪或服务图。

  • 如果您在 X-Ray Traces 面板中看到 “未找到数据”,请检查您的 IAM 账户设置并确保已 Amazon Security Token Service 为目标区域启用该设置。有关更多信息,请参阅 IAM 用户指南 Amazon STS Amazon Web Services 区域中的激活和停用