本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
Amazon X-Ray 概念
Amazon X-Ray 从服务以分段 形式接收数据。然后,X-Ray 将有共同请求的分段分组为轨迹。X-Ray 处理跟踪以生成服务图,以直观呈现您的应用程序。
分段
运行应用程序逻辑的计算资源以分段形式发送有关其工作的数据。区段提供资源的名称、有关请求的详细信息以及有关已完成工作的详细信息。例如,当 HTTP 请求到达您的应用程序时,它可以记录下列相关数据:
-
主机 — 主机名、别名或 IP 地址
-
请求 — 方法、客户端地址、路径、用户代理
-
响应 — 状态、内容
-
已完成的工作 ——开始和结束时间、子分段
-
发生的问题 — 错误、故障和异常,包括自动捕获异常堆栈。

X-Ray SDK 从请求和响应标头、应用程序中的代码以及有关其运行Amazon资源的元数据中收集信息。您可以通过修改应用程序配置或代码来选择要收集的数据,以分析传入请求、下游请求和Amazon SDK 客户端。
如果负载均衡器或其他中介将请求转发到您的应用程序,则 X-Ray 会从请求的X-Forwarded-For
标头中获取客户端 IP,而不是 IP 数据包中的源 IP。为转发请求记录的客户端 IP 可能是伪造的,因此不应信任该客户端 IP。
可以使用 X-Ray 开发工具包来记录注释和元数据等其他信息。 有关分段和子分段中记录的结构和信息的详情,请参阅 Amazon X-Ray 分段文档。分段文档最多可以有 64 kB。
子分段
分段可以将有关已完成工作的数据分解为子分段。子分段提供更精细的时间信息和有关您的应用程序为满足原始请求而进行的下游调用的详细信息。子分段可以包含有关Amazon服务调用、外部 HTTP API 或 SQL 数据库的更多详细信息。您甚至可以定义任意子分段以分析特定函数或应用程序中的代码行。

对于不发送自己的区段的服务,例如 Amazon DynamoDB,X-Ray 使用子分段在服务地图上生成推断的分段和下游节点。这样您可以查看所有下游依赖项,即使它们不支持跟踪或者是外部依赖项也是如此。
子分段表示从您应用程序的角度将下游调用视为客户端。如果还检测了下游服务,则它发送的分段将取代从上游客户端的子分段生成的推断分段。服务图上的节点使用来自服务分段的信息 (如果可用),而两个节点之间的边缘节点使用上游服务的子分段。
例如,当您使用仪表Amazon开发工具包客户端调用 DynamoDB 时,X-Ray 开发工具包会为该调用记录一个子分段。DynamoDB 不发送分段,因此跟踪中的推断分段、服务图上的 DynamoDB 节点以及您的服务与 DynamoDB 之间的边缘都包含来自子分段的信息。

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

这两个视角都非常有用,因为下游服务精确地记录该应用程序开始和结束处理请求的时间,而上游服务记录往返延迟,包括在两个服务之间传输时请求所花费的时间。
服务图表
X-Ray 使用您的应用程序发送的数据来生成服务图。向 X-Ray 发送数据的每种Amazon资源在图中都以服务形式出现。E@@ d ge 将协同工作以服务请求的服务连接起来。边缘将客户端连接到您的应用程序,又将您的应用程序连接到它所使用的下游服务和资源。
分段name
应与生成分段的服务的域名或逻辑名称相匹配。但是,这并未强制执行。任何具有权限的应用程序PutTraceSegments
都可以发送任何名称的区段。
服务图是一个 JSON 文档,其中包含有关构成应用程序的服务和资源的信息。X-Ray 控制台使用服务图生成可视化或服务地图。

对于分布式应用程序,X-Ray 将处理具有相同跟踪 ID 的请求的所有服务的节点合并为单个服务图。请求命中的第一个服务会添加一个跟踪标头,该跟踪标头在前端及其所调用的服务之间传播。
例如,Scorekeep 运行一个调用微服务(Amazon Lambda 函数)的 Web API,通过使用 Node.js 库来生成随机名称。适用于 Java 的 X-Ray SDK 生成跟踪 ID 并将其包含在对 Lambda 的调用中。Lambda 发送跟踪数据并将跟踪 ID 传递给函数。适用于 Node.js 的 X-Ray 开发工具包还使用跟踪 ID 发送数据。因此,API、Lambda 服务和 Lambda 函数的节点在服务映射上都显示为独立但相互连接的节点。
服务图数据保留 30 天。
跟踪
跟踪 ID 会跟踪请求在您的应用程序中传输的路径。跟踪会收集单个请求生成的所有分段。该请求通常是一个 HTTP GET 或 POST 请求,它通过负载均衡器传输,到达您的应用程序代码,并生成对其他Amazon服务或外部 Web API 的下游调用。HTTP 请求与之交互的第一个受支持服务将向请求中添加一个跟踪 ID 标头,并向下游传播该标头以跟踪延迟、处置和其他请求数据。

