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

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

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

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

这两个视角都非常有用,因为下游服务精确地记录该应用程序开始和结束处理请求的时间,而上游服务记录往返延迟,包括在两个服务之间传输时请求所花费的时间。
服务图
X-Ray 使用您的应用程序发送的数据来生成服务图。每个Amazon向 X-Ray 发送数据的资源在图表中显示为服务。边缘连接协同工作以处理请求的服务。边缘将客户端连接到您的应用程序,又将您的应用程序连接到它所使用的下游服务和资源。
服务名称
一个细分市场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 SDK 还使用跟踪 ID 发送数据。因此,API、Lambda 服务和 Lambda 函数的节点在服务映射上都显示为独立但相互连接的节点。
服务图数据保留 30 天。
跟踪
一个追踪编号通过您的应用程序跟踪请求的路径。跟踪会收集单个请求生成的所有分段。该请求通常是 HTTP GET 或 POST 请求,它通过负载均衡器传输、访问您的应用程序代码并生成对其他人的下游调用Amazon服务或外部 Web API。HTTP 请求与之交互的第一个受支持服务将向请求中添加一个跟踪 ID 标头,并向下游传播该标头以跟踪延迟、处置和其他请求数据。

见Amazon X-Ray定价
采样
为确保高效跟踪并提供应用程序所服务请求的代表性样本,X-Ray SDK 应用了取样用于确定跟踪哪些请求的算法。默认情况下,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
Lineage
可以由 Lambda 和其他人附加到跟踪标头中Amazon服务是其处理机制的一部分,不应直接使用。
例 使用 Lineage 追踪标题
X-Amzn-Trace-Id: Root=1-5759e988-bd862e3fe1be46a994272793;Sampled=1;Lineage=a87bd80c:1|68fd508a:5|c512fbe3:2
筛选条件表达式
即使使用采样,复杂应用程序也会生成大量数据。这个Amazon X-Ray控制台提供了easy-to-navigate服务图视图。它显示运行状况和性能信息,可帮助您识别应用程序中的问题和优化机会。对于高级跟踪,您可以细化以跟踪单个请求,或者使用筛选表达式来查找与特定路径或用户相关的跟踪。

组
扩展过滤器表达式,X-Ray 还支持分组功能。通过使用筛选条件表达式,您可以定义接受跟踪进入组的标准。
您可以按名称或 Amazon 资源名称 (ARN) 调用该群组,以生成其自己的服务图、跟踪摘要和 AmazonCloudWatch指标。创建组后,当传入跟踪存储在 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 射线控制台中。