Lambda 自动仪表化

使用 OpenTelemetry 自动检测您的 Lambda 函数

OpenTelemetry 社区为以下语言提供了独立的检测 Lambda 层

  • Java
  • JavaScript
  • Python
  • Ruby

您可以通过 AWS 管理控制台将这些层添加到您的 Lambda 函数中,以自动检测您的应用程序。这些层不包含 Collector,除非您配置了外部 Collector 实例来发送您的数据,否则 Collector 是必需的。

添加 OTel Collector Lambda 层的 ARN

请参阅 Collector Lambda 层指南,了解如何将该层添加到您的应用程序并配置 Collector。我们建议您首先添加此层。

语言要求

Lambda 层支持 Java 8、11 和 17 (Corretto) Lambda 运行时。有关支持的 Java 版本,请参阅 OpenTelemetry Java 文档

注意: Lambda 层中包含 OTel Java 自动检测代理 - 自动检测对 AWS Lambda 的启动时间有显著影响,通常需要您将其与预置并发和预热请求一起使用,才能提供生产请求,而不会在初始请求初始化时导致超时。

默认情况下,层中的 OTel Java 代理会尝试自动检测应用程序中的所有代码。这可能会对 Lambda 的冷启动时间产生负面影响。

我们建议您仅为应用程序使用的库/框架启用自动检测。

要仅启用特定检测,您可以使用以下环境变量

  • OTEL_INSTRUMENTATION_COMMON_DEFAULT_ENABLED:设置为 false 时,禁用层中的自动检测,需要单独启用每个检测。

  • OTEL_INSTRUMENTATION_<NAME>_ENABLED:设置为 true 以启用特定库或框架的自动检测。将 <NAME> 替换为您要启用的检测。有关可用检测的列表,请参阅 抑制特定代理检测

例如,要仅为 Lambda 和 AWS SDK 启用自动检测,您需要设置以下环境变量

OTEL_INSTRUMENTATION_COMMON_DEFAULT_ENABLED=false
OTEL_INSTRUMENTATION_AWS_LAMBDA_ENABLED=true
OTEL_INSTRUMENTATION_AWS_SDK_ENABLED=true

Lambda 层支持 Node.js v18+ Lambda 运行时。有关支持的 JavaScript 和 Node.js 版本,请参阅 OpenTelemetry JavaScript 文档

Lambda 层支持 Python 3.9+ Lambda 运行时。有关支持的 Python 版本,请参阅 OpenTelemetry Python 文档以及 PyPi 上的包。

Lambda 层支持 Ruby 3.2 和 3.3 Lambda 运行时。有关支持的 OpenTelemetry Ruby SDK 和 API 版本,请参阅 OpenTelemetry Ruby 文档以及 RubyGem 上的包。

配置 AWS_LAMBDA_EXEC_WRAPPER

通过为 Node.js、Java、Ruby 或 Python 设置 AWS_LAMBDA_EXEC_WRAPPER=/opt/otel-handler 来更改应用程序的入口点。此包装器脚本将调用您的 Lambda 应用程序,并应用自动检测。

添加检测 Lambda 层的 ARN

要启用 Lambda 函数中的 OTel 自动检测,您需要添加并配置检测和 Collector 层,然后启用跟踪。

  1. 在 AWS 控制台中打开您要检测的 Lambda 函数。
  2. 在“Designer”部分的“Layers”中,选择“Add a layer”。
  3. 在“Specify an ARN”下,粘贴层 ARN,然后选择“Add”。

找到您语言的 最新检测层版本,并使用其 ARN,将 <region> 标记更改为您 Lambda 所在的区域。

注意:Lambda 层是区域化资源,意味着它们只能在发布它们的区域中使用。确保在与您的 Lambda 函数相同的区域中使用该层。社区在所有可用区域都发布了层。

配置您的 SDK 导出器

如果存在带有 gRPC / HTTP 接收器的嵌入式 Collector,Lambda 层使用的默认导出器无需更改即可正常工作。无需更新环境变量。但是,不同语言对协议的支持和默认值有所不同,具体记录在下方。

OTEL_EXPORTER_OTLP_PROTOCOL=grpc 支持:grpchttp/protobufhttp/json OTEL_EXPORTER_OTLP_ENDPOINT=https://:4317

不支持 OTEL_EXPORTER_OTLP_PROTOCOL 环境变量。硬编码的导出器使用 http/protobuf 协议 OTEL_EXPORTER_OTLP_ENDPOINT=https://:4318

OTEL_EXPORTER_OTLP_PROTOCOL=http/protobuf 支持:http/protobufhttp/json OTEL_EXPORTER_OTLP_ENDPOINT=https://:4318

OTEL_EXPORTER_OTLP_PROTOCOL=http/protobuf 支持:http/protobuf OTEL_EXPORTER_OTLP_ENDPOINT=https://:4318

发布您的 Lambda

发布您的 Lambda 的新版本以部署新的更改和检测。


最后修改于 2025 年 10 月 22 日:Update lambda-auto-instrument.md (#8188) (bf8cc730)