Skip to content
Back to Stack Recommender

Zipkin

Zipkin — distributed tracing system for gathering timing data.

MonitoringModerate

Stack Components

TracingZipkin
StorageElasticsearch/MySQL

Why

OpenTelemetry-compatible, lightweight, visualizes latency bottlenecks across services. OpenTelemetry became the CNCF instrumentation standard in 2024, used by 70%+ of cloud-native orgs.

Sentry and Datadog lead error tracking with 30k+ paying customers each.

When

Use for distributed tracing in microservices. Avoid for monoliths.

How

1. Run Zipkin server via Docker 2. Configure app to export traces 3. View traces in UI at :9411 4. Query by service/trace ID

Example

// Configure exporter const exporter = new ZipkinExporter({ url: 'http://localhost:9411/api/v2/spans' });

Common Problems

  • ⚠High cardinality tags — limit tag values
  • ⚠Storage backend slow — use Elasticsearch or Cassandra
  • ⚠Configuration drift between environments — use infrastructure-as-code (Terraform/Pulumi) to keep dev/staging/prod identical

Best Practices

  • ✓Sample traces in production to reduce overhead
  • ✓Use consistent service names across spans
  • ✓Set up health checks and graceful shutdown — handle SIGTERM to drain in-flight requests before exit

FAQ

What is Zipkin and what projects is it for?

Zipkin — distributed tracing system for gathering timing data. It pairs layered technologies for end-to-end type safety and out-of-the-box deploys, fitting everything from MVPs to production SaaS.

How do I spin up a working demo with Zipkin in 10 minutes?

Two steps: (1) Run Zipkin server via Docker; (2) Configure app to export traces. Get the local dev server running, then wire one real data source to verify the end-to-end loop.

What is the most common pitfall with Zipkin and how do I avoid it?

The most common pitfall is: High cardinality tags — limit tag values. Avoid it by adding the matching checklist to your PR template and running type-check + lint + unit tests in CI — three gates before merge.

What are the best practices for Zipkin?

Best practices for Zipkin include: Sample traces in production to reduce overhead; Use consistent service names across spans; Set up health checks and graceful shutdown — handle SIGTERM to drain in-flight requests before exit. The first one — "Sample traces in production to reduce overhead" — should be set up at project init to avoid costly rework later.

When should I NOT choose Zipkin?

Pick something else in three cases: (1) the team has zero experience with the core framework and the deadline is tight (learning-curve risk); (2) it's a pure content/marketing site (Astro is lighter); (3) you need very high throughput (>10k RPS) or strict-consistency microservices (Go/Rust). Zipkin shines for mid-to-high complexity full-stack and API work — don't over-engineer simple static pages with it.