什么是 AWS X-Ray? - AWS X-Ray

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

什么是 AWS X-Ray?

AWS X-Ray 提供有关已检测应用程序收到的任何响应和调用的跟踪信息,包括对以下内容的响应和调用:

  • 下游 AWS 资源

  • 微服务

  • 数据库

  • Web API

使用跟踪数据和可视化来深入了解应用程序的性能,识别问题并寻找优化机会。使用 X-Ray 中的分析工具来查看、筛选和调查任何已跟踪到应用程序的请求的详细信息。

X-Ray 的工作原理

要使用 X-Ray,必须先对应用程序进行检测,这样 X-Ray 才能跟踪您的应用程序如何处理请求。在您的应用程序中添加检测功能允许 X-Ray 为应用程序中的传入和出站请求以及其他事件发送跟踪数据和元数据。例如,您可以检测您的 Java 应用程序发出的所有传入 HTTP 请求和下游调用。 AWS 服务 您也可以自动检测您的应用程序。有关更多信息,请参阅检测您的应用程序,了解更多信息。

X-Ray 会为您的仪器化应用程序收到的任何请求分配跟踪 ID。如果您的应用程序与其他组件交互,X-Ray 会创建一个区段。此区段与原始跟踪 ID 相关联,并跟踪与该组件的交互质量。

X-Ray 会跟踪整个应用程序工作流程中的跟踪 ID 和区段。您可以分析整个工作流程或隔离一个部分进行详细分析。有关区段的更多信息,请参阅以下概念部分。

X-Ray 会跟踪您的应用程序与服务节点或组件交互以处理传入请求,如下所示:

  1. X-Ray 使用跟踪 ID 和区段来跟踪个人互动。

  2. AWS 代理收集跟踪 ID 和关联的区段,然后将其传递到 SDK 或 API 跟踪框架。

  3. X-Ray 还会跟踪与任何与 X-Ray 集成的 AWS 服务的交互。

  4. 代理将数据发送到控制台 GUI,您可以在其中查看有关您的跟踪、分段和子分段以及这些组件如何交互的信息。

前面的步骤如下图所示:

X-Ray 显示有关应用程序请求的详细信息。

X-Ray 如何与您的仪器化应用程序交互