服务图数据保留 30 天。
采样
为确保跟踪有效,为应用程序所服务的请求提供代表性样本,X-Ray 开发工具包应用采样算法确定跟踪哪些请求会被跟踪。默认情况下,X-Ray SDK 每秒记录第一次请求,以及任何其他请求的百分之五。
为避免在开始时产生服务费,默认采样率是保守的。您可以配置 X-Ray 来修改默认采样规则,并配置根据服务或请求的属性应用采样的其他规则。
例如,您可能需要禁用采样并跟踪所有修改状态或处理用户或事务的呼叫的请求。对于高容量只读调用,例如后台投票、运行状况检查或连接维护,您可以低速采样,但仍能获得足够的数据来查看出现的任何问题。
有关更多信息,请参阅配置 采样规则:
追踪标头
所有请求都被跟踪,直到一个可配置的最低限度。达到最低要求后,会跟踪一定比例的请求以避免不必要的成本。采样决策和跟踪 ID 将添加到名为的跟踪标头中的 HTTP 请求中X-Amzn-Trace-Id
。请求到达的第一个集成 X-Ray 的服务会添加一个跟踪标头,该标头由 X-Ray SDK 读取并包含在响应中。
例 具有根跟踪 ID 和采样决策的跟踪标头
X-Amzn-Trace-Id: Root=1-5759e988-bd862e3fe1be46a994272793;Sampled=1
跟踪标头可能来自 X-Ray SDK、Amazon服务或客户端请求。应用程序可以从传入请求中删除 X-Amzn-Trace-Id
,避免由于用户向其请求中添加跟踪 ID 或采样决策而导致出现问题。
如果请求来自已安装仪器的应用程序,则跟踪标头也可以包含父区段 ID。例如,如果您的应用程序使用仪器化 HTTP 客户端调用下游 HTTP Web API,则 X-Ray SDK 会将原始请求的分段 ID 添加到下游请求的跟踪标头中。为下游请求提供服务的分析的应用程序可以记录父分段 ID 以连接两个请求。
例 跟踪标头带有根跟踪 ID、父分段 ID 和采样决策
X-Amzn-Trace-Id: Root=1-5759e988-bd862e3fe1be46a994272793;Parent=53995c3f42cd8ad8;Sampled=1
筛选条件表达式
即使使用采样,复杂应用程序也会生成大量数据。控制Amazon X-Ray台提供服务图的 easy-to-navigate 视图。它显示运行状况和性能信息,可帮助您确定应用程序中的问题和优化机会。对于高级跟踪,您可以细化以跟踪单个请求,或者使用筛选表达式来查找与特定路径或用户相关的跟踪。

组
X-Ray 扩展了过滤器表达式,还支持群组功能。通过使用筛选条件表达式,您可以定义接受跟踪进入组的标准。
您可以按名称或按亚马逊资源名称 (ARN) 调用该群组,以生成其自己的服务图、跟踪摘要和亚马逊 CloudWatch指标。创建群组后,当传入轨迹存储在 X-Ray 服务中时,将根据群组的过滤器表达式对其进行检查。与每个标准匹配的跟踪数量的指标 CloudWatch 每分钟发布一次。
更新组的筛选条件表达式不会更改已记录的数据。更新仅应用于后续跟踪。这可能导致新旧表达式的合并图形。为避免这种情况,请删除当前组并创建一个新组。
群组按检索到的与筛选表达式匹配的跟踪数量计费。有关更多信息,请参阅 Amazon X-Ray 定价
有关群组的更多信息,请参阅配置组。
注释和元数据
当您测试应用程序时,X-Ray SDK 会记录有关传入和传出请求、使用的Amazon资源以及应用程序本身的信息。您可以向分段文档中添加其他信息作为注释和元数据。注释和元数据在跟踪级别汇总,可以添加到任何分段或子分段。
注释 是简单的键-值对,经编制索引后用于筛选条件表达式。使用注释记录要用于对控制台中的跟踪进行分组的数据或在调用 GetTraceSummaries
API 时使用的数据。
X-Ray 为每条轨迹最多索引 50 条注释。
元数据是键值对,具有任何类型的值,包括对象和列表,但未编入索引。使用元数据记录要存储在跟踪中但不需要用于搜索跟踪的数据。
可以在 X-Ray 控制台中查看分段或子分段详细信息中的注释和元数据。

错误、故障和异常
X-Ray 跟踪应用程序代码中发生的错误以及下游服务返回的错误。错误分类如下。
-
Error
— 客户端错误(400 系列错误) -
Fault
— 服务器故障(500 系列错误) -
Throttle
— 限制错误(429 个请求太多)
当您的应用程序提供仪器化请求时发生异常时,X-Ray SDK 会记录有关异常的详细信息,包括堆栈跟踪(如果有)。可以在 X-Ray 控制台的分段详细信息下查看异常。