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

多个Lambda函数如何配置使用同一个X-Ray Tracing-ID

请求工作流

同tracing-id透传配置方案

前提

你已经在入口Lambda将tracing-id写入RabbitMQ消息的messageAttributes头中,消费侧Lambda可直接从触发事件中提取该字段。

步骤1:开启Lambda链路追踪能力(AWS X-Ray场景)

如果你的链路追踪基于AWS X-Ray实现,需要先做如下基础配置:

  • 进入监听RabbitMQ的Lambda控制台,在「配置」-「监控和运维工具」中开启主动追踪
  • 给Lambda的执行角色添加xray:PutTraceSegments、xray:PutTelemetryRecords权限,保证追踪数据可以正常上报
    如果使用自研或第三方链路追踪系统,可直接跳过该步骤。

步骤2:从RabbitMQ触发事件中提取tracing-id

Lambda的RabbitMQ触发器会把消息头放在事件的messageAttributes字段中,不同运行时提取示例如下:

Python 示例

def lambda_handler(event, context):
    # 遍历队列消息
    for queue_name, messages in event['rmqMessagesByQueue'].items():
        for msg in messages:
            # 替换为你实际定义的tracing-id头字段名
            tracing_id = msg['messageAttributes'].get('tracing-id', {}).get('stringValue')
            # 后续业务逻辑统一携带该tracing-id

Node.js 示例

exports.handler = async (event) => {
    for (const queueName of Object.keys(event.rmqMessagesByQueue)) {
        const messages = event.rmqMessagesByQueue[queueName];
        for (const msg of messages) {
            const tracingId = msg.messageAttributes?.['tracing-id']?.stringValue;
            // 绑定到当前链路上下文
        }
    }
};

步骤3:绑定到当前链路上下文

  • X-Ray场景:将提取到的trace id设置为当前Lambda追踪段的父ID,即可将当前Lambda的调用数据挂载到原有整条链路中,实现全链路id统一
  • 其他链路系统:将提取到的tracing-id写入当前服务的全局链路上下文,后续所有日志输出、下游接口调用、数据库操作都自动携带该ID即可

注意事项

  • 若你发送消息时自定义了tracing-id的头字段名,提取时要替换为对应的实际字段名
  • 不要把tracing-id只写在消息体内,放在消息属性头中可以避免消费侧解析消息体就能拿到ID,减少耦合

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 04:45:05