{"id":5353,"library":"opentelemetry-exporter-jaeger","title":"OpenTelemetry Jaeger Exporter","description":"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.","status":"active","version":"1.41.0","language":"en","source_language":"en","source_url":"https://github.com/open-telemetry/opentelemetry-python/tree/main/exporter/opentelemetry-exporter-jaeger","tags":["telemetry","tracing","jaeger","opentelemetry","exporter"],"install":[{"cmd":"pip install opentelemetry-exporter-jaeger opentelemetry-sdk","lang":"bash","label":"Install with SDK"}],"dependencies":[],"imports":[{"note":"Used for sending spans to a Jaeger Agent via UDP (default). This is the classic Jaeger exporter.","symbol":"JaegerExporter","correct":"from opentelemetry.exporter.jaeger.thrift import JaegerExporter"},{"note":"Used for sending spans to a Jaeger Collector via HTTP (Thrift over HTTP).","symbol":"JaegerHttpExporter","correct":"from opentelemetry.exporter.jaeger.thrift import JaegerHttpExporter"},{"symbol":"TracerProvider","correct":"from opentelemetry.sdk.trace import TracerProvider"},{"symbol":"BatchSpanProcessor","correct":"from opentelemetry.sdk.trace.export import BatchSpanProcessor"},{"symbol":"Resource","correct":"from opentelemetry.sdk.resources import Resource"},{"symbol":"SERVICE_NAME","correct":"from opentelemetry.sdk.resources import SERVICE_NAME"}],"quickstart":{"code":"import os\nfrom opentelemetry import trace\nfrom opentelemetry.sdk.resources import Resource, SERVICE_NAME\nfrom opentelemetry.sdk.trace import TracerProvider\nfrom opentelemetry.sdk.trace.export import BatchSpanProcessor\nfrom opentelemetry.exporter.jaeger.thrift import JaegerExporter\n\n# Configure resource for your service\nresource = Resource.create({\n    SERVICE_NAME: os.environ.get('OTEL_SERVICE_NAME', 'my-jaeger-service'),\n})\n\n# Configure TracerProvider\nprovider = TracerProvider(resource=resource)\n\n# Configure Jaeger Exporter (UDP to local agent by default)\n# Use environment variables for agent host/port or pass them directly:\n# JAEGER_AGENT_HOST, JAEGER_AGENT_PORT\n# For HTTP Exporter, use JaegerHttpExporter and JAEGER_COLLECTOR_ENDPOINT\njaeger_exporter = JaegerExporter(\n    agent_host_name=os.environ.get('JAEGER_AGENT_HOST', 'localhost'),\n    agent_port=int(os.environ.get('JAEGER_AGENT_PORT', 6831)),\n)\n\n# Add the exporter to a BatchSpanProcessor\nspan_processor = BatchSpanProcessor(jaeger_exporter)\nprovider.add_span_processor(span_processor)\n\n# Set the global tracer provider\ntrace.set_tracer_provider(provider)\n\n# Get a tracer and create spans\ntracer = trace.get_tracer(__name__)\n\nwith tracer.start_as_current_span('my-operation') as span:\n    span.set_attribute('event', 'started')\n    print(f\"Hello from span: {span.context.trace_id}\")\n    with tracer.start_as_current_span('inner-operation'):\n        print(\"Inside inner operation\")\n    span.set_attribute('event', 'finished')\n\n# Ensure all spans are exported before exiting\nprovider.force_flush()\nprint(\"Traces exported to Jaeger.\")","lang":"python","description":"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."},"warnings":[{"fix":"For UDP, ensure a Jaeger Agent is running and accessible at the configured `agent_host_name` and `agent_port`. For HTTP, import `JaegerHttpExporter` and pass `collector_endpoint` to its constructor, e.g., `JaegerHttpExporter(collector_endpoint='http://localhost:14268/api/traces')`.","message":"The default `JaegerExporter` sends spans via UDP to a Jaeger Agent, typically on `localhost:6831`. If you need to send spans over HTTP to a Jaeger Collector, you must explicitly use `JaegerHttpExporter` and configure its endpoint.","severity":"gotcha","affected_versions":"All versions"},{"fix":"Always initialize `TracerProvider` with a `Resource` that includes `SERVICE_NAME`. Example: `Resource.create({SERVICE_NAME: 'my-application'})`.","message":"Providing meaningful resource attributes, especially `SERVICE_NAME`, is critical for effectively identifying and filtering your services and applications within the Jaeger UI. Without it, all spans might appear under a generic name.","severity":"gotcha","affected_versions":"All versions"},{"fix":"Always refer to the official OpenTelemetry Python changelog (`opentelemetry-python` repository releases) for specific breaking changes in the SDK or API when upgrading. Ensure your `opentelemetry-sdk` and `opentelemetry-api` packages are compatible with your exporter version.","message":"The OpenTelemetry Python SDK, which this exporter relies on, frequently updates its API and internal behavior across major/minor versions. For example, `v1.40.0` included a fix for `NoOpTracer` behavior for `start_span` and `start_as_current_span`, which could subtly affect applications not using a full SDK setup.","severity":"breaking","affected_versions":"Primarily `opentelemetry-sdk` v1.40.0 and newer, affecting all integrated components."},{"fix":"Be mindful of your configuration source. For consistent behavior, choose either environment variables (often for simpler deployments/auto-instrumentation) or programmatic setup, but avoid mixing them in ways that lead to unexpected overrides. Ensure explicit programmatic settings align with your intent.","message":"Exporters typically use environment variables (e.g., `OTEL_EXPORTER_JAEGER_AGENT_HOST`, `OTEL_EXPORTER_JAEGER_AGENT_PORT`, `OTEL_EXPORTER_JAEGER_ENDPOINT`) for configuration when using auto-instrumentation or `configure_opentelemetry()`. Programmatic configuration, as shown in the quickstart, will override these.","severity":"gotcha","affected_versions":"All versions"}],"env_vars":null,"last_verified":"2026-04-13T00:00:00.000Z","next_check":"2026-07-12T00:00:00.000Z"}