Skip to content
Latchkey

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

Terminal
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 API

Options

Port / flagWhat it does
16686Web UI and query HTTP API
4317 / 4318OTLP gRPC / OTLP HTTP receiver
14268Collector: jaeger.thrift over HTTP
--collector.otlp.enabledEnable the OTLP receiver
--query.base-pathServe 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.

Related guides

Run this faster and cheaper on Latchkey managed runners. Start free →