Distributed Tracing
Table of Contents
Overview
Set up distributed tracing infrastructure with Jaeger or Zipkin to track requests across microservices and identify performance bottlenecks.
When to Use
- Debugging microservice interactions
- Identifying performance bottlenecks
- Tracking request flows
- Analyzing service dependencies
- Root cause analysis
Quick Start
Minimal working example:
# docker-compose.yml
version: "3.8"
services:
jaeger:
image: jaegertracing/all-in-one:latest
ports:
- "5775:5775/udp"
- "6831:6831/udp"
- "16686:16686"
- "14268:14268"
networks:
- tracing
networks:
tracing:
Reference Guides
Detailed implementations in the references/ directory:
| Guide | Contents |
|---|---|
| Jaeger Setup | Jaeger Setup, Node.js Jaeger Instrumentation |
| Express Tracing Middleware | Express Tracing Middleware |
| Python Jaeger Integration | Python Jaeger Integration |
| Distributed Context Propagation | Distributed Context Propagation |
| Zipkin Integration | Zipkin Integration, Trace Analysis |
Best Practices
✅ DO
- Sample appropriately for your traffic volume
- Propagate trace context across services
- Add meaningful span tags
- Log errors with spans
- Use consistent service naming
- Monitor trace latency
- Document trace format
- Keep instrumentation lightweight
❌ DON'T
- Sample 100% in production
- Skip trace context propagation
- Log sensitive data in spans
- Create excessive spans
- Ignore sampling configuration
- Use unbounded cardinality tags
- Deploy without testing collection