Post

Open-Source Distributed Tracing Tools Compared: Jaeger v2, Grafana Tempo, Zipkin & the Full Ecosystem

Compare open-source distributed tracing tools including Jaeger v2, Grafana Tempo, Zipkin, and OpenTelemetry across sampling, storage, and visualization.

Open-Source Distributed Tracing Tools Compared: Jaeger v2, Grafana Tempo, Zipkin & the Full Ecosystem

Which open-source distributed tracing backend should you self-host in 2026? This article compares dedicated trace backends (Jaeger v2, Grafana Tempo, Zipkin), auto-instrumentation tools (OpenTelemetry Operator, Odigos, eBPF), trace collectors (OpenTelemetry Collector, Alloy), language SDKs, and developer tools — covering architecture, query capabilities, storage backends, sampling strategies, span-derived metrics, and operational complexity.

A trace is a debugging session you didn’t know you’d need. (On commercial APM, trace retention and host surcharges quickly add up; see our paid observability pricing breakdown). The right self-hosted tracing backend makes the difference between finding root cause in 30 seconds or 30 minutes.

TL;DR — Quick Recommendations

Use caseBest fitRunner-up
Complete tracing with built-in UIJaeger v2Zipkin
Most expressive trace query languageTempo (TraceQL)Jaeger v2 (with ES/OS)
Cheapest storage at scale (object storage)Tempo—
Simplest deploymentZipkinJaeger v2 (monolithic)
Adaptive sampling built-inJaeger v2—
Existing Elasticsearch/OpenSearchJaeger v2Zipkin
Grafana ecosystemTempoJaeger v2
AGPL license unacceptableJaeger v2 / Zipkin—
Kubernetes auto-instrumentationOTel OperatorOdigos

Jump to Section 1 for backend comparison or When to Use What for the full decision table.

This article focuses exclusively on open-source, self-hostable distributed tracing tools — no mandatory commercial licenses, no mandatory SaaS accounts. The tracing ecosystem includes backends, collectors, auto-instrumentation, SDKs, and developer tools.

Excluded from the primary benchmark: Multi-signal observability platforms (SigNoz, OpenObserve, ClickStack, Uptrace, Coroot, DeepFlow, Sentry) — these support tracing but are broader APM/observability systems. For full-platform comparisons, see our companion guide Open-Source Observability Platforms Compared. For empirical trace throughput, storage compaction, and span lookup benchmarks under load, see Benchmarking Open-Source Observability.


Table of Contents


Scope & Selection Criteria

CriterionRequirement
Open-sourceOSI-approved license or well-known open license
Self-hostableRuns entirely on your infrastructure
No mandatory commercial licenseFree edition covers primary tracing functionality
No mandatory SaaS accountNo phone-home, no cloud signup required
Primarily designed for tracesNot a multi-signal platform that also does tracing

Legend

SymbolMeaning
✅Supported / available
◐Partial support or requires additional setup / integration
⭐Particular strength or best-in-class
—Not supported or not applicable

Section 1: Dedicated Open-Source Tracing Backends

These are the closest equivalents to each other — purpose-built distributed trace storage and query systems.

The Candidates

PlatformLicenseIngestionQuery/SearchStorageUIPositioning
Jaeger v2Apache 2.0OTLP, Jaeger, Zipkin, KafkaJaeger APIs, attribute searchOpenSearch, Elasticsearch, Cassandra, Badger, memoryBuilt-inComplete tracing system, Apache licensed (⭐ 21k · 👥 500+ · Since 2016 · CNCF Graduated)
Grafana TempoAGPLv3OTLP, Jaeger, ZipkinTraceQL, trace IDS3, GCS, Azure Blob, MinIO; filesystem for devGrafanaObject-storage-first, TraceQL power (⭐ 4.2k · 👥 300+ · Since 2020)
ZipkinApache 2.0Zipkin v1/v2; OTLP through CollectorService, operation, tag, duration, trace IDCassandra, Elasticsearch/OpenSearch, memoryBuilt-inSimplest possible deployment (⭐ 17.2k · 👥 150+ · Since 2012)
HypertraceApache 2.0OpenTelemetryTrace and service analyticsMultiple internal componentsBuilt-inNiche; limited maintenance (⭐ 500+ · Since 2020)
HaystackApache 2.0Zipkin-compatibleTrace search and trendsCassandra, Elasticsearch, KafkaBuilt-inHistorical; not recommended (⭐ 350+ · Since 2017 · Archived)

