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

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

Amazon X-Ray 概念

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

Segments

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

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

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

  • 响应如下— 状态、内容

  • 所完成工作— 开始时间和结束时间、子分段

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


        Scorement 的分段数据

X-Ray 开发工具包从请求和响应标头、应用程序中的代码以及Amazon它运行的资源。您可以通过修改应用程序配置或代码来选择要收集的数据,以分析传入请求、下游请求和Amazon开发工具包客户端。

转发的请求

如果负载均衡器或其他中介机构将请求转发到您的应用程序,则 X-Ray 会从X-Forwarded-For头,而不是来自 IP 数据包中的源 IP。为转发请求记录的客户端 IP 可能是伪造的,因此不应该被信任。

您可以使用 X-Ray 开发工具包来记录其他信息,如注释和元数据。有关分段和子分段中记录的结构和信息的详情,请参阅 Amazon X-Ray 分段文档。分段文档的大小最大可以是 64 kB。

Subsegments

分段可以将关于已完成工作的数据细分为子分段。子分段提供有关您的应用程序为满足原始请求而进行的下游调用的更精细的计时信息和详情。子分段可以包含对调用Amazon服务、外部 HTTP API 或 SQL 数据库。您甚至可以定义任意子分段以分析特定函数或应用程序中的代码行。


        子分段提供更精细的信息

对于不发送自己的分段的服务,如 Amazon DynamoDB,X-Ray 将使用子分段生成推断分段和服务地图上的下游节点。这样您可以查看所有下游依赖项,即使它们不支持跟踪或者是外部依赖项也是如此。

子分段表示从您应用程序的角度将下游调用视为客户端。如果还会分析下游服务,则它发送的分段会替换从上游客户端的子分段生成的推断分段。服务图上的节点使用来自服务分段的信息 (如果可用),而两个节点之间的边缘节点使用上游服务的子分段。

例如,当您使用指定的Amazon开发工具包客户端时,X-Ray 开发工具包会为该调用记录子分段。DynamoDB 不发送分段,因此跟踪中的推断分段、服务图上的 DynamoDB 节点以及您的服务与 DynamoDB 之间的边缘节点全都包含来自子分段的信息。


        分析过的应用程序与 DynamoDB 之间的边缘节点。

当您使用分析的应用程序调用另一个分析的服务时,下游服务会发送自己的分段,以从自己的角度记录上游服务在子分段中记录的相同调用。在服务图中,这两个服务的节点都包含来自这些服务的分段的计时和错误信息,而它们之间的边缘节点包含来自上游服务的分段的信息。


        一个分析的应用程序,该应用程序调用另一个分析的应用程序。

这两个视角都非常有用,因为下游服务精确地记录该应用程序开始和结束处理请求的时间,而上游服务记录往返延迟,包括在两个服务之间传输时请求所花费的时间。

服务图

X-Ray 使用您的应用程序发送的数据来生成服务图。EACHAmazon资源在图中 X-Ray 示为一项服务。Edges连接协同工作以服务于请求的服务。边缘将客户端连接到您的应用程序,又将您的应用程序连接到它所使用的下游服务和资源。

服务名称

分段的name应与生成段的服务的域名或逻辑名称匹配。但是,这不是强制执行的。任何有权限的应用程序PutTraceSegments可以发送任何名称的段。

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


        服务地图

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

例如,Scorekeep 运行一个调用微服务(Amazon Lambda 函数)的 Web API,通过使用 Node.js 库来生成随机名称。适用于 Java 的 X-Ray 开发工具包生成跟踪 ID 并将其包含在对 Lambda 的调用中。Lambda 发送跟踪数据并将跟踪 ID 传递给函数。适用于 Node.js 的 X-Ray 开发工具包也使用跟踪 ID 发送数据。结果,API、Lambda 服务和 Lambda 函数的节点在服务地图上全都显示为看似分离其实连接的节点。


        API、Lambda 服务和 Lambda 函数的节点显示为看似分离其实连接的节点

服务图数据将保留 30 天。

