Jaeger
Send traces from Jaeger-instrumented applications to observability-stack by changing the OTLP endpoint (modern apps) or enabling the compat overlay (legacy jaeger-client-* apps). No application code changes required.
Which path applies to your apps?
Section titled “Which path applies to your apps?”| If your apps use… | Use |
|---|---|
OpenTelemetry SDKs (opentelemetry-*) with an OTLP exporter | The OTLP path below. No compat overlay required. |
Archived jaeger-client-* libraries (jaeger-client-go, jaeger-client-java, jaeger-client-python, etc.) | The legacy wire protocol path below. Enable the compat overlay. |
OTLP path
Section titled “OTLP path”Change the OTLP exporter endpoint in your apps to observability-stack’s base collector:
# gRPCOTEL_EXPORTER_OTLP_ENDPOINT=http://<observability-stack-host>:4317
# HTTPOTEL_EXPORTER_OTLP_ENDPOINT=http://<observability-stack-host>:4318OTLP traffic arrives at the base collector’s otlp receiver, which is a pure ingest path — no attribute translation happens here. Your apps’ telemetry lands in OpenSearch exactly as your OpenTelemetry SDK produces it.
Try it with the bundled hotrod demo
Section titled “Try it with the bundled hotrod demo”With the compat overlay enabled (see the overview), a pre-configured Jaeger hotrod demo is available on port 8080. It emits OTLP directly to the base collector — the same path your apps will take.
curl http://localhost:8080/dispatch?customer=123This produces a multi-service trace (frontend → customer → driver → route → redis → mysql) visible in OpenSearch Dashboards under Trace Analytics.
Legacy wire protocol path
Section titled “Legacy wire protocol path”Applications using jaeger-client-* libraries send Jaeger’s native wire protocol. With the compat overlay enabled, observability-stack accepts these via the upstream jaegerreceiver, which translates to the OpenTelemetry data model using pkg/translator/jaeger.
| Protocol | Default port | Upstream stability |
|---|---|---|
| Thrift HTTP | 14268/tcp | Beta |
| gRPC (Jaeger protobuf) | 14250/tcp | Beta |
Configuration
Section titled “Configuration”Example for jaeger-client-go using Thrift HTTP:
JAEGER_ENDPOINT=http://<observability-stack-host>:14268/api/tracesOther jaeger-client-* libraries expose similar endpoint overrides. Consult each library’s documentation for specifics.
The jaeger-client-* libraries are archived upstream and no longer receive patches. The long-term migration path is to OpenTelemetry SDKs with OTLP export.
Deployment modes
Section titled “Deployment modes”- Greenfield — compat collector binds Jaeger ports 14250 and 14268.
- Side-by-side — Jaeger Collector and compat collector run simultaneously via port remapping (
COMPAT_JAEGER_THRIFT_HTTP_PORT,COMPAT_JAEGER_GRPC_PORT). Useful for A/B validation during migration. - Full replacement — Jaeger Collector decommissioned, compat collector on 14250/14268.
Not covered
Section titled “Not covered”- Jaeger query UI — use OpenSearch Dashboards’ APM and Discover Traces views.
- Jaeger-specific storage backends (Cassandra, Elasticsearch, badger) — data writes to OpenSearch via Data Prepper.
- Jaeger’s dependency graph — OpenSearch Dashboards has a service map.