OpenTelemetry Jaeger Exporter

1.41.0 · active · verified Mon Apr 13

The `opentelemetry-exporter-jaeger` library provides exporters for sending OpenTelemetry trace data to Jaeger. It supports sending spans via UDP to a Jaeger Agent (default) or over HTTP to a Jaeger Collector using the Thrift protocol. Part of the broader OpenTelemetry Python project, it undergoes regular releases, typically aligned with `opentelemetry-sdk` and `opentelemetry-api` updates, ensuring compatibility with the latest OpenTelemetry specifications. The current version is 1.41.0.

Warnings

Install

Imports

Quickstart

This quickstart demonstrates how to set up the OpenTelemetry Python SDK with the Jaeger Exporter. It initializes a `TracerProvider` with a `BatchSpanProcessor` and configures the `JaegerExporter` to send traces to a local Jaeger agent via UDP. Resource attributes, particularly `SERVICE_NAME`, are crucial for identifying your service in Jaeger. Environment variables are used for agent host/port to simplify configuration.

import os
from opentelemetry import trace
from opentelemetry.sdk.resources import Resource, SERVICE_NAME
from opentelemetry.sdk.trace import TracerProvider
from opentelemetry.sdk.trace.export import BatchSpanProcessor
from opentelemetry.exporter.jaeger.thrift import JaegerExporter

# Configure resource for your service
resource = Resource.create({
    SERVICE_NAME: os.environ.get('OTEL_SERVICE_NAME', 'my-jaeger-service'),
})

# Configure TracerProvider
provider = TracerProvider(resource=resource)

# Configure Jaeger Exporter (UDP to local agent by default)
# Use environment variables for agent host/port or pass them directly:
# JAEGER_AGENT_HOST, JAEGER_AGENT_PORT
# For HTTP Exporter, use JaegerHttpExporter and JAEGER_COLLECTOR_ENDPOINT
jaeger_exporter = JaegerExporter(
    agent_host_name=os.environ.get('JAEGER_AGENT_HOST', 'localhost'),
    agent_port=int(os.environ.get('JAEGER_AGENT_PORT', 6831)),
)

# Add the exporter to a BatchSpanProcessor
span_processor = BatchSpanProcessor(jaeger_exporter)
provider.add_span_processor(span_processor)

# Set the global tracer provider
trace.set_tracer_provider(provider)

# Get a tracer and create spans
tracer = trace.get_tracer(__name__)

with tracer.start_as_current_span('my-operation') as span:
    span.set_attribute('event', 'started')
    print(f"Hello from span: {span.context.trace_id}")
    with tracer.start_as_current_span('inner-operation'):
        print("Inside inner operation")
    span.set_attribute('event', 'finished')

# Ensure all spans are exported before exiting
provider.force_flush()
print("Traces exported to Jaeger.")

view raw JSON →