Practical shortlist for new deployments: Jaeger v2, Grafana Tempo, Zipkin. Hypertrace is niche. Haystack is no longer a strong choice.

Jaeger v1 note: Jaeger v1 reached end of life on December 31, 2025. New deployments should use Jaeger v2, which is built on the OpenTelemetry Collector framework. Jaeger lifecycle.

Jaeger v2 vs Tempo vs Zipkin

CapabilityJaeger v2Grafana TempoZipkin
Dedicated to tracesYesYesYes
OTLP ingestionNativeNativeThrough OTel Collector (recommended)
Query languageAttribute/search APIsTraceQLZipkin query API
Search by arbitrary attributesStorage-dependentYesYes, basic
Trace ID lookupYesYesYes
Built-in UIYesNo; use GrafanaYes
Object storageNot primary modelYes (primary)No
OpenSearch/ElasticsearchYesNoYes
CassandraYesNoYes
Kafka bufferingOptionalRequired for distributed Tempo 3.0Optional ingestion transport
Monolithic deploymentYesYesYes
Horizontally scalableYesYesYes, storage-dependent
Native multi-tenancyLimited / deployment-dependentYesNo
Tail samplingThrough OTel componentsUsually through OTel CollectorUsually through OTel Collector
Adaptive samplingYes (built-in)External / collector-sideClient-side sampling
Span metricsOTel span-metrics connectorTempo metrics-generator / TraceQL metricsExternal
Service graphsJaeger SPM / OTel connectorTempo metrics-generatorDependency graph
Primary strengthComplete tracing experienceCost-efficient storage at scaleSimplicity
Main limitationRequires external database at scaleRequires Grafana; more infrastructureLess powerful search and analytics

Architecture Classification

flowchart TB
    subgraph "Jaeger v2"
        direction LR
        J_MONO["Monolithic<br/>All-in-one binary<br/>+ Badger/memory"]
        J_DIST["Distributed<br/>Collector + Query<br/>+ Cassandra/ES/OS"]
    end

    subgraph "Grafana Tempo"
        direction LR
        T_MONO["Monolithic<br/>Single binary<br/>+ local filesystem"]
        T_DIST["Distributed<br/>Distributor/Ingester/Compactor/Querier<br/>+ Object storage + Kafka (3.0)"]
    end

    subgraph "Zipkin"
        direction LR
        Z_MONO["Single server<br/>+ in-memory or<br/>Cassandra/ES/OS"]
    end
ArchitectureTrade-off
Jaeger monolithicSimple; limited to Badger/memory storage; good for dev/small workloads
Jaeger distributedScales with Cassandra/ES/OpenSearch; requires external DB ops
Tempo monolithicSimple; filesystem storage; good for dev/small-medium
Tempo distributedCost-efficient at scale (object storage); requires Kafka for 3.0 distributed mode; more components
ZipkinSimplest; single JAR; limited query power at scale

Ingestion & Protocol Support

ToolOTLP gRPCOTLP HTTPJaeger Thrift/gRPCZipkin v1/v2Kafka consumerMax tested throughput
Jaeger v2⭐ (native)⭐ (native)✅ (deprecated but supported)✅⭐100k+ spans/sec
Tempo⭐ (native)⭐ (native)✅✅⭐ (3.0 distributed)100k+ spans/sec
Zipkin◐ (via OTel Collector)◐ (via OTel Collector)—⭐ (native)✅10k–50k spans/sec (storage-dependent)

