AWS Lambda Tracing
配置¶
当前 AWS Lambda 支持两种方式接入链路信息:
- DDTrace
- Opentelemetry
DDTrace 接入¶
准备 Lambda Layer¶
需要新增以下两个 Layer:
- DataDog Layer:用于链路插桩
- DataKit Layer: 用于接收 DataDog Layer 的可观测数据
新增 DataKit Layer¶
参考:AWS Lambda 扩展 > 添加 DataKit 层
新增 DataDog Layer¶
- AWS 全球区
选择合适的 ARN:
# Use this format for x86-based Lambda deployed in AWS commercial regions
arn:aws:lambda:<AWS_REGION>:464622532012:layer:Datadog-<RUNTIME>:118
# Use this format for arm64-based Lambda deployed in AWS commercial regions
arn:aws:lambda:<AWS_REGION>:464622532012:layer:Datadog-<RUNTIME>-ARM:118
# Use this format for x86-based Lambda deployed in AWS GovCloud regions
arn:aws-us-gov:lambda:<AWS_REGION>:002406178527:layer:Datadog-<RUNTIME>:118
# Use this format for arm64-based Lambda deployed in AWS GovCloud regions
arn:aws-us-gov:lambda:<AWS_REGION>:002406178527:layer:Datadog-<RUNTIME>-ARM:118
将 <AWS_REGION> 替换为有效的 AWS 区域,例如 us-east-1。可用的 Python38、Python39、Python310、Python311、Python312、Python313。
- AWS 中国区
由于 Datadog 并没有在中国区的维护 datadog-lambda-python 层,所以我们使用pip将 datadog-lambda 包及其依赖项本地安装到您的函数项目文件夹中。
datadog-lambda 依赖于 ddtrace,而 ddtrace 使用了原生扩展;因此必须在正确架构(x86_64 或 arm64)的 Linux 环境中安装和编译。
将函数的「运行时-处理程序」设置为 datadog_lambda.handler.handler
环境变量配置¶
- DD_TRACE_ENABLED: 开启分布式追踪默认为 true
- DD_LAMBDA_HANDLER: 设置为原始处理程序,例如:
lambda_function.lambda_handler - DD_TRACE_AGENT_URL:
http://localhost:9529 - DD_TRACE_DEBUG:日志输出,默认关闭
- ENV_DATAWAY:上报数据的 DataWay 地址(token 从工作空间获取)
配置完成后,点击测试,然后可以登陆平台查看链路数据
Opentelemetry 接入¶
准备 Lambda Layer¶
需要新增以下两个 Layer: - Opentelemetry Layer:用于链路插桩 - DataKit Layer: 用于接收 Opentelemetry 的可观测
新增 DataKit Layer¶
参考:AWS Lambda 扩展 > 添加 DataKit 层
新增 Opentelemetry Layer¶
使用 OpenTelemetry 自动插桩方式可以零侵入 Python 代码实现链路追踪,这里 OpenTelemetry 可以作为 layer 附着到 Lambda 函数内部。
AWS 宁夏节点需要手动构建 OpenTelemetry layer,其他节点可直接使用对应的 arn,这里主要介绍手动构建方式:
- 下载源码
- 构建
构建前,主要安装相关 aws 工具,可以参考仓库 README 文件,假设以及装好了相关工具,执行下面操作进行构建:
构建部分日志如下:
running...
Invoked with: -r cn-northwest-1
sam building...
run.sh: Starting sam build.
Starting Build inside a container
Building layer 'OTelLayer'
For container layer build, first compatible runtime is chosen as build target for container.
Fetching public.ecr.aws/sam/build-python3.9:latest-x86_64 Docker container image......
Mounting /home/liurui/code/opentelemetry-lambda/python/src/otel as /tmp/samcli/source:ro,delegated, inside runtime container
Successfully created/updated stack - otel-stack in cn-northwest-1
OTel Lambda layer ARN:
arn:aws-cn:lambda:cn-northwest-1:888888888:layer:otel-layer:2
构建成功后,自动上传在 AWS Layer 上 otel-layer,复制当前 arn,后续操作会用到.
环境变量配置¶
在对应的函数配置里面进行添加
# otel lambda handler
AWS_LAMBDA_EXEC_WRAPPER = /opt/python/otel-handler
# 网关地址
ENV_DATAWAY = http://open****?token=xxxxxxx
# otel 上报地址,无需调整
OTEL_EXPORTER_OTLP_ENDPOINT = http://localhost:9529/otel
- 测试
点击测试按钮进行测试,成功后可登陆平台查看链路数据