You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于容器镜像使用Lambda Telemetry API并实现ADOT代码埋点?

基于容器镜像的AWS Lambda Python函数实现ADOT埋点方案

由于基于容器镜像的Lambda函数无法直接使用Lambda Layer,要实现ADOT(AWS Distro for OpenTelemetry)埋点,需要手动将ADOT的运行时依赖打包到镜像中,并调整Lambda的启动逻辑让ADOT包装器生效,具体步骤如下:

核心思路

ADOT的Lambda Layer本质是封装了OpenTelemetry运行时、Lambda适配器和自动埋点插件,我们需要把这些内容复制到镜像的/opt目录(Lambda Layer的默认挂载路径),然后修改Lambda的启动命令,让ADOT的opentelemetry-instrument工具先加载,再启动业务函数,从而自动包装所有支持的网络调用(如boto3、requests等)实现埋点。

具体实现步骤

1. 编写Dockerfile打包镜像

以下是完整的Dockerfile示例,以Python 3.11为例:

# 基于官方Lambda Python基础镜像
FROM public.ecr.aws/lambda/python:3.11

# 下载对应版本的ADOT Lambda Layer包并解压到/opt目录
# 可通过AWS CLI获取Layer的下载链接:aws lambda get-layer-version-by-arn --arn <ADOT_LAYER_ARN> --query 'Content.Location' --output text
# 替换<ADOT_LAYER_DOWNLOAD_URL>为实际下载链接,比如对应Python3.11的Layer ARN通常为arn:aws:lambda:区域ID:901920570463:layer:aws-otel-python311-ver-xxx:版本号
RUN curl -sSL <ADOT_LAYER_DOWNLOAD_URL> -O adot-layer.zip && \
    unzip adot-layer.zip -d /opt && \
    rm adot-layer.zip

# 复制业务代码和依赖文件到Lambda工作目录
COPY app.py requirements.txt /var/task/

# 安装业务依赖(如果有)
RUN pip install -r requirements.txt --target /var/task

# 配置ADOT环境变量,指定服务名和导出器
ENV OTEL_SERVICE_NAME="your-function-name"
ENV OTEL_TRACES_EXPORTER="xray"
ENV OTEL_EXPORTER_XRAY_TRACING_NAME="your-function-name"

# 修改启动命令,用ADOT包装器启动Lambda Runtime Interface Client
CMD ["/opt/bin/opentelemetry-instrument", "python", "-m", "awslambdaric", "app.handler"]

2. 关键配置说明

  • ADOT Layer内容复制:必须将Layer的内容解压到/opt目录,因为ADOT的工具和依赖默认从该路径加载。
  • 启动命令调整:使用/opt/bin/opentelemetry-instrument包装Lambda的Runtime Interface Client(awslambdaric)启动命令,这样ADOT会在加载业务代码前完成埋点插件的初始化,自动拦截并追踪后续的网络调用。
  • 环境变量配置:
    • OTEL_SERVICE_NAME:设置追踪数据中的服务名称,方便在X-Ray中识别。
    • OTEL_TRACES_EXPORTER:指定为xray,确保追踪数据发送到AWS X-Ray服务。

3. 自定义埋点(可选)

如果需要手动添加自定义Span,业务代码中的写法和使用Lambda Layer时一致,示例:

from opentelemetry import trace

tracer = trace.get_tracer(__name__)

def handler(event, context):
    with tracer.start_as_current_span("custom-business-step"):
        # 业务逻辑代码
        return {"statusCode": 200, "body": "success"}

4. 验证埋点效果

部署镜像到Lambda后,触发函数调用,登录AWS X-Ray控制台,查看对应的Trace详情,确认是否生成了包含自动埋点Span(如boto3调用、HTTP请求)和自定义Span的完整追踪链路。

内容的提问来源于stack exchange,提问作者PeeKay

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 10:00:24