当您的仪器化应用程序收到请求时,X-Ray 会执行以下操作:

  1. 在您的应用程序处理请求后,X-Ray SDK 会将跟踪数据发送给 AWS 收集器代理。然后,代理收集跟踪 ID 和区段。您可以从以下三个代理中进行选择:

    • AWS Distro for OpenTelemetry (ADOT) Collector — 基于开源标准化OpenTelemetry代理的开源收集器 AWS,经过优化和保护。ADOT Collector如果您想使用语言和与供应商无关的标准化代码与代理进行交互,但仍对最终产品内置 AWS 的安全性和优化充满信心,请使用。您还可以使用ADOT将终端配置到不同的代理和后端。

    • Amazon CloudWatch agent — 一种开源收集器,它集成了日志、指标和跟踪,支持所有遥测数据,并已ADOT Collector集成到其中。

    • X-Ray 守护程序 — 一种与 X-Ray SDK 和 X-Ray API 配合使用的收集器。如果您有旧代码,或者您的应用程序需要自定义跟踪,因此必须使用 X-Ray API,请使用 X-Ray 守护程序。该守护程序可用于LinuxMicrosoft Windows、和macOS,并包含在 AWS Elastic Beanstalk 和 AWS Lambda 平台上。

  2. 然后,代理将这些数据发送到由 API 或基于 AWS AP I 构建的 AWS SDK 组成的跟踪框架。该框架与其他 AWS 服务进行交互。X-Ray API 允许通过 AWS SDK 或直接通过软件开发工具包访问所有 X-Ray 功能HTTPS。 AWS Command Line Interface如果您使用的是某种语言或需要使用 SDK 不支持的操作,请使用 X-Ray API。

    您可以使用以下 SDK:

    • S ADOT DK — 使用 ADOT SDK 与不隶属的供应商的不同代理进行交互 AWS。S ADOT DK 还支持多种后端服务。

    • X-Ray SDK — 一款不再添加更多功能或语言的经典产品。如果您不想更新应用程序代码,请使用 X-Ray SDK。

    如果您使用的是 X-Ray 或 ADOT SDK,则可以将以下选项与代理结合使用:

    • 建议将 X-Ray 或 ADOT SDK 与 CloudWatch 代理一起使用。

    • 如果要使用具有ADOT Collector安全层和优化 AWS 层的独立于供应商的软件,则建议使用带有 ADOT SDK。

    • 将 X-Ray SDK 与 CloudWatch 代理一起使用 — CloudWatch 代理与 X-Ray SDK 兼容。

    • 将 X-Ray SDK 与 X-Ray 守护程序配合使用 — 如果您想继续使用 X-Ray SDK,请使用此选项。

  3. (可选)跟踪框架可以与其他 AWS 服务、HTTP服务器、其他方法和查询进行交互。一些与 X-Ray 集成的 AWS 服务包括亚马逊 EC2、亚马逊 SNS 和 API Gateway。在这些交互过程中,SDK 或 API 会跟踪跟踪数据。

    AWS 与 X-Ray 集成的服务可以向传入的请求添加跟踪标头、向 X-Ray 发送跟踪数据或运行代理来收集跟踪数据。例如, AWS Lambda 可以向您的 Lambda 函数发送有关请求的跟踪数据。

    有关与 X-Ray 配合使用的其他服务的更多信息,请参阅AWS X-Ray 与其他人集成 AWS 服务

  4. 您可以在控制台的图形用户界面 (GUI) 中查看有关您的跟踪、区段和子分段的数据。可以使用以下选项:

X-Ray 使用您的应用程序与之交互的 AWS 资源中的跟踪数据来生成详细的跟踪地图。跟踪地图显示您的前端服务在单个请求中调用的客户端、您的前端服务和后端服务。使用跟踪图来识别瓶颈、延迟峰值和其他问题,以解决或提高应用程序的性能。

X-Ray 还将生成服务地图,提供应用程序与服务节点交互方式的总体视图。服务地图中的边缘连接服务节点。它们显示节点相互通信的频率以及这些通信的延迟。

下图显示了服务地图的示例,该地图显示了您的应用程序如何与不同组件进行交互。您可以在控制台中查看服务地图。图像显示应用程序正在接收来自客户端的请求。然后,该图像显示了应用程序如何与两个 DynamoDB 表和 Amazon SNS 进行交互。

Trace map 显示您的前端服务为处理请求和保留数据而调用的客户端、前端服务和后端服务

下图是控制台中可用的跟踪中单个分段的数据示例。图像显示了一个时间表,其中列出了几个片段以及每个区段相对于其他片段的开始时间和持续时间。该图像还显示了分段状态和 HTTP 响应代码。

X-Ray 显示有关应用程序请求的详细信息,包括状态、持续时间和 HTTP 响应代码。

概念

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

分段

运行您的应用程序逻辑的计算资源发送关于其工作的数据作为分段。分段提供资源的名称、有关请求的详细信息以及有关所完成工作的详细信息。例如,当 HTTP 请求到达您的应用程序时,它可以记录下列相关数据:

  • 主机 — 主机名、别名或 IP 地址。

  • 请求 — 方法、客户端地址、路径、用户代理。

  • 响应 — 状态、内容。

  • 已完成的工作 ——开始和结束时间、子细分。

  • 发生的错误 - 错误、故障和异常,包括自动捕获的异常堆栈。

下图是返回的有关区段的概述信息的示例。该图像显示了有关 ID、开始和结束时间、任何错误或故障以及来自 HTTP 请求的请求和响应代码的信息:

X-Ray 跟踪的分段数据

