OpsCanary
Back to daily brief
observabilitytracingPractitioner

Deploying Jaeger: Mastering Tracing with Configuration Options

5 min read Official DocsApr 27, 2026
Share
PractitionerHands-on experience recommended

In a world where microservices dominate, tracing requests across various services is vital for diagnosing issues and optimizing performance. Jaeger simplifies this by collecting trace data from applications, often running on different hosts. The challenge lies in clock skew, where hardware clocks drift relative to one another, leading to inaccurate trace data. Jaeger's query service tackles this with a clock skew adjustment algorithm, leveraging causal relationships between spans to ensure accurate tracing.

Deploying Jaeger can be straightforward. You can use the all-in-one distribution, which combines the collector, query service, and UI into a single container. This is ideal for getting started quickly. For production, consider using the individual components with a backend like Cassandra or Elasticsearch. Configuration options are critical: for instance, use --query.max-clock-skew-adjustment to control how much skew adjustment is allowed, or set --badger.ephemeral to false if you need persistent storage. Remember, the in-memory storage is not suitable for production workloads, as data will be lost once the process exits.

In production, be mindful of the ports you expose; only open what you need. The version 1.76.0 brings stability, but always test configurations in a staging environment first. Jaeger is powerful, but it requires careful setup to ensure you get the most out of your tracing efforts.

Key takeaways

  • Use the all-in-one Jaeger distribution for quick deployments.
  • Implement `--query.max-clock-skew-adjustment` to manage clock skew effectively.
  • Avoid in-memory storage for production; it’s meant for quick starts only.
  • Limit exposed ports to those necessary for your deployment.
  • Test configurations in a staging environment before production rollout.

Why it matters

Effective tracing with Jaeger can significantly reduce the time it takes to diagnose and resolve performance issues in microservices, leading to improved system reliability and user satisfaction.

Code examples

chroma
$ docker run --rm -eSPAN_STORAGE_TYPE=cassandra jaegertracing/jaeger-collector:1.76.0 help
chroma
docker run -d --name jaeger -eCOLLECTOR_OTLP_ENABLED=true -eCOLLECTOR_ZIPKIN_HOST_PORT=:9411 -p 5775:5775/udp -p 6831:6831/udp -p 6832:6832/udp -p 5778:5778 -p 16686:16686 -p 14250:14250 -p 14268:14268 -p 14269:14269 -p 4317:4317 -p 4318:4318 -p 9411:9411 jaegertracing/all-in-one:1.76.0
chroma
docker run -eSPAN_STORAGE_TYPE=badger -eBADGER_EPHEMERAL=false -eBADGER_DIRECTORY_VALUE=/badger/data -eBADGER_DIRECTORY_KEY=/badger/key -v <storage_dir_on_host>:/badger -p 16686:16686 jaegertracing/all-in-one:1.76.0

When NOT to use this

The official docs don't call out specific anti-patterns here. Use your judgment based on your scale and requirements.

Want the complete reference?

Read official docs

Test what you just learned

Quiz questions written from this article

Take the quiz →

Get the daily digest

One email. 5 articles. Every morning.

No spam. Unsubscribe anytime.