OpenTelemetry Jaeger Propagator

1.41.0 · active · verified Fri Apr 10

The `opentelemetry-propagator-jaeger` library provides a `TextMapPropagator` implementation for context propagation using the Jaeger trace context format. It enables OpenTelemetry applications to send and receive trace context information to/from services that use Jaeger's native propagation format. It is part of the broader OpenTelemetry Python project, which releases frequently, typically every few weeks, bringing updates to API, SDK, and contrib packages.

Warnings

Install

Imports

Quickstart

This quickstart demonstrates how to initialize the `JaegerPropagator` and register it as the global text map propagator. This tells OpenTelemetry to use Jaeger's specific header format (e.g., `uber-trace-id` or `jaeger-trace-id`) when injecting and extracting trace context from HTTP headers or other text-based carriers. It includes a basic setup for a `TracerProvider` to make the example runnable and illustrate how context would be injected.

from opentelemetry import trace
from opentelemetry.propagate import set_global_textmap
from opentelemetry.propagators.jaeger import JaegerPropagator
from opentelemetry.sdk.resources import Resource
from opentelemetry.sdk.trace import TracerProvider
from opentelemetry.sdk.trace.export import ConsoleSpanExporter, SimpleSpanProcessor

# 1. Set up a TracerProvider (required for actual tracing)
resource = Resource.create({"service.name": "my-jaeger-service"})
tracer_provider = TracerProvider(resource=resource)
simple_processor = SimpleSpanProcessor(ConsoleSpanExporter())
tracer_provider.add_span_processor(simple_processor)
trace.set_tracer_provider(tracer_provider)

# 2. Register the JaegerPropagator globally
set_global_textmap(JaegerPropagator())

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

# 4. Create a span and demonstrate context propagation (conceptually)
with tracer.start_as_current_span("my-jaeger-span") as span:
    print(f"Current span ID: {span.context.span_id:x}")
    print(f"Current trace ID: {span.context.trace_id:x}")
    # In a real application, context would be injected/extracted over network requests.
    # For example, injecting into a dictionary for a mock HTTP request:
    carrier = {}
    JaegerPropagator().inject(carrier)
    print(f"Injected context: {carrier}")

print("JaegerPropagator registered and used for context injection.")

view raw JSON →