跳转至

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 层,所以我们使用pipdatadog-lambda 包及其依赖项本地安装到您的函数项目文件夹中。

pip install datadog-lambda -t ./
注意datadog-lambda 依赖于 ddtrace,而 ddtrace 使用了原生扩展;因此必须在正确架构(x86_64arm64)的 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,这里主要介绍手动构建方式:

  1. 下载源码
git clone https://github.com/open-telemetry/opentelemetry-lambda.git
  1. 构建

构建前,主要安装相关 aws 工具,可以参考仓库 README 文件,假设以及装好了相关工具,执行下面操作进行构建:

cd python/src
./run.sh -r cn-northwest-1

构建部分日志如下:

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
  • 测试

点击测试按钮进行测试,成功后可登陆平台查看链路数据

文档评价

文档内容是否对您有帮助? ×