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层,然后启用跟踪。
- 在AWS控制台中打开你要仪表化的Lambda函数。
- 在设计器中的图层部分,选择"Add a layer"。
- 在"Specify an ARN"下,粘贴层的ARN,然后选择"Add"。
在更改<region>
标签为你的Lambda所在的区域之后,找到你的语言的最新仪表化层发布并使用该ARN。
注意:Lambda层是区域化资源,这意味着它们只能在发布它们的区域中使用。请确保在与你的Lambda函数相同的区域中使用该层。社区在所有可用的区域发布层。
配置你的SDK Exporters
Lambda层使用的默认exporter在嵌入式Collector中工作而无需任何更改。环境变量无需更新。然而,不同的语言有不同级别的协议支持和默认值,下面进行了文档化。
OTEL_EXPORTER_OTLP_PROTOCOL=grpc
,支持:grpc
、http/protobuf
和http/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/protobuf
和http/json
OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4318
发布你的Lambda函数
发布Lambda的新版本以部署新的更改和仪表化。