jaeger (all-in-one): Usage, Options & Common CI Errors
jaeger-all-in-one spins up a complete tracing stack for integration tests.
In CI, jaeger usually means the all-in-one binary: collector, query, and UI in one process with in-memory storage. The traps are which ports to send spans to and OTLP being enabled.
What it does
jaeger-all-in-one bundles the Jaeger collector, query service, and UI into a single process with in-memory trace storage, making it ideal for ephemeral CI integration tests of OpenTelemetry/Jaeger instrumentation.
Common usage
jaeger-all-in-one
jaeger-all-in-one --collector.otlp.enabled=true # accept OTLP spans
docker run -p16686:16686 -p4317:4317 -p4318:4318 jaegertracing/all-in-one
jaeger-all-in-one --query.base-path=/jaeger
curl -s http://localhost:16686/api/traces?service=my-svc # query the UI APIOptions
| Port / flag | What it does |
|---|---|
| 16686 | Web UI and query HTTP API |
| 4317 / 4318 | OTLP gRPC / OTLP HTTP receiver |
| 14268 | Collector: jaeger.thrift over HTTP |
| --collector.otlp.enabled | Enable the OTLP receiver |
| --query.base-path | Serve the UI under a sub-path |
Common errors in CI
"could not start collector ... listen tcp :4317: bind: address already in use" means another process (often a leftover container) holds the port - stop it or remap. Spans never appear because the exporter targets a port the all-in-one is not listening on, or OTLP was not enabled (newer images enable it by default; older ones need --collector.otlp.enabled=true). Querying http://localhost:16686/api/traces with no ?service= returns an error - the service parameter is required. Use a readiness wait on :16686 before asserting traces.