Jaeger v2’s native protocols (Thrift, gRPC model) are deprecated. OTLP should be preferred for all new deployments.

Query & Search Capabilities

CapabilityJaeger v2TempoZipkin
Trace ID lookup⭐ (fast, all backends)⭐ (Parquet block scan)✅
Service + operation filter✅✅ (TraceQL)✅
Arbitrary tag/attribute search✅ (ES/OS: rich; Cassandra: limited)⭐ (TraceQL: structural queries)✅ (basic)
Duration-based filter✅⭐ (TraceQL: duration > 2s)✅
Structural queries (parent/child)—⭐ (TraceQL: { .http.method = "GET" } >> { status = error })—
Aggregation / analytics◐ (limited)✅ (TraceQL metrics)—
Regex on attributes✅ (ES/OS)✅ (TraceQL =~)◐
Query language expressivenessMedium⭐ (High — TraceQL)Low

Key insight: Tempo’s TraceQL is the most expressive open-source trace query language — it supports structural queries across span relationships (parent/child, sibling), duration comparisons, and aggregation. Jaeger’s search power depends heavily on the storage backend (Elasticsearch/OpenSearch » Cassandra » Badger). Zipkin keeps it simple.

Storage Backends

ToolSupported backendsObject storageEstimated bytes/spanRetention strategyCompaction
Jaeger v2Elasticsearch, OpenSearch, Cassandra, Badger, memory, gRPC plugin—500–2000 bytes (ES/Cassandra)TTL per backendBackend-managed
TempoS3, GCS, Azure Blob, MinIO, filesystem⭐ (primary)100–500 bytes (Parquet)Time-based block deletionBuilt-in compactor
ZipkinCassandra, Elasticsearch, OpenSearch, MySQL, memory—500–2000 bytes (ES/Cassandra)TTL per backendBackend-managed

Tempo’s Parquet-based block format achieves significantly better storage efficiency than Elasticsearch/Cassandra-backed solutions because it uses columnar compression and avoids per-document indexing overhead.

Sampling Strategies

StrategyJaeger v2TempoZipkin
Head-based (probabilistic)⭐ (adaptive sampling built-in)◐ (OTel Collector)✅ (client-side)
Adaptive sampling⭐ (built-in, per-service/endpoint)— (external)—
Tail-based◐ (OTel tail_sampling processor)◐ (OTel tail_sampling processor)◐ (OTel tail_sampling processor)
Rate-limiting✅ (per-service)◐ (OTel Collector)✅
Remote sampling config⭐ (sampling strategies API)—✅ (HTTP endpoint)
Per-endpoint policies⭐◐◐

Key insight: Jaeger v2 has the most mature built-in sampling controller — adaptive sampling adjusts per-service/per-endpoint rates based on traffic volume. Tempo and Zipkin delegate most sampling decisions to the OpenTelemetry Collector’s tail_sampling processor, which is powerful but lives outside the backend.

Span-Derived Metrics & Service Graphs

CapabilityJaeger v2TempoZipkin
RED metrics from spansOTel span-metrics connector⭐ Tempo metrics-generator / TraceQL metricsExternal
Service dependency graphJaeger SPM + OTel service-graph connector⭐ Tempo metrics-generatorBuilt-in dependency graph
Latency histogramsOTel Collector⭐ (TraceQL metrics)—
Exemplar linking (metric → trace)✅ (via OTel)⭐ (native exemplars)—

Operational Complexity

ToolMin RAMComponents (monolithic)Components (distributed)External dependenciesUpgrade pathTeam size needed
Jaeger v2512 MB1 binary2–3 (collector + query + ingester)Cassandra/ES/OS (at scale)Simple (OTel-based)1
Tempo1 GB1 binary4–6 (distributor/ingester/compactor/querier/metrics-gen) + Kafka (3.0)Object storage; Kafka (distributed)Schema versioned1–2
Zipkin512 MB1 JARN/A (scale via storage)Cassandra/ES/OS (at scale)Simple1

When to Use What