跟踪框架由 SDK 或 API 组成,它从请求和响应标头、应用程序中的代码以及有关应用程序运行 AWS 资源的元数据中收集信息。您可以通过修改应用程序配置或代码来检测传入的请求、下游请求和 AWS 服务,从而选择 X-Ray 收集哪些数据。

转发的请求

如果负载均衡器或其他中间将请求转发到您的应用程序,X-Ray 会提取请求 X-Forwarded-For 标头中的客户端 IP 而非 IP 数据包中的源 IP。由于转发的请求记录的客户端 IP 可以伪造,因此不应信任。

您可以使用诸如 SDK 或 API 之类的跟踪框架来记录更多信息,包括注释和元数据。有关区段和子区段结构以及记录信息的详细信息,请参见X-Ray 片段文档。分段文档的大小最大可以是 64KB。

子分段

您可以将区段划分为子分段。子分段提供更精细的时序信息以及有关您的应用程序为满足原始请求而进行的下游调用的详细信息。子分段包含有关调用 AWS 服务、外部 HTTP API 或 SQL 数据库的更多详细信息。您还可以定义子段来检测应用程序中的特定函数或代码行。

子区段提供的信息比区段更精细

X-Ray 使用子分段在跟踪地图上为不发送自己的区段的服务(例如 Amazon DynamoDB)生成推断的区段和下游节点。子分段允许您查看所有下游依赖项,即使这些依赖项不支持跟踪或位于外部依赖项也是如此。 AWS

子分段表示从您应用程序的角度将下游调用视为客户端。如果还对下游服务进行了检测,则其分段将替换从上游客户端的子分段推断出的分段。服务图上的节点使用来自服务分段的信息(如果有)。两个节点之间的边缘使用上游服务的子分段。

例如,当您使用经过 AWS 检测的 SDK 客户端调用 DynamoDB 时,X-Ray SDK 会记录该调用的子分段。DynamoDB 不会发送区段,因此该子分段包含有关以下内容的信息:

  • 轨迹中的推断段。

  • 服务图表上的 DynamoDB; 节点。

  • 您的服务与 DynamoDB 之间的优势。

下图显示了示例应用程序的服务地图。在图像中,客户端向一个示例 Scorekeeep 应用程序发出请求。Scorekeeep 应用程序对 DynamoDB 进行了两次调用。服务地图中的一条边代表这些呼叫中的每一个。选择边缘以查看向 DynamoDB 表发出的呼叫的运行状况、数量和频率。下图显示了与按响应时间过滤的边缘相对应的轨迹。

边缘连接了经过检测的应用程序和 DynamoDB 表。

当您使用检测应用程序调用另一个检测服务时,下游服务会发送自己的分段。此分段记录其对上游服务在子分段中记录的相同呼叫的视图。在服务图中,两个服务的节点都包含来自其分段的时序和错误信息。它们之间的边缘包含来自上游服务子分段的信息。下游服务会记录它开始和结束处理请求的时间。上游服务记录往返延迟,包括请求在两个服务之间传输所花费的时间。

下图显示了从与上游 Lambda 函数对应的边缘按响应时间筛选的跟踪信息。

响应时间显示为一段时间内来自已检测应用程序的已检测应用程序的请求的值。

服务图

X-Ray 使用您的应用程序发送的数据来生成服务图。向 X-Ray 发送数据的每个 AWS 资源都以服务节点的形式出现在图表中。E dge 连接协同工作以处理请求的服务,将客户端连接到您的应用程序,并将您的应用程序连接到其使用的下游服务和资源。

服务名称

分段的 name 应该与生成该分段的服务的域名或逻辑名称相匹配。但是,并未强制执行此规则。任何拥有 PutTraceSegments 权限的应用程序均可发送任何名称的分段。

服务图是一个 JSON 文档,其中包含有关构成您的应用程序的服务和资源的信息。X-Ray 控制台使用服务图来生成可视化形式或服务地图

下图显示了服务地图。服务映射显示了客户端对您的应用程序的请求与您的应用程序交互以处理请求的服务之间的关系。在下图中,一个示例 Scorekeeep 应用程序与两个 DynamoDB 表和 Amazon SNS 进行交互。

