为 Amazon X-Ray 检测应用程序 - Amazon X-Ray
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

为 Amazon X-Ray 检测应用程序

检测应用程序涉及发送应用程序内传入和出站请求及其他事件的跟踪数据,以及与每个请求相关的元数据。您可以根据自身的特定需求,从多种不同检测选项中进行选择或结合使用:

  • 自动检测 - 无需更改代码即可检测应用程序,常规方法包括更改配置、添加自动检测代理或使用其他机制。

  • 库检测 - 进行最小的应用程序代码更改,来针对特定的库或框架添加预构建的检测,例如 Amazon SDK、Apache HTTP 客户端或 SQL 客户端。

  • 手动检测 - 在想要发送跟踪信息的每个位置,向应用程序添加检测代码。

可以使用多种 SDK、代理和工具来检测应用程序,实现 X-Ray 跟踪。

使用适用于 OpenTelemetry 的 Amazon Distro 检测应用程序。

适用于 OpenTelemetry 的 Amazon Distro(ADOT)是基于 Cloud Native Computing Foundation(CNCF)OpenTelemetry 项目的 Amazon 发行版。OpenTelemetry 提供一系列开源 API、库和代理来收集发行的跟踪和指标。此工具包是上游 OpenTelemetry 组件的发行版,其中包括由 Amazon 测试、优化、保护和支持的 SDK、自动检测代理和收集器。

借助 ADOT,工程师只需对应用程序进行一次检测,即可将相关的指标和跟踪发送到多个 Amazon 监控解决方案,包括 Amazon CloudWatch、Amazon X-Ray 和 Amazon OpenSearch Service。

将 X-Ray 与 ADOT 配合使用需要两个组件:适用于 X-Ray 的 OpenTelemetry SDK 适用于 OpenTelemetry 的 Amazon Distro 收集器。有关将适用于 OpenTelemetry 的 Amazon Distro 与 Amazon X-Ray 和其他 Amazon Web Services 服务 配合使用的详细信息,请参阅适用于 OpenTelemetry 的 Amazon Distro 文档

有关语言支持和使用情况的其他信息,请参阅 Github 上的 Amazon 观察

注意

现在,可以使用 CloudWatch 代理从 Amazon EC2 实例和本地服务器中收集指标、日志和跟踪信息。CloudWatch 代理版本 1.300025.0 及更高版本可以从 OpenTelemetry 或 X-Ray 客户端 SDK 中收集跟踪数据,并将这些跟踪数据发送到 X-Ray。使用 CloudWatch 代理,而不是适用于 OpenTelemetry 的 Amazon Distro(ADOT)收集器或 X-Ray 进程守护程序来收集跟踪数据,可以帮助您减少管理的代理数量。有关更多信息,请参阅《CloudWatch 用户指南》中的 CloudWatch 代理

ADOT 包括以下内容:

ADOT 目前包括适用于 JavaPython 的自动检测支持。此外,通过 ADOT 托管的 Lambda 层,ADOT 能够自动对使用 Java、Node.js 和 Python 运行时的 Amazon Lambda 函数及其下游请求进行检测。

ADOT SDK for Java 和 ADOT SDK for Go 支持 X-Ray 集中采样规则。如果您需要支持其他语言的 X-Ray 采样规则,请考虑使用 Amazon X-Ray SDK。

注意

您现在可以向 X-Ray 发送 W3C 跟踪 ID。默认情况下,使用 OpenTelemetry 创建的跟踪具有基于 W3C 跟踪上下文规范的跟踪 ID 格式。这与使用 X-Ray SDK 或集成了 X-Ray 的 Amazon 服务创建的跟踪 ID 的格式不同。为确保 X-Ray 接受采用 W3C 格式的跟踪 ID,您必须使用 0.86.0 或更新版本的 Amazon X-Ray 导出程序,其中包含 0.34.0 或更新版本的 ADOT 收集器。先前版本的导出器验证跟踪 ID 时间戳,这可能会导致 W3C 跟踪 ID 遭拒。

使用 SDKAmazon X-Ray 检测应用程序

Amazon X-Ray 包含一系列特定于编程语言的 SDK,来检测应用程序以将跟踪信息发送到 X-Ray。每个 X-Ray SDK 都提供以下内容:

  • 拦截器,可添加到您的代码中以跟踪传入 HTTP 请求

  • 客户端处理程序,可检测您的应用程序用来调用其他 Amazon Web Services 服务的 Amazon SDK 客户端

  • HTTP 客户端,用于检测对其他内部和外部 HTTP Web 服务的调用

X-Ray SDK 还支持检测对 SQL 数据库的调用、自动 Amazon SDK客户端检测以及其他特征。该 SDK 不是直接将跟踪数据发送到 X-Ray,而是将 JSON 分段文档发送到侦听 UDP 流量的进程守护程序进程。X-Ray 进程守护程序将分段缓冲在队列中,并将分段批量上传到 X-Ray。

提供了以下特定于编程语言的 SDK:

X-Ray 目前包括适用于 Java 的自动检测支持。

从适用于 OpenTelemetry 的 Amazon Distro 和 X-Ray SDK 之间进行选择

X-Ray 包含的 SDK 是 Amazon 提供的紧密集成的检测解决方案的一部分。适用于 OpenTelemetry 的 Amazon Distro 是一款更广泛行业解决方案的一部分,X-Ray 是其中多款跟踪解决方案中的一款。您可以使用任意一种方式在 X-Ray 中实现端到端跟踪,不过一定要了解它们之间的区别才能确定对您最有用的方式。

如果您有以下需求,建议使用适用于 OpenTelemetry 的 Amazon Distro 检测您的应用程序:

  • 无需重新检测代码即可将跟踪信息发送到多个不同的跟踪后端

  • 支持适用于每种语言的大量库检测,由 OpenTelemetry 社区进行维护

  • 完全托管的 Lambda 层,使用 Java、Python 或 Node.js 时无需更改代码即可打包收集遥测数据所需的一切

    注意

    适用于 OpenTelemetry 的 Amazon Distro 可提供更简化的入门体验,让您轻松检测 Lambda 函数。不过,由于 OpenTelemetry 提供的灵活性,您的 Lambda 函数将会需要更多内存和调用,可能会遇到冷启动延迟增加的情况,导致费用增加。如果您正在针对低延迟进行优化且不需要 OpenTelemetry 的高级功能(例如动态可配置的后端目标),则可能需要使用 Amazon X-Ray SDK 来检测应用程序。

如果您有以下需求,建议选择 X-Ray SDK 来检测应用程序:

  • 紧密集成的单一供应商解决方案

  • 与 X-Ray 集中采样规则集成,包括在 Node.js、Python、Ruby 或 .NET 时,能够从 X-Ray 控制台配置采样规则,以及跨多主机自动使用这些规则