If you need…Best fitRunner-up
Complete tracing with built-in UIJaeger v2Zipkin
Most expressive trace query languageTempo (TraceQL)Jaeger v2 (with ES/OS)
Cheapest storage at scale (object storage)Tempo—
Simplest deployment (single binary/JAR)ZipkinJaeger v2 (monolithic)
Adaptive sampling built-inJaeger v2—
Existing Elasticsearch/OpenSearchJaeger v2Zipkin
Existing CassandraJaeger v2Zipkin
Grafana ecosystemTempoJaeger v2 (Grafana datasource exists)
Multi-tenancyTempoJaeger v2 (limited)
Span-derived metrics (built-in)Tempo (metrics-generator)Jaeger v2 + OTel connectors
AGPL license unacceptableJaeger v2 / Zipkin—
Trace analytics / structural queriesTempo (TraceQL)—

Known Limitations

ToolKey limitation
Jaeger v2Requires external database at scale (Cassandra/ES ops overhead); attribute search quality depends on storage backend; no object-storage-native model
TempoNo built-in UI (requires Grafana); Kafka required for distributed mode in 3.0; AGPL license; trace search requires TraceQL learning
ZipkinLimited search and analytics; less active development than Jaeger/Tempo; no structural query language; multi-tenancy absent

Section 2: Broader Open-Source Platforms with Tracing

These support traces but are not trace-only systems. They belong in an “all-in-one observability platforms” comparison rather than a strict trace-backend benchmark.

PlatformLicense modelOther signalsTrace storage
Apache SkyWalkingApache 2.0Metrics, logs, profiles, topologyBanyanDB or Elasticsearch (⭐ 24k · Since 2015)
SigNozMIT (core)Metrics, logsClickHouse (⭐ 20k · Since 2021)
VictoriaTracesApache 2.0Part of VictoriaMetrics stack (metrics via VM, logs via VL)Custom local/object storage (⭐ 17.6k mono-repo · Since 2024 VT)
UptraceAGPL v3 (community)Metrics, logsClickHouse (⭐ 4k · Since 2021)
OpenObserveAGPL v3Logs, metrics, RUMObject storage (⭐ 14k · Since 2023)
ClickStackApache 2.0Logs, metrics, sessionsClickHouse (⭐ 22k · Since 2023)
CorootApache 2.0Metrics, logs, profilesMultiple components (⭐ 4k · Since 2022)
DeepFlowApache 2.0Metrics, logs, flows, eBPFClickHouse (⭐ 3.5k · Since 2022)
PinpointApache 2.0APM metrics, topologyHBase / compatible (⭐ 13.6k · Since 2014)
OpenSearch Trace AnalyticsApache 2.0Logs, general searchOpenSearch (⭐ 10k · Since 2021)
OneUptimeApache 2.0Metrics, logs, incidents, profilesPostgreSQL + ClickHouse (⭐ 5k · Since 2022)
Sentry (Self-Hosted)FSL-1.1-Apache-2.0 (source-available)Errors, logs/breadcrumbs, session replay, profilingClickHouse / Snuba + Kafka (⭐ ~45k · Since 2010)

Sentry’s tracing niche: While historically built for error tracking, self-hosted Sentry has expanded into distributed tracing with native OTLP trace ingestion via Sentry Relay. Its core strength is code-level triage — linking a failing span directly to an unhandled exception, stack trace, and frontend Session Replay. However, self-hosting requires significant infrastructure (20+ containers, Kafka, ClickHouse, Snuba) and it uses the source-available FSL-1.1 license rather than pure OSI open-source.

Note: Do not put these broader multi-signal platforms in the primary Jaeger/Tempo/Zipkin benchmark.


Section 3: Trace Collectors and Processing Pipelines

These receive, batch, enrich, filter, sample, and export traces. They do not normally provide permanent trace storage.

Collector Candidates