追踪地图

在分布式应用程序中,X-Ray 将处理具有相同跟踪 ID 的请求的所有服务的节点组合到一个服务图中。请求与之交互的第一个服务会添加一个跟踪标头,该标头在前端和它调用的服务之间传播。

例如,Scorekeeep 运行一个 Web API,该API调用一个 AWS Lambda 函数来生成一个随机名称。然后,X-Ray SDK 生成跟踪 ID 并跟踪对 Lambda 函数的调用。 AWS Lambda 将跟踪数据和跟踪 ID 传递给 Lambda 函数。X-Ray SDK 还使用相同的跟踪 ID 向代理或收集器发送数据。因此,API、 AWS Lambda 服务和 Lambda 函数的节点在跟踪地图上都显示为独立但相互连接的节点。

服务图数据的保留期为 30 天。

跟踪

跟踪会收集单个请求生成的所有分段。该跟踪使用跟踪 ID 来跟踪通过您的应用程序的请求路径。该请求通常是一个 HTTP GET 或 POST 请求,它通过负载均衡器传输,与您的应用程序代码交互,并生成对其他 AWS 服务或外部 Web API 的下游调用。HTTP 请求与之交互的第一个支持的服务在请求中添加了跟踪 ID 标头。iThe Service 然后向下游传播跟踪 ID,以跟踪延迟、处置和其他请求数据。

下图显示了HTTP处理请求的应用程序的示例。跟踪摘要包含HTTP响应代码、处理请求的时间以及应用程序处理请求的时间长短。下图还显示了每个轨迹线段的时间轴。时间轴显示了分段完成的状态、HTTP响应代码和时间。图表显示了轨迹中每个分段相对于其他分段的持续时间、开始时间和结束时间。

跟踪的时间线视图,用于收集单个请求生成的所有分段

有关 X-Ray 账单追踪收集方式的更多信息,请参阅AWS X-Ray 定价,了解有关 X-Ray 追踪如何计费的信息。跟踪数据保留 30 天。

采样

X-Ray SDK 采用采样算法来确保高效追踪,并提供您的应用程序所服务的请求的代表性样本。该算法决定跟踪哪些请求。默认情况下,X-Ray SDK 会记录每秒开始时收到的第一个请求,以及任何其他请求的百分之五。

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

例如,您可能希望禁用采样,并跟踪对修改状态或处理用户或交易的调用的所有请求。适用于高容量只读呼叫,例如后台轮询、运行状况检查或连接维护。

有关更多信息,请参阅配置采样规则CreateSamplingRuleAPI。

跟踪标头

所有请求都会被跟踪,最多可追踪到您可以配置的最小数量。达到该最低限额后,X-Ray 仅跟踪一定比例的请求,以避免额外费用。X-Ray 将采样决策和跟踪 ID 添加到以开头的跟踪标头中的 HTTP 请求中X-Amzn-Trace-Id。当请求与第一个与 X-Ray 集成的 AWS 服务交互时,X-Ray 会添加这些标头。X-Ray SDK 会读取这些标头并将其包含在响应中。

例 具有根跟踪 ID 和采样决策的跟踪标头
X-Amzn-Trace-Id: Root=1-5759e988-bd862e3fe1be46a994272793;Sampled=1
跟踪标头安全性

跟踪标头可以源自 X-Ray SDK AWS 服务、或客户端请求。应用程序可以从传入请求中删除 X-Amzn-Trace-Id,避免由于用户向其请求中添加跟踪 ID 或采样决策而导致出现问题。

如果请求来自检测的应用程序,跟踪标头还可以包含父分段 ID。例如,如果应用程序使用检测的 HTTP 客户端调用下游 HTTP Web API,则 X-Ray 开发工具包将原始请求的分段 ID 添加到下游请求的跟踪标头中。为下游请求提供服务的工具化应用程序使用父分段 ID 来连接这两个请求。

