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

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

在 Step Functions 中查看 X-Ray 跟踪

在本教程中,您将学习如何使用 X-Ray 来跟踪运行状态机时发生的错误。您可以使用 Amazon X-Ray 可视化状态机的组件、确定性能瓶颈以及对导致错误的请求进行故障排除。在本教程中,您将创建多个随机生成错误的 Lambda 函数,然后可以使用 X-Ray 对其进行跟踪和分析。

创建使用 Lambda 的 Step Functions 状态机教程将引导您创建一个调用 Lambda 函数的状态机。如果您已完成该教程,请跳至第 2 步,并使用之前创建的 Amazon Identity and Access Management (IAM) 角色。

第 1 步:为 Lambda 创建 IAM 角色。

Amazon Lambda 和 Amazon Step Functions 都可以执行代码和访问 Amazon 资源(例如,存储在 Amazon S3 存储桶中的数据)。为了保持安全性,您必须授予 Lambda 和 Step Functions 对这些资源的访问权。

Lambda 要求您在创建 Lambda 函数时分配一个 Amazon Identity and Access Management (IAM) 角色,就像 Step Functions 要求您在创建状态机时分配 IAM 角色一样。

您可使用 IAM 控制台创建服务相关角色。

创建角色(控制台)
  1. 登录 Amazon Web Services Management Console 并打开 IAM 控制台,网址为 https://console.aws.amazon.com/iam/

  2. 在 IAM 控制台的导航窗格中,选择角色。然后选择创建角色

  3. 选择 Amazon 服务角色类型,然后选择 Lambda

  4. 选择 Lambda 使用案例。使用案例由服务定义以包含服务所需的信任策略。然后选择下一步:权限

  5. 选择一个或多个要附加到角色的许可策略(例如,AWSLambdaBasicExecutionRole)。请参阅 Amazon Lambda 权限模型

    选中用于分配您希望角色拥有的权限的策略旁的框,然后选择下一步: 审核

  6. 输入角色名称

  7. (可选)对于角色描述,编辑新服务相关角色的描述。

  8. 检查该角色,然后选择创建角色

第 2 步:创建 Lambda 函数

您的 Lambda 函数将随机抛出错误或超时,生成要在 X-Ray 中查看的示例数据。

重要

确保您的 Lambda 函数与状态机位于同一个 Amazon 账户和 Amazon 区域下。

  1. 打开 Lambda 控制台,然后选择创建函数

  2. 创建函数部分中,选择从头开始创作

  3. 基本信息部分中,配置您的 Lambda 函数:

    1. 对于 Function name(函数名称),请输入 TestFunction1

    2. 对于运行时系统,选择 Node.js 18.x

    3. 对于角色,选择选择现有角色

    4. 对于现有角色,选择您之前创建的 Lambda 角色

      注意

      如果您创建的 IAM 角色未显示在列表中,该角色可能仍需要几分钟才能传播到 Lambda。

    5. 选择创建函数

      创建您的 Lambda 函数后,记下页面右上角的 Amazon 资源名称 (ARN)。例如:

      arn:aws:lambda:us-east-1:123456789012:function:TestFunction1
  4. 将以下 Lambda 函数的代码复制到第 TestFunction1 页的函数代码部分。

    function getRandomSeconds(max) { return Math.floor(Math.random() * Math.floor(max)) * 1000; } function sleep(ms) { return new Promise(resolve => setTimeout(resolve, ms)); } export const handler = async (event) => { if(getRandomSeconds(4) === 0) { throw new Error("Something went wrong!"); } let wait_time = getRandomSeconds(5); await sleep(wait_time); return { 'response': true } };

    此代码会创建随机定时的故障,这些故障将用于在状态机中生成示例错误,可使用 X-Ray 跟踪进行查看和分析。

  5. 选择保存

第 3 步:再创建两个 Lambda 函数

再创建两个 Lambda 函数。

  1. 重复第 2 步,再创建两个 Lambda 函数。对于第二个函数,在函数名称中输入 TestFunction2。对于第三个函数,在函数名称中输入 TestFunction3

  2. 在 Lambda 控制台中,检查您现在是否有三个 Lambda 函数:TestFunction1TestFunction2TestFunction3

第 4 步:创建状态机

在本步骤中,您将使用 Step Functions 控制台创建具有三个 Task 状态的状态机。每个 Task 状态都将引用您的三个 Lambda 函数中的一个。

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

  2. 选择模板对话框中,选择空白

  3. 选择选择。这将在设计模式中打开 Workflow Studio。

  4. 在本教程中,您将在代码编辑器中编写状态机的 Amazon States Language (ASL) 定义。要执行此操作,请选择代码

  5. 删除现有的样板代码并粘贴以下代码。在 Task 状态定义中,请记住将示例 ARN 替换为您创建的 Lambda 函数的 ARN。

    { "StartAt": "CallTestFunction1", "States": { "CallTestFunction1": { "Type": "Task", "Resource": "arn:aws:lambda:us-east-1:123456789012:function:test-function1", "Catch": [ { "ErrorEquals": [ "States.TaskFailed" ], "Next": "AfterTaskFailed" } ], "Next": "CallTestFunction2" }, "CallTestFunction2": { "Type": "Task", "Resource": "arn:aws:lambda:us-east-1:123456789012:function:test-function2", "Catch": [ { "ErrorEquals": [ "States.TaskFailed" ], "Next": "AfterTaskFailed" } ], "Next": "CallTestFunction3" }, "CallTestFunction3": { "Type": "Task", "Resource": "arn:aws:lambda:us-east-1:123456789012:function:test-function3", "TimeoutSeconds": 5, "Catch": [ { "ErrorEquals": [ "States.Timeout" ], "Next": "AfterTimeout" }, { "ErrorEquals": [ "States.TaskFailed" ], "Next": "AfterTaskFailed" } ], "Next": "Succeed" }, "Succeed": { "Type": "Succeed" }, "AfterTimeout": { "Type": "Fail" }, "AfterTaskFailed": { "Type": "Fail" } } }

    这是使用 Amazon States Language 的状态机的说明。它定义了三个名为 CallTestFunction1CallTestFunction2CallTestFunction3Task 状态。每个状态都会调用您的三个 Lambda 函数中的一个。有关更多信息,请参阅状态机结构

  6. 为状态机指定一个名称。为此,请选择默认状态机名称旁边的编辑图标MyStateMachine。然后,找到状态机配置,在状态机名称框中指定一个名称。

    对于本教程,请输入名称 TraceFunctions

  7. (可选)在状态机配置中,指定其他工作流设置,例如状态机类型及其执行角色。

    在本教程中,在其他配置下,选择启用 X-Ray 跟踪。保留状态机设置中的所有其他默认选项。

    如果您之前为状态机创建了具有正确权限的 IAM 角色并想使用该角色,请在权限中选择选择现有角色,然后从列表中选择一个角色。或者选择输入角色 ARN,然后为该 IAM 角色的 ARN 获取该角色。

  8. 确认角色创建对话框中,选择确认继续。

    您也可以选择查看角色设置,返回至状态机配置

    注意

    如果您删除了 Step Functions 创建的 IAM 角色,Step Functions 在以后无法重新创建该角色。同样,如果您修改了该角色(例如,通过在 IAM 策略中从主体中删除 Step Functions),Step Functions 在以后也无法还原其原始设置。

第 5 步:运行状态机

状态机执行是指运行工作流执行任务的实例。

  1. TraceFunctions页面上,选择 “开始执行”。

    此时将显示新执行页面。

  2. 启动执行对话框中,执行以下操作:

    1. (可选)要识别您的执行,您可以在名称框中为其指定一个名称。默认情况下,Step Functions 会自动生成一个唯一的执行名称。

      注意

      Step Functions 允许您为状态机、执行、活动、速率控制和包含非 ASCII 字符的标签创建名称。这些非 ASCII 名称不适用于亚马逊。 CloudWatch为确保您可以跟踪 CloudWatch 指标,请选择仅使用 ASCII 字符的名称。

    2. 选择启动执行

    3. Step Functions 控制台会将您引导到一个以您的执行 ID 为标题的页面。该页面被称为执行详细信息页面。在此页面上,您可以随着执行的进展或者在执行完成后查看执行结果。

      要查看执行结果,请在图表视图上选择各个状态,然后在步骤详细信息窗格中选择各个选项卡,分别查看每个状态的详细信息,包括输入、输出和定义。有关可在执行详细信息页面上查看的执行信息的详细信息,请参阅“执行详细信息”页面 – 界面概述

      运行几次(至少三次)执行。

  3. 执行完成后,点击 X-Ray 追踪映射链接。您可以在执行仍在运行时查看跟踪,但您可能希望在查看 X-Ray 跟踪映射之前先查看执行结果。

    
                            X-Ray 启用
  4. 查看服务图来识别错误发生的位置、具有高延迟的连接或针对不成功请求的跟踪。在此示例中,您可以看到每个函数接收了多少流量。TestFunction2 被调用的频率高于 TestFunction3TestFunction1 被调用的频率是 TestFunction2 的两倍多。

    服务地图根据成功调用与错误和故障的比率为每个节点显示颜色,从而指示节点的运行状况:

    • 绿色表示成功调用

    • 红色表示服务器故障(500 系列错误)

    • 黄色表示客户端错误(400 系列错误)

    • 紫色表示限制错误(429 请求过多)

    
                            X-Ray 启用

    您也可以选择一个服务节点来查看该节点的请求,或选择两个节点之间的边缘来查看经过该连接的请求。

  5. 查看 X-Ray 跟踪映射,了解每次执行时发生了什么。时间线视图显示分段和子分段的层次结构。列表中的第一个条目为分段,表示服务为单个请求记录的所有数据。分段的下一级是子分段。此示例显示了 Lambda 函数记录的子分段。

    
                            X-Ray 启用

    有关理解 X-Ray 跟踪以及使用 X-Ray 和 Step Functions 的更多信息,请参阅 Amazon X-Ray 和 Step Functions