ToolLicenseTrace functions
OpenTelemetry CollectorApache 2.0Receive, process, sample, route, export (⭐ 4.7k · Since 2019 · CNCF Graduated)
OpenTelemetry Collector ContribApache 2.0Additional receivers, processors, exporters, connectors (⭐ 3.2k · Since 2019 · CNCF)
Grafana AlloyApache 2.0OTel-compatible collection and processing (⭐ 1.5k · Since 2024)
Jaeger v2 CollectorApache 2.0Trace-specific OTel Collector distribution (⭐ 21k · CNCF Graduated)
VectorMPL 2.0Routes multiple telemetry signals including traces (⭐ 18.5k · Since 2019)
Fluent BitApache 2.0Supports OpenTelemetry ingestion and forwarding (⭐ 6k · Since 2014 · CNCF Incubating)
Apache NiFiApache 2.0Generic pipelines; can transport trace records (⭐ 5k · Since 2014)
OpenTelemetry eBPF InstrumentationApache 2.0 / GPL (eBPF)Zero-code traces and metrics (⭐ 800+ · Since 2023 · CNCF)

Important Collector Components

ComponentPurpose
OTLP receiverReceives OTLP/gRPC and OTLP/HTTP
Jaeger receiverReceives legacy Jaeger formats
Zipkin receiverReceives Zipkin spans
Batch processorBatches spans before export
Memory limiterProtects Collector memory
Resource processorAdds service/environment metadata
Attributes processorAdds, removes, hashes, or redacts attributes
Filter processorDrops unwanted spans
Probabilistic samplerHead-style probabilistic sampling
Tail-sampling processorSamples after examining the completed trace
Span-metrics connectorGenerates RED metrics from spans
Service-graph connectorGenerates service dependency metrics
Routing connectorSends spans to different destinations
Kafka exporter/receiverProvides buffering and decoupling

Kubernetes Collection Architecture

flowchart TD
    A["Applications"] --> B["OTel agents or SDKs"]
    B --> C["Node/DaemonSet collectors"]
    C --> D["Gateway collectors"]
    D --> E["Jaeger, Tempo or Zipkin"]
    D --> F["Prometheus-compatible metrics<br/>(via span-metrics connector)"]

Signal Correlation Note: Using the OpenTelemetry collector’s span-metrics connector allows generating RED (Rate, Errors, Duration) metrics from trace spans, routing them directly into TSDBs like Prometheus or VictoriaMetrics. Furthermore, injecting trace_id attributes into log records enables one-click jumps to traces from log platforms like Loki or VictoriaLogs.


Section 4: Open-Source Automatic Instrumentation

Platform-Wide Auto-Instrumentation

ToolLicenseApproachLanguages
OpenTelemetry OperatorApache 2.0Injects language agents in KubernetesJava, .NET, Node.js, Python, Go (⭐ 1.2k · Since 2020 · CNCF)
OdigosApache 2.0eBPF + language instrumentationJava, Python, .NET, Node.js, Go (⭐ 3.4k · Since 2022)
OpenTelemetry eBPF Instrumentation (OBI)Apache 2.0 / GPL (eBPF)Kernel-level zero-code instrumentationJava, .NET, Go, Python, Ruby, Node.js, native (Since 2023 · CNCF)
Grafana BeylaApache 2.0eBPFBeing superseded/evolved through OTel eBPF Instrumentation (⭐ 1.5k · Since 2023)
PixieApache 2.0eBPF-based Kubernetes visibilityLanguage-independent protocols (⭐ 5.6k · Since 2020 · CNCF Sandbox)
Cilium HubbleApache 2.0eBPF network-flow visibilityNetwork-level (not full application tracing) (⭐ 3.6k · Since 2019 · CNCF)

OBI note: OpenTelemetry eBPF Instrumentation (formerly based on Grafana Beyla) reached its first alpha release in late 2025. It generates traces without modifying application source code, but runtime-aware agents generally provide deeper framework and business-operation spans. OBI announcement.

Language-Specific Tracing SDKs and Agents

OpenTelemetry should generally be the default for new applications.