例 跟踪标头带有根跟踪 ID、父分段 ID 和采样决策
X-Amzn-Trace-Id: Root=1-5759e988-bd862e3fe1be46a994272793;Parent=53995c3f42cd8ad8;Sampled=1

Lambda 或其他 AWS 服务 可能会附加以开头的标头的一部分,Lineage作为其处理机制的一部分。您不应直接使用跟踪标头的附加部分。

例 跟踪带有世系的标头
X-Amzn-Trace-Id: Root=1-5759e988-bd862e3fe1be46a994272793;Sampled=1;Lineage=a87bd80c:1|68fd508a:5|c512fbe3:2

筛选条件表达式

即使您对一小部分数据进行采样,复杂的应用程序也可能生成大量跟踪数据。使用筛选表达式可以找到特定的跟踪,包括针对单个请求、特定路径或用户的跟踪。

下图显示了 X-Ray 控制台中的一个文本框,您可以使用该文本框按您定义的组进行筛选。有关群组的更多信息,请参阅以下群组部分。

选择一条跟踪以查看有关单个请求的详细信息

您可以在筛选表达式中使用群组来减少追踪数据量,将注意力集中在符合组标准的数据上。

使用群组生成特定于该群组的服务图表、跟踪摘要和 CloudWatch 指标。您可以按姓名或亚马逊资源名称 (ARN) 拨打电话。当传入的轨迹存储在 X-Ray 服务中时,X-Ray 会根据组筛选表达式检查这些轨迹。 CloudWatch每分钟发布符合组标准的跟踪的指标。

更新组的筛选条件表达式不会更改已记录的数据。更新仅应用于后续跟踪。这可能会生成新旧表达式的合并图。为避免将未连接的组合并到单个图表中,请删除当前组并https://docs.aws.amazon.com/xray/latest/api/API_CreateGroup.html创建一个新组。

注意

群组的计费基于检索到的符合筛选条件表达式的追踪数量。有关更多信息,请参阅AWS X-Ray 定价

有关组的更多信息,请参阅 配置群组

注释和元数据

在检测应用程序时,X-Ray SDK 会记录有关传入和传出请求的信息。SDK 还记录有关所用 AWS 资源和应用程序本身的信息。您可以向分段文档中添加其他信息作为注释和元数据。注释和元数据在跟踪级别合并。它们可以添加到任何区段或子区段。

注解是键值对,已编入索引,可与过滤器表达式一起使用。使用注释记录要用于对控制台中的跟踪进行分组的数据或在调用 GetTraceSummaries API 时使用的数据。

X-Ray 最多为每个跟踪的 50 条注释编制索引。

元数据是键值对,其中包含任何类型的值,包括对象和列表,但未编制索引。使用元数据记录要存储在跟踪中但不需要用于搜索跟踪的数据。

您可以在 CloudWatch 控制台的跟踪详细信息页面的区段或子区段详细信息窗口中查看注释和元数据。有关更多信息,请参阅中的查看跟踪和跟踪详细信息探索 X-Ray 控制台

错误、故障和异常

X-Ray 会跟踪您的应用程序代码中的错误以及下游服务返回的错误。X-Ray 会跟踪请求中的以下HTTP响应代码:

  • Error— 客户端错误(400 系列错误)表示服务器无法理解或处理来自客户端的请求,因为请求本身包含错误。这些错误可能是由语法错误、信息缺失或请求正文错误引起的。

  • Fault— 服务器故障(500 系列错误)表示由于服务器本身存在问题,服务器无法处理有效的请求。这些错误可能是由软件或硬件故障或服务器资源限制等问题引起的。

  • Throttle— 限制错误(429 请求过多)是一种特定类型的客户端错误,当客户端在一段时间内向服务器或 API 发送过多请求时,就会发生这种错误。

如果您的应用程序在处理已检测请求时发生异常,X-Ray SDK 会记录有关异常的详细信息,包括堆栈跟踪 ID(如果有)。您可以在 X-Ray 控制台的分段详细信息下方查看异常。