OpenTelemetry B3 Propagator

1.41.0 · active · verified Thu Apr 09

The `opentelemetry-propagator-b3` library provides B3 context propagation for OpenTelemetry Python, enabling distributed tracing across systems that use the B3 header format (e.g., Zipkin). It is part of the broader OpenTelemetry Python project, which follows a rapid release cycle, with new versions typically released monthly.

Warnings

Install

Imports

Quickstart

This quickstart demonstrates how to set the B3 propagator globally and use it to inject trace context into a carrier (like HTTP headers) and then extract it. This is crucial for distributed tracing where context needs to be passed between services. The `opentelemetry-sdk` is used here for a runnable example, but in a real application, you would configure exporters and resource detectors appropriately.

import os
from opentelemetry import trace
from opentelemetry.propagate import set_global_textmap, get_global_textmap
from opentelemetry.propagators.b3 import B3Propagator
from opentelemetry.sdk.trace import TracerProvider
from opentelemetry.sdk.trace.export import ConsoleSpanExporter, SimpleSpanProcessor

# Set the B3 propagator globally
set_global_textmap(B3Propagator())

# Configure a basic tracer provider for demonstration
provider = TracerProvider()
processor = SimpleSpanProcessor(ConsoleSpanExporter())
provider.add_span_processor(processor)
trace.set_tracer_provider(provider)

tracer = trace.get_tracer(__name__)

def make_request():
    carrier = {}
    propagator = get_global_textmap()
    # Inject context into a carrier (e.g., HTTP headers)
    propagator.inject(carrier=carrier)
    print(f"Injected B3 headers: {carrier}")

    # Simulate receiving context in another service
    # Here, we just extract from the same carrier for simplicity
    ctx = propagator.extract(carrier=carrier)

    with tracer.start_as_current_span("my-b3-propagated-span", context=ctx):
        print("Span created with propagated B3 context")

if __name__ == "__main__":
    make_request()

view raw JSON →