LanguageRecommended open-source instrumentation
Java / KotlinOpenTelemetry Java Agent, OpenTelemetry Java SDK, Micrometer Tracing, Zipkin Brave
PythonOpenTelemetry Python SDK, opentelemetry-instrument
GoOpenTelemetry Go SDK, OTel contrib instrumentation
Node.jsOpenTelemetry JS SDK and auto-instrumentations
Browser JavaScriptOpenTelemetry JS/browser instrumentation
.NETOpenTelemetry .NET SDK and automatic instrumentation
Rustopentelemetry-rust, tracing, tracing-opentelemetry
RubyOpenTelemetry Ruby SDK and auto-instrumentation
PHPOpenTelemetry PHP SDK and instrumentation extension
C++OpenTelemetry C++
Erlang / ElixirOpenTelemetry Erlang/Elixir
Swift / iOSOpenTelemetry Swift
AndroidOpenTelemetry Android

OpenTelemetry’s Kubernetes Operator can inject zero-code instrumentation for Java, .NET, Node.js, Python, and Go. OTel zero-code docs.

Java/Kotlin Recommendation

1
2
3
4
5
OpenTelemetry Java Agent
        ↓ OTLP
OpenTelemetry Collector
        ↓
Jaeger v2 or Grafana Tempo

Use Micrometer Tracing when the application is already based on Spring Boot and you require application-controlled instrumentation.


Section 5: Legacy Tracing Libraries and Protocols

Project / ProtocolStatusRecommendation
OpenTracingArchived / merged into OpenTelemetryMigrate to OpenTelemetry
OpenCensusSuperseded by OpenTelemetryMigrate to OpenTelemetry
Jaeger native clientsDeprecated in favor of OpenTelemetryDo not use for new applications
Jaeger Thrift protocolDeprecated but supportedMigrate to OTLP
Jaeger native gRPC modelDeprecated but supportedMigrate to OTLP
Zipkin B3 propagationStill supportedUse when compatibility requires it
W3C Trace ContextCurrent cross-vendor standardRecommended default
W3C BaggageCurrent context propagation standardUse carefully; avoid secrets

Section 6: Trace Testing and Validation Tools

ToolLicenseFunction
TracetestOpen-source core (production self-hosting has edition caveats)Assert behavior using distributed traces
otel-cliApache 2.0Create spans from shell scripts
telemetrygenApache 2.0Generate test traces and telemetry
Jaeger HotRODApache 2.0Demo traced application
OpenTelemetry DemoApache 2.0Multi-service reference application
Tempo VultureAGPLv3Continuously writes and verifies traces
TestcontainersMITRun tracing backends in integration tests
MalabiApache 2.0Trace-based testing for Node.js
otel-arrowApache 2.0Experimental efficient telemetry transport

Tracetest note: Tracetest’s repository provides an open-source core suitable for local/hobby use. Its current production self-hosted offering has commercial licensing considerations. Qualify before treating as unrestricted OSS. Tracetest repo.


Section 7: Local Trace Viewers and Developer Tools

ToolLicensePurpose
otel-desktop-viewerApache 2.0Local OTLP receiver and web trace viewer
otel-tuiOpen-sourceTerminal OpenTelemetry viewer
otel-guiOpen-sourceLightweight local OTLP trace viewer
VenatorMITDesktop viewer for Rust/OTel logs and traces
Jaeger UIApache 2.0Standalone Jaeger trace UI
GrafanaAGPLv3Tempo, Jaeger, and Zipkin visualization
Aspire DashboardMITLocal OTLP dashboard for .NET and other applications (⭐ 6.3k · 👥 312)

These are helpful during development but most are not production storage backends.


Section 8: Trace-Derived Monitoring and Alerting

Tracing backends usually do not alert directly on individual traces. Instead, generate metrics from spans and alert using Prometheus-compatible tooling.

Metrics to Generate from Spans

  • Request rate (per service, per operation)
  • Error rate (per service, per operation)
  • Duration/latency histograms (p50, p95, p99)
  • Service dependency edges
  • Database call latency
  • External API latency
  • Messaging producer/consumer duration

Architecture

1
2
3
4
5
6
7
8
9
Application traces
       ↓
OpenTelemetry Collector
       ↓
Span-metrics connector + Service-graph connector
       ↓
Prometheus / VictoriaMetrics
       ↓
Alertmanager

Useful Trace-Derived Alerts

  • Span error rate exceeds 5%
  • P99 server-span latency exceeds 2 seconds
  • Database spans account for majority of request latency
  • A downstream dependency disappears from the service graph
  • Trace contains an unexpected retry loop
  • Messaging consumer span duration exceeds processing SLO
  • No spans received from a previously active service
  • Collector refused or dropped spans
  • Tail-sampling decision latency increases
  • Trace completeness falls (parent spans missing)

Dedicated trace backends (primary benchmark)

  • Jaeger v2
  • Grafana Tempo
  • Zipkin

Benchmark dimensions: Ingestion throughput, query latency, trace-ID lookup, arbitrary-attribute search, storage compression, retention cost, dropped spans, tail-sampling behavior, Kubernetes resources, horizontal scaling, multi-tenancy, failure recovery, operational complexity.

Collection and processing (separate evaluation)

  • OpenTelemetry Collector
  • Grafana Alloy
  • Jaeger v2 Collector (OTel distribution)

Auto-instrumentation (separate evaluation)

  • OpenTelemetry Operator
  • OpenTelemetry language agents
  • Odigos
  • OpenTelemetry eBPF Instrumentation

Developer and testing tools

  • Tracetest
  • telemetrygen
  • otel-cli
  • OTel Desktop Viewer
  • Tempo Vulture

Unified Observability Platforms with Tracing


FAQ

What is the best open-source distributed tracing tool in 2026? Jaeger v2 for a complete, batteries-included tracing system with built-in UI and Apache 2.0 license. Grafana Tempo for the most powerful query language (TraceQL) and cheapest storage at scale via object storage. The choice depends on whether you prioritize built-in UI + adaptive sampling (Jaeger) or query expressiveness + storage cost (Tempo).

Should I use Jaeger or Tempo? Use Jaeger v2 if you want a self-contained system with built-in UI, adaptive sampling, and existing Elasticsearch/Cassandra infrastructure. Use Tempo if you already use Grafana, want object-storage-native architecture, need TraceQL structural queries, or want built-in span-derived metrics. Both handle 100k+ spans/sec.

Is Zipkin still relevant in 2026? Zipkin remains the simplest tracing backend — a single JAR file with a built-in UI. It’s ideal for small teams, development environments, or organizations that need minimal operational overhead. For production at scale, Jaeger v2 or Tempo offer better query capabilities and throughput.

What is TraceQL? TraceQL is Grafana Tempo’s purpose-built trace query language. It supports structural queries across span parent/child relationships ({ .http.method = "GET" } >> { status = error }), duration filters, regex on attributes, and aggregation — making it the most expressive open-source trace query language available.

How do I get alerts from traces? Tracing backends don’t alert directly. Use the OpenTelemetry Collector’s span-metrics connector to generate RED metrics (Rate, Error, Duration) from spans, export them to Prometheus/VictoriaMetrics, and alert via Alertmanager. Tempo also has a built-in metrics-generator for this purpose.

What happened to Jaeger v1? Jaeger v1 reached end of life on December 31, 2025. Jaeger v2 is a complete rewrite built on the OpenTelemetry Collector framework. It’s backwards-compatible with v1 APIs but uses OTLP as the primary protocol. All new deployments should use v2.

🧭 The Complete Observability Guide & Comparison Series


References

Dedicated Trace Backends

Collection & Processing

Auto-Instrumentation

SDKs & Instrumentation

Standards & Protocols

Testing & Validation

Broader Platforms & APM


Last verified: September 2026. Features, licensing, and performance characteristics change — always check official sources.

This post is licensed under CC BY 4.0 by the author.