Traces

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


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

服务图数据将保留 30 天。

Sampling

为确保高效跟踪并为应用程序所服务的请求提供代表性样本,X-Ray 开发工具包应用采样算法来确定哪些请求被跟踪。默认情况下,X-Ray SDK 每秒记录第一个请求,并记录 5% 的其他请求。

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

例如,您可能希望禁用采样,并跟踪对修改状态或处理用户账户或交易的调用的所有请求。对于量非常大的只读调用,例如后台轮询、运行状况检查或连接维护,您采用较低的采样率仍可获取足够的数据来了解出现的任何问题。

有关更多信息,请参阅 在 X-Ray 控制台中配置采样规则

跟踪标头

所有请求都被跟踪,直到一个可配置的最低限度。在达到这一最低限度后,只有一部分请求被跟踪,以避免不必要的开销。采样决策和跟踪 ID 添加到 HTTP 请求中跟踪标头命名X-Amzn-Trace-Id。请求命中的第一个 X-ray 集成服务会添加一个跟踪标头,该跟踪标头由 X-X-Ray 开发工具包读取并包含在响应中。

例 具有根跟踪 ID 和采样决策的跟踪标头

X-Amzn-Trace-Id: Root=1-5759e988-bd862e3fe1be46a994272793;Sampled=1
跟踪标头安全性

跟踪标头可以源自 X-Ray 开发工具包、Amazon服务或客户端请求。应用程序可以从传入请求中删除 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

筛选条件表达式

即使使用采样,复杂应用程序也会生成大量数据。Amazon X-Ray 控制台提供了易于浏览的服务图视图。它显示运行状况和性能信息,帮助您识别问题和机会,用于优化应用程序。对于高级跟踪,您可以细化以跟踪单个请求,或者使用筛选表达式来查找与特定路径或用户相关的跟踪。


        深入查看各个请求的跟踪

Groups

X-Ray 扩展滤镜表达式,也支持分组功能。通过使用筛选条件表达式,您可以定义接受跟踪进入组的标准。

您可以按名称或 Amazon 资源名称 (ARN) 调用组,以生成自己的服务图、跟踪摘要和Amazon CloudWatch指标。创建组后,将根据组的筛选条件表达式检查传入跟踪,因为它们存储在X-Ray服务。指标用于数字匹配每个标准的跟踪每分钟都会发布到 CloudWatch。

更新组的筛选条件表达式不会更改已记录的数据。更新仅应用于后续跟踪。这可能会生成新旧表达式的合并图形。要避免这种情况,请删除当前组并创建一个新的组。

注意

按照与筛选器表达式匹配的检索跟踪数对组进行计费。有关更多信息,请参阅Amazon X-Ray定价

有关组的更多信息,请参阅在 X-Ray 控制台中配置组

注释和元数据

当您分析应用程序时,X-Ray 开发工具包记录有关传入和传出请求的信息,Amazon使用的资源和应用程序本身。您可以向分段文档中添加其他信息作为注释和元数据。注释和元数据在跟踪级别进行聚合,并且可以添加到任何段或子段中。

注释 是简单的键-值对,经编制索引后用于筛选条件表达式。使用注释记录要用于对控制台中的跟踪进行分组的数据或在调用 GetTraceSummaries API 时使用的数据。

X-Ray 指标最多可达 50 个注释。

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

您可以在 X-Ray 控制台的分段或子分段详情中查看注释和元数据。


        可以在 X-Ray 控制台的分段或子分段详情中查看注释和元数据

错误、故障和异常

X-Ray 跟踪在您的应用程序代码中发生的错误以及下游服务返回的错误。错误分类如下。

  • Error— 客户端错误(400 系列错误)

  • Fault— 服务器故障 (500 系列错误)

  • Throttle— 限制错误 (429 请求过多)

如果在您的应用程序为某个分析的请求提供服务时发生异常,X-Ray 开发工具包会记录有关异常的详细信息,包括堆栈跟踪 (如果可用)。您可以在分段详细信息在 X-Ray 控制台中。