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

如何在Google Cloud Function中将OpenTelemetry自定义span挂载到默认span

解决方案

问题根源

你遇到的是GCP原生链路追踪上下文和OpenTelemetry上下文未打通的问题:GCP Functions默认生成的/process_me根span属于GCP原生追踪体系,你的OpenTelemetry实例默认没有读取该上下文,启动新span时识别不到父节点,就会把process_message判定为根span。

操作步骤

  1. 安装依赖包
    你需要先安装GCP上下文传播依赖:
pip install opentelemetry-api opentelemetry-sdk opentelemetry-propagator-gcp
  1. 注册GCP追踪传播器
    在函数初始化阶段(全局位置)注册GCP专属的上下文传播器,用于从请求头中读取GCP原生的追踪信息:
from opentelemetry import propagators
from opentelemetry.propagators.gcp import GCPCloudTracePropagator

# 全局注册GCP追踪传播器
propagators.set_global_textmap(GCPCloudTracePropagator())
  1. 修改处理函数,显式传入父上下文
    处理请求时先提取请求头中的原生追踪上下文,作为父节点传入你自定义的span:
def process(request: Request) -> str:
    # 从请求头提取GCP原生的追踪上下文作为父上下文
    parent_context = propagators.extract(carrier=request.headers)
    # 启动子span时显式指定父上下文
    with TRACER.start_as_current_span("process_message", context=parent_context) as span:
        return process_message(request)

验证注意事项

  • 确保你的OpenTelemetry链路数据导出器配置为GCP Cloud Trace导出器,确保两类span上报到同一个链路系统中,父子关系才能正确展示。
  • 若关联失败可对比提取到的parent_context中的trace ID和GCP默认/process_me span的trace ID,排查请求头提取是否异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 01:36:03