Home >Backend Development >Golang >How Can You Create an OpenTelemetry Span from a String TraceID?

How Can You Create an OpenTelemetry Span from a String TraceID?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-10-26 14:09:02682browse

How Can You Create an OpenTelemetry Span from a String TraceID?

Constructing an OpenTelemetry Span from a String TraceID

To establish the parent-child relationship between spans, the headers must be utilized in situations where context propagation is not viable. In this scenario, a trace ID and span ID are contained within the message broker's headers, which allows the subscriber to create a new span with the parent trace ID.

Solution

The following steps can be taken to construct a context or span on the subscriber side using the trace ID:

  1. Define a function with the trace ID as an argument:
<code class="go">func constructNewSpanContext(traceID string) (spanContext trace.SpanContext, err error) {
    traceID, err := trace.TraceIDFromHex(traceID)
    if err != nil {
        return trace.SpanContext{}, err
    }
    return trace.NewSpanContext(trace.SpanContextConfig{
        TraceID: traceID,
    }), nil
}</code>
  1. Inside the channel, call the function to construct the span context:
<code class="go">spanContext, err := constructNewSpanContext(request.TraceID)
if err != nil {
    log.Fatal(err)
}</code>
  1. Enrich a context with the constructed span context:
<code class="go">requestContext := context.Background()
requestContext = trace.ContextWithSpanContext(requestContext, spanContext)</code>
  1. Create a new span using the enriched context:
<code class="go">requestInLoopSpan, _ := otel.Tracer("requestInLoop").Start(requestContext, "requestInLoopSpan")</code>

By following these steps, you can successfully construct a new span on the subscriber side using the trace ID extracted from the message headers, ensuring the hierarchical relationship between the spans.

The above is the detailed content of How Can You Create an OpenTelemetry Span from a String TraceID?. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn