Lambda自动仪表化

使用OpenTelemetry自动仪表化你的Lambda函数

OpenTelemetry社区为以下语言提供了独立的Lambda层进行仪表化:

  • Java
  • JavaScript
  • Python

你可以通过AWS控制台将这些层添加到你的Lambda函数中,以自动仪表化你的应用程序。这些层不包括Collector,除非你配置了外部Collector实例来发送你的数据。

添加OTel Collector Lambda层的ARN

请参考Collector Lambda层指南,添加该层到你的应用程序并配置Collector。我们建议你首先添加这个层。

语言要求

该Lambda层支持Java 8、11和17(Corretto)的Lambda运行时。更多关于支持的Java版本的信息,请查看OpenTelemetry Java文档

注意: Java自动仪表化代理位于Lambda层中。自动仪表化会显著影响AWS Lambda的启动时间,因此你通常需要与预置并发和预热请求一起使用,以便在初始化过程中不造成初始请求超时,从而提供生产请求的服务。

默认情况下,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 v14+的Lambda运行时。有关支持的JavaScript和Node.js版本的更多信息,请查看OpenTelemetry JavaScript文档

该Lambda层支持Python 3.8和Python 3.9的Lambda运行时。有关支持的Python版本的更多信息,请查看OpenTelemetry Python文档以及PyPi上的软件包。

配置AWS_LAMBDA_EXEC_WRAPPER

通过设置AWS_LAMBDA_EXEC_WRAPPER=/opt/otel-handler(对于Node.js或Java)或AWS_LAMBDA_EXEC_WRAPPER=/opt/otel-instrument(对于Python),来更改你的应用程序的入口点。这些包装脚本将应用自动仪表化包应用于你的Lambda应用程序。

添加仪表化Lambda层的ARN

要在Lambda函数中启用OTel自动仪表化,你需要添加并配置仪表化和Collector层,然后启用跟踪。

  1. 在AWS控制台中打开你要仪表化的Lambda函数。
  2. 在设计器中的图层部分,选择"Add a layer"。
  3. 在"Specify an ARN"下,粘贴层的ARN,然后选择"Add"。

在更改<region>标签为你的Lambda所在的区域之后,找到你的语言的最新仪表化层发布并使用该ARN。

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

配置你的SDK Exporters

Lambda层使用的默认exporter在嵌入式Collector中工作而无需任何更改。环境变量无需更新。然而,不同的语言有不同级别的协议支持和默认值,下面进行了文档化。

OTEL_EXPORTER_OTLP_PROTOCOL=grpc,支持:grpchttp/protobufhttp/json OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4317

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

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

发布你的Lambda函数

发布Lambda的新版本以部署新的更改和仪表化。

最后修改 December 10, 2023: translate (a4350d6e)