OpenTelemetry OT Trace Propagator

0.62b0 · active · verified Sat Apr 11

The `opentelemetry-propagator-ot-trace` library provides a TextMapPropagator for OpenTelemetry that allows traces to be propagated using the proprietary OT Trace context format (e.g., `uber-trace-id` header), which is often associated with older Jaeger clients. It's part of the `opentelemetry-python-contrib` project, currently at version `0.62b0`, and releases frequently alongside other contrib packages.

Warnings

Install

Imports

Quickstart

This quickstart demonstrates how to register the `OTTracePropagator` globally and use it within a basic OpenTelemetry tracing setup. It includes examples of injecting context into a carrier and extracting it to demonstrate the propagator's function. Ensure you have the `opentelemetry-sdk` installed for this example to run.

import os
from opentelemetry import trace
from opentelemetry.sdk.trace import TracerProvider
from opentelemetry.sdk.trace.export import ConsoleSpanExporter, SimpleSpanProcessor
from opentelemetry.propagators.ot_trace import OTTracePropagator
from opentelemetry.propagate import set_global_textmap
from opentelemetry.context import set_current, get_current

# 1. Set the OT Trace propagator globally
# This tells OpenTelemetry to use the OT Trace format for context propagation.
set_global_textmap(OTTracePropagator())

# 2. Basic tracer setup (required for any tracing to occur)
# For a real application, replace ConsoleSpanExporter with a production exporter (e.g., OTLPSpanExporter)
provider = TracerProvider()
processor = SimpleSpanProcessor(ConsoleSpanExporter())
provider.add_span_processor(processor)
trace.set_tracer_provider(provider)

# 3. Get a tracer
tracer = trace.get_tracer(__name__)

# 4. Example: Create a span that would use the OT Trace context if propagated
with tracer.start_as_current_span("my-ot-trace-propagated-span"):
    print("This span is created with OT Trace propagation enabled.")
    
    # Manually inject current context into a carrier (e.g., HTTP headers)
    carrier = {}
    propagator = OTTracePropagator()
    propagator.inject(carrier)
    print(f"\nInjected context (example 'uber-trace-id'): {carrier.get('uber-trace-id', 'N/A')}")
    
    # Simulate receiving context (e.g., from an incoming HTTP request)
    received_carrier = {'uber-trace-id': '1:2:3:4'}
    extracted_context = propagator.extract(received_carrier)
    
    # Activate the extracted context for subsequent operations
    token = set_current(extracted_context)
    try:
        with tracer.start_as_current_span("child-span-from-extracted-context"):
            print("Child span created using extracted OT Trace context.")
    finally:
        set_current(token) # Restore previous context

print("\nQuickstart finished.")

view raw JSON →