Zipkin is a self-hosted distributed tracing system replacing AWS X-Ray with zero per-trace fees, pluggable Elasticsearch storage, and dependency graphs.
Twitter created Zipkin in 2012 to trace latency across distributed backend services, structuring it around Google's Dapper paper. The platform collects timing spans across microservices through HTTP, Kafka, or RabbitMQ, storing them in backends like Elasticsearch or Cassandra. Running as a self-contained jar or container, it lets engineers inspect call hierarchies and dependency graphs without streaming telemetry to commercial vendors.
AWS X-Ray charges per million traces recorded and scanned. At high request rates across microservices, these meter charges accumulate quickly or force aggressive sampling that routinely drops infrequent error traces. Zipkin eliminates metered ingestion pricing entirely. By running Zipkin collectors against internal Elasticsearch or Cassandra clusters, developers can increase trace sampling rates to capture critical outliers without worrying about an escalating cloud bill.
The trade-off centers on operational maintenance versus managed infrastructure. AWS X-Ray configures automatically across AWS Lambda, ECS, and API Gateway, handling retention and indexing without intervention. Zipkin delivers equivalent span timelines and dependency maps, but requires DevOps engineers to manage datastores, configure index rotation, and schedule batch jobs to compute service links. For teams already operating data clusters, self-hosting Zipkin converts a variable telemetry expense into predictable compute capacity.
Is Zipkin free for commercial use? Yes. It is published under the Apache-2.0 license with no paid tiers or seat limits.
Zipkin vs AWS X-Ray — which should I choose? Choose AWS X-Ray for turn-key AWS integration without database management, or Zipkin to eliminate per-trace ingestion fees across private or multi-cloud infrastructure.
Can Zipkin ingest traces from OpenTelemetry? Yes. You can route spans to Zipkin using the Zipkin exporter in OpenTelemetry SDKs or through an OpenTelemetry Collector.
Zipkin is a practical choice for teams needing distributed tracing without unpredictable ingestion bills, provided they can operate their own storage backend. Backed by active maintenance and an Apache-2.0 license that permits internal modification and private deployment, the platform remains a reliable standard for self-hosted observability.
Commands from the official package registries. Each package is matched to Zipkin through the registry's own link to its source code or website.
brew install zipkinbrew install zipkinWe started this exact setup from scratch in a clean Linux machine on Nov 1, 2026 and checked it through Zipkin's own API: every check passed. Recipes are re-checked regularly and removed if they stop working.
mkdir -p zipkin && cd zipkin
curl -fsSL https://open-source.store/tools/zipkin/compose.yml -o compose.ymltouch .envdocker compose up -dservices:
zipkin:
image: openzipkin/zipkin:3.6.1
ports:
- "127.0.0.1:9411:9411"
environment:
- STORAGE_TYPE=mem
restart: always
healthcheck:
test: ["CMD-SHELL", "wget -q -O /dev/null http://127.0.0.1:9411/health || exit 1"]
interval: 5s
timeout: 5s
retries: 5
Lint, codegen, breaking-change checks and dependency management in one Git-native CLI. Open source, no registry lock-in.
Show that Zipkin is listed as an open-source alternative. Paste into your README:
Ubuntu 24.04 · Apple container, Docker 29.1.3, Compose 2.40.3+ds1-0ubuntu1~24.04.1. Images pulled in 41 s: openzipkin/zipkin:3.6.1.
Based on the upstream setup. Official Zipkin compose from examples. Image pinned to 3.6.1, bound to 127.0.0.1 because Zipkin has no native authentication, in-memory storage, and healthcheck added.
zipkin-1 | 2026-11-01T17:00:57.517502422Z zipkin-1 | 2026-11-01T17:00:57.517530339Z oo zipkin-1 | 2026-11-01T17:00:57.517532047Z oooo zipkin-1 | 2026-11-01T17:00:57.517532714Z oooooo zipkin-1 | 2026-11-01T17:00:57.517533255Z oooooooo zipkin-1 | 2026-11-01T17:00:57.517533755Z oooooooooo zipkin-1 | 2026-11-01T17:00:57.517534255Z oooooooooooo zipkin-1 | 2026-11-01T17:00:57.517534755Z ooooooo ooooooo zipkin-1 | 2026-11-01T17:00:57.517541255Z oooooo ooooooo zipkin-1 | 2026-11-01T17:00:57.517541922Z oooooo ooooooo zipkin-1 | 2026-11-01T17:00:57.517542464Z oooooo o o oooooo zipkin-1 | 2026-11-01T17:00:57.517542964Z oooooo oo oo oooooo zipkin-1 | 2026-11-01T17:00:57.517543464Z ooooooo oooo oooo ooooooo zipkin-1 | 2026-11-01T17:00:57.517544005Z oooooo ooooo ooooo ooooooo zipkin-1 | 2026-11-01T17:00:57.517547255Z oooooo oooooo oooooo ooooooo zipkin-1 | 2026-11-01T17:00:57.517547880Z oooooooo oo oo oooooooo zipkin-1 | 2026-11-01T17:00:57.517548505Z ooooooooooooo oo oo ooooooooooooo zipkin-1 | 2026-11-01T17:00:57.517549005Z oooooooooooo oooooooooooo zipkin-1 | 2026-11-01T17:00:57.517549547Z oooooooo oooooooo zipkin-1 | 2026-11-01T17:00:57.517550047Z oooo oooo zipkin-1 | 2026-11-01T17:00:57.517550547Z zipkin-1 | 2026-11-01T17:00:57.517551005Z ________ ____ _ _____ _ _ zipkin-1 | 2026-11-01T17:00:57.517551547Z |__ /_ _| _ \| |/ /_ _| \ | | zipkin-1 | 2026-11-01T17:00:57.517552172Z / / | || |_) | ' / | || \| | zipkin-1 | 2026-11-01T17:00:57.517552672Z / /_ | || __/| . \ | || |\ | zipkin-1 | 2026-11-01T17:00:57.517553214Z |____|___|_| |_|\_\___|_| \_| zipkin-1 | 2026-11-01T17:00:57.517553839Z zipkin-1 | 2026-11-01T17:00:57.517554297Z :: version 3.6.1 :: commit b2b0c98 :: zipkin-1 | 2026-11-01T17:00:57.517554839Z zipkin-1 | 2026-11-01T17:00:57.549758339Z WARNING: A terminally deprecated method in sun.misc.Unsafe has been called zipkin-1 | 2026-11-01T17:00:57.549776089Z WARNING: sun.misc.Unsafe::arrayBaseOffset has been called by com.linecorp.armeria.internal.shaded.jctools.maps.NonBlockingHashMap (file:/zipkin/BOOT-INF/lib/armeria-1.38.0.jar) zipkin-1 | 2026-11-01T17:00:57.549777214Z WARNING: Please consider reporting this to the maintainers of class com.linecorp.armeria.internal.shaded.jctools.maps.NonBlockingHashMap zipkin-1 | 2026-11-01T17:00:57.549777964Z WARNING: sun.misc.Unsafe::arrayBaseOffset will be removed in a future release zipkin-1 | 2026-11-01T17:00:57.573223089Z WARNING: A restricted method in java.lang.System has been called zipkin-1 | 2026-11-01T17:00:57.573309380Z WARNING: java.lang.System::loadLibrary has been called by io.netty.util.internal.NativeLibraryUtil in an unnamed module (file:/zipkin/BOOT-INF/lib/netty-common-4.2.12.Final.jar) zipkin-1 | 2026-11-01T17:00:57.573340797Z WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module zipkin-1 | 2026-11-01T17:00:57.573352589Z WARNING: Restricted methods will be blocked in a future release unless native access is enabled zipkin-1 | 2026-11-01T17:00:57.573365380Z zipkin-1 | 2026-11-01T17:00:58.321772631Z 2026-11-01T17:00:58.320Z WARN [/] 1 --- [ main] i.m.p.PrometheusMeterRegistry : A MeterFilter is being configured after a Meter has been registered to this registry. All MeterFilters should be configured before any Meters are registered. If that is not possible or you have a use case where it should be allowed, let the Micrometer maintainers know at https://github.com/micrometer-metrics/micrometer/issues/4920. Enable DEBUG level logging on this logger to see a stack trace of the call configuring this MeterFilter. zipkin-1 | 2026-11-01T17:00:58.423989506Z 2026-11-01T17:00:58.423Z INFO [/] 1 --- [oss-http-*:9411] c.l.a.s.Server : Serving HTTP at /[0:0:0:0:0:0:0:0]:9411 - http://127.0.0.1:9411/