【问题标题】:How to attach OpenTelemetry span to default span in Cloud Function如何将 OpenTelemetry 跨度附加到 Cloud Function 中的默认跨度
【发布时间】:2022-01-01 06:06:05
【问题描述】:

我在 Google Functions 中有一个名为 process_me 的 HTTP 端点:

def process(request: Request) -> str:
  return process_message(request)

在 GCP 中生成 /process_me 跟踪。 现在为了进一步追踪,我添加了 OpenTelemetry:

def process(request: Request) -> str:
  with TRACER.start_as_current_span("process_message") as span:
    return process_message(request)

这反过来又导致跟踪不再以/process_me 开头。相反,它们被命名/具有 URL process_message。 不过,在跨度下方跟踪的所有内容都正确附加到 process_message

所以我想知道如何将 Span process_message 添加到 Span /process_me(而不是替换它)?

【问题讨论】:

    标签: python google-cloud-functions open-telemetry


    【解决方案1】:

    请注意,/process_me 是负载均衡器的跟踪条目。所以我希望它超越网络服务。

    我能想到的最好的是:

    def _build_trace_links(headers: EnvironHeaders) -> List[Link]:
        """
        Tries to extract GCP trace context from headers.
        Example header would be:
        ```
        X-Cloud-Trace-Context: TRACE_ID/SPAN_ID;o=TRACE_TRUE
        ```
        """
        trace_header: str = headers.get("X-Cloud-Trace-Context", "")
        if not trace_header:
            return []
        ids, opts = trace_header.split(";", 1)[0]
        b = opts.split("=", 1)[1]
        if b.upper() != "TRACE_TRUE":
            return []
    
        trace_id, span_id = ids.split("/", 1)
    
        parent_context = SpanContext(
            trace_id=int(trace_id, 16),
            span_id=int(span_id),
            is_remote=True,
        )
    
        return [Link(context=parent_context)]
    

    这样您可以提取父级并添加至少一个指向process_message 的链接。

    【讨论】:

      【解决方案2】:

      我可以看到您已经找到了一些相关信息,但它不是跟踪中的父子关系,您正在进行自己的解析和链接。我相信您在这里需要的是为您完成所有工作的传播者。我对 Google Cloud Function 不是很熟悉,但我认为这应该会有所帮助。

      安装传播器

      python -m pip install opentelemetry-propagator-gcp
      

      并设置全局文本映射传播器

      ...
      from opentelemetry.propagate import set_global_textmap
      from opentelemetry.propagators.cloud_trace_propagator import CloudTraceFormatPropagator
      ...
      
      set_global_textmap(CloudTraceFormatPropagator())
      
      ...
      

      【讨论】:

        猜你喜欢
        • 2021-08-02
        • 1970-01-01
        • 2021-10-02
        • 1970-01-01
        • 2022-01-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多