在 Step Functions 中查看 X-Ray 跟踪 - AWS Step Functions

在 Step Functions 中查看 X-Ray 跟踪

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

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

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

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

Lambda 要求您在创建 Lambda 函数时指定一个 AWS Identity and Access Management (IAM) 角色,其方式与您创建状态机时 Step Functions 要求您指定 IAM 角色相同。

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

创建角色(控制台)
  1. 登录 AWS 管理控制台,打开 IAM 控制台:https://console.aws.amazon.com/iam/

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

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

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

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

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

  6. 输入角色名称

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

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

第 2 步:创建 Lambda 函数

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

重要

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

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

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

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

    1. 对于函数名称,请输入 TestFunction1

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

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

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

      注意

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

    5. 选择创建函数

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

      arn:aws:lambda:region: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 步创建的 Lambda 函数位于相同的 AWS 账户和区域下。

  2. 选择从空白创建

  3. 为状态机命名,然后选择继续,在 Workflow Studio 中编辑状态机。

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

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

    { "StartAt": "CallTestFunction1", "States": { "CallTestFunction1": { "Type": "Task", "Resource": "arn:aws:lambda:region:123456789012:function:test-function1", "Catch": [ { "ErrorEquals": [ "States.TaskFailed" ], "Next": "AfterTaskFailed" } ], "Next": "CallTestFunction2" }, "CallTestFunction2": { "Type": "Task", "Resource": "arn:aws:lambda:region:123456789012:function:test-function2", "Catch": [ { "ErrorEquals": [ "States.TaskFailed" ], "Next": "AfterTaskFailed" } ], "Next": "CallTestFunction3" }, "CallTestFunction3": { "Type": "Task", "Resource": "arn:aws:lambda:region: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. (可选)输入自定义执行名称,以便覆盖生成的默认执行名称。

      非 ASCII 名称和日志记录

      Step Functions 对于状态机、执行、活动和标签接受包含非 ASCII 字符的名称。由于此类字符会阻止 Amazon CloudWatch 记录数据,因此我们建议仅使用 ASCII 字符,这样您就可以跟踪 Step Functions 指标。

    2. 选择启动执行

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

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

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

  3. 执行完成后,点击 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 的更多信息,请参阅 在 AWS X-Ray 中跟踪 Step Functions 请求数据