Self-hosted alternative to Honeycomb and Datadog Tracing, Jaeger delivers OTLP-native distributed tracing and dependency mapping on OpenTelemetry.
Honeycomb meters billing by ingested event volume and retains telemetry within a multi-tenant cloud environment. Jaeger deploys directly onto your infrastructure, routing traces into self-managed datastores without per-span bills or outbound network transfers. Originally created at Uber and hosted as a graduated CNCF project, it provides an open-source distributed tracing platform built on OpenTelemetry standards.
Shipping telemetry to Honeycomb requires outbound egress to commercial endpoints, anchoring analysis to Honeycomb's proprietary query engine. Jaeger v2 integrates into OpenTelemetry by sharing the architecture of the OpenTelemetry Collector. Rather than requiring vendor agents, Jaeger accepts standard OpenTelemetry Protocol (OTLP) traces over gRPC and HTTP, alongside backward compatibility for Zipkin and legacy Jaeger Thrift. Teams can insert standard collector processors directly into the ingestion pipeline, enabling batching, memory limiting, attribute redaction, and tail sampling before traces hit storage.
Where Honeycomb locks telemetry into its hosted columnar store, Jaeger integrates with databases including OpenSearch, Elasticsearch, Cassandra, and ClickHouse via remote gRPC plugins. It exports span metrics to Prometheus and connects to Grafana through a native data source plugin, letting engineers correlate metrics, logs, and trace identifiers in unified dashboards. Honeycomb excels at exploratory queries across high-cardinality attributes without indexing, whereas Jaeger focuses on indexed tag searches, request waterfalls, and service dependency maps. For teams invested in open-source observability, Jaeger keeps telemetry pipelines and storage within self-hosted network boundaries.
Is Jaeger free for commercial use? Yes, Jaeger is open source without commercial license fees, user seat limits, or paid enterprise editions.
Jaeger vs Honeycomb — which should you choose? Choose Honeycomb if your team needs managed infrastructure and exploratory high-cardinality analytics across unindexed attributes; choose Jaeger if you require self-hosted trace storage, OpenTelemetry alignment, and zero recurring vendor bills.
Can Jaeger run without an external database? Yes, Jaeger includes an all-in-one distribution that stores traces in memory for local testing and development, though production environments require persistent backends like OpenSearch or Cassandra.
Jaeger remains the pragmatic distributed tracing standard for engineering teams committed to OpenTelemetry who can manage an underlying datastore like OpenSearch or Cassandra. With active development and commits through September 2026, alongside an Apache-2.0 license that permits internal customization and redistribution without vendor restrictions, it provides a dependable, self-hosted foundation for microservice observability.
Commands from the official package registries. Each package is matched to Jaeger through the registry's own link to its source code or website.
winget install --id jaegertracing.jaeger -eWe started this exact setup from scratch in a clean Linux machine on Nov 1, 2026 and checked it through Jaeger's own API: every check passed. Recipes are re-checked regularly and removed if they stop working.
mkdir -p jaeger && cd jaeger
curl -fsSL https://open-source.store/tools/jaeger/compose.yml -o compose.ymltouch .envdocker compose up -dservices:
jaeger:
image: jaegertracing/jaeger:2.22.0
ports:
- "127.0.0.1:16686:16686"
- "127.0.0.1:4317:4317"
- "127.0.0.1:4318:4318"
restart: always
healthcheck:
test: ["CMD-SHELL", "wget -q -O /dev/null http://127.0.0.1:16686/ || exit 1"]
interval: 5s
timeout: 5s
retries: 5
Free IDE for Java, Kotlin, Go, TypeScript and Python. Built on IntelliJ Community, fully open source, 300+ plugins.
Show that Jaeger 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 9 s: jaegertracing/jaeger:2.22.0.
Based on the upstream setup. Official Jaeger compose from examples. Image pinned to 2.22.0, demo service removed, and healthcheck added. Ports bound to 127.0.0.1 so remote OTLP ingestion and the public UI no longer work without a tunnel or proxy, storage is in-memory (not persistent), and upstream's 16687 port and LOG_LEVEL=debug were dropped.
jaeger-1 | 2026-11-01T02:00:25.510214425Z 2026/11/01 02:00:25 application version: git-commit=462bb49fcff9af4be9556bf0206d07f5171bd8d7, git-version=v2.22.0, build-date=2026-10-06T11:44:34Z
jaeger-1 | 2026-11-01T02:00:25.510267592Z 2026/11/01 02:00:25 No '--config' flags detected, using default All-in-One configuration with memory storage.
jaeger-1 | 2026-11-01T02:00:25.510271050Z 2026/11/01 02:00:25 To customize All-in-One behavior, pass a proper configuration.
jaeger-1 | 2026-11-01T02:00:25.518268759Z 2026-11-01T02:00:25.518Z warn otelconftelemetry/logger.go:143 Using legacy service.telemetry.resource inline map format; prefer service.telemetry.resource.attributes (array of maps with `name` and `value` keys) {"resource": {"service.instance.id": "fac523ba-ea82-4874-9f1a-d371b9efc490", "service.name": "jaeger", "service.version": "v2.22.0"}, "legacy_resource_attributes": ["service.name"]}
jaeger-1 | 2026-11-01T02:00:25.519392050Z 2026-11-01T02:00:25.519Z info builders/builders.go:28 Development component. May change in the future. {"resource": {"service.instance.id": "fac523ba-ea82-4874-9f1a-d371b9efc490", "service.name": "jaeger", "service.version": "v2.22.0"}, "otelcol.component.id": "jaeger_storage_exporter", "otelcol.component.kind": "exporter", "otelcol.signal": "traces"}
jaeger-1 | 2026-11-01T02:00:25.519396925Z 2026-11-01T02:00:25.519Z info builders/builders.go:28 Development component. May change in the future. {"resource": {"service.instance.id": "fac523ba-ea82-4874-9f1a-d371b9efc490", "service.name": "jaeger", "service.version": "v2.22.0"}, "otelcol.component.id": "healthcheckv2", "otelcol.component.kind": "extension"}
jaeger-1 | 2026-11-01T02:00:25.519683592Z 2026-11-01T02:00:25.519Z info [email protected]/service.go:261 Starting jaeger... {"resource": {"service.instance.id": "fac523ba-ea82-4874-9f1a-d371b9efc490", "service.name": "jaeger", "service.version": "v2.22.0"}, "Version": "v2.22.0", "NumCPU": 2}
jaeger-1 | 2026-11-01T02:00:25.519689092Z 2026-11-01T02:00:25.519Z info extensions/extensions.go:44 Starting extensions... {"resource": {"service.instance.id": "fac523ba-ea82-4874-9f1a-d371b9efc490", "service.name": "jaeger", "service.version": "v2.22.0"}}
jaeger-1 | 2026-11-01T02:00:25.519823925Z 2026-11-01T02:00:25.519Z info extensions/extensions.go:48 Extension is starting... {"resource": {"service.instance.id": "fac523ba-ea82-4874-9f1a-d371b9efc490", "service.name": "jaeger", "service.version": "v2.22.0"}, "otelcol.component.id": "zpages", "otelcol.component.kind": "extension"}
jaeger-1 | 2026-11-01T02:00:25.519836634Z 2026-11-01T02:00:25.519Z warn [email protected]/zpagesextension.go:69 zPages span processor registration is not available {"resource": {"service.instance.id": "fac523ba-ea82-4874-9f1a-d371b9efc490", "service.name": "jaeger", "service.version": "v2.22.0"}, "otelcol.component.id": "zpages", "otelcol.component.kind": "extension"}
jaeger-1 | 2026-11-01T02:00:25.519898300Z 2026-11-01T02:00:25.519Z info [email protected]/zpagesextension.go:82 Registered Host's zPages {"resource": {"service.instance.id": "fac523ba-ea82-4874-9f1a-d371b9efc490", "service.name": "jaeger", "service.version": "v2.22.0"}, "otelcol.component.id": "zpages", "otelcol.component.kind": "extension"}
jaeger-1 | 2026-11-01T02:00:25.519987550Z 2026-11-01T02:00:25.519Z info [email protected]/zpagesextension.go:94 Starting zPages extension {"resource": {"service.instance.id": "fac523ba-ea82-4874-9f1a-d371b9efc490", "service.name": "jaeger", "service.version": "v2.22.0"}, "otelcol.component.id": "zpages", "otelcol.component.kind": "extension", "config": {"ServerConfig":{"NetAddr":{"Endpoint":"0.0.0.0:27778","Transport":"tcp","DialerConfig":{"Timeout":0}},"TLS":{},"CORS":{},"Auth":{},"MaxRequestBodySize":0,"IncludeMetadata":false,"ResponseHeaders":null,"CompressionAlgorithms":null,"ReadTimeout":0,"ReadHeaderTimeout":60000000000,"WriteTimeout":30000000000,"Middlewares":null,"Keepalive":{},"IdleTimeout":60000000000,"KeepAlivesEnabled":true},"Expvar":{"Enabled":false}}}
jaeger-1 | 2026-11-01T02:00:25.520050009Z 2026-11-01T02:00:25.520Z info extensions/extensions.go:66 Extension started. {"resource": {"service.instance.id": "fac523ba-ea82-4874-9f1a-d371b9efc490", "service.name": "jaeger", "service.version": "v2.22.0"}, "otelcol.component.id": "zpages", "otelcol.component.kind": "extension"}
jaeger-1 | 2026-11-01T02:00:25.520078842Z 2026-11-01T02:00:25.520Z info extensions/extensions.go:48 Extension is starting... {"resource": {"service.instance.id": "fac523ba-ea82-4874-9f1a-d371b9efc490", "service.name": "jaeger", "service.version": "v2.22.0"}, "otelcol.component.id": "expvar", "otelcol.component.kind": "extension"}
jaeger-1 | 2026-11-01T02:00:25.520137050Z 2026-11-01T02:00:25.520Z info expvar/extension.go:52 Starting expvar server {"resource": {"service.instance.id": "fac523ba-ea82-4874-9f1a-d371b9efc490", "service.name": "jaeger", "service.version": "v2.22.0"}, "otelcol.component.id": "expvar", "otelcol.component.kind": "extension", "addr": "[::]:27777"}
jaeger-1 | 2026-11-01T02:00:25.520154759Z 2026-11-01T02:00:25.520Z info extensions/extensions.go:66 Extension started. {"resource": {"service.instance.id": "fac523ba-ea82-4874-9f1a-d371b9efc490", "service.name": "jaeger", "service.version": "v2.22.0"}, "otelcol.component.id": "expvar", "otelcol.component.kind": "extension"}
jaeger-1 | 2026-11-01T02:00:25.520189884Z 2026-11-01T02:00:25.520Z info extensions/extensions.go:48 Extension is starting... {"resource": {"service.instance.id": "fac523ba-ea82-4874-9f1a-d371b9efc490", "service.name": "jaeger", "service.version": "v2.22.0"}, "otelcol.component.id": "healthcheckv2", "otelcol.component.kind": "extension"}
jaeger-1 | 2026-11-01T02:00:25.520536634Z 2026-11-01T02:00:25.520Z info extensions/extensions.go:66 Extension started. {"resource": {"service.instance.id": "fac523ba-ea82-4874-9f1a-d371b9efc490", "service.name": "jaeger", "service.version": "v2.22.0"}, "otelcol.component.id": "healthcheckv2", "otelcol.component.kind": "extension"}
jaeger-1 | 2026-11-01T02:00:25.520557550Z 2026-11-01T02:00:25.520Z info extensions/extensions.go:48 Extension is starting... {"resource": {"service.instance.id": "fac523ba-ea82-4874-9f1a-d371b9efc490", "service.name": "jaeger", "service.version": "v2.22.0"}, "otelcol.component.id": "jaeger_storage", "otelcol.component.kind": "extension"}
jaeger-1 | 2026-11-01T02:00:25.520655342Z 2026-11-01T02:00:25.520Z info extensions/extensions.go:66 Extension started. {"resource": {"service.instance.id": "fac523ba-ea82-4874-9f1a-d371b9efc490", "service.name": "jaeger", "service.version": "v2.22.0"}, "otelcol.component.id": "jaeger_storage", "otelcol.component.kind": "extension"}
jaeger-1 | 2026-11-01T02:00:25.520675175Z 2026-11-01T02:00:25.520Z info extensions/extensions.go:48 Extension is starting... {"resource": {"service.instance.id": "fac523ba-ea82-4874-9f1a-d371b9efc490", "service.name": "jaeger", "service.version": "v2.22.0"}, "otelcol.component.id": "remote_sampling", "otelcol.component.kind": "extension"}
jaeger-1 | 2026-11-01T02:00:25.520725634Z 2026-11-01T02:00:25.520Z info remotesampling/extension.go:106 Starting file-based sampling strategy provider {"resource": {"service.instance.id": "fac523ba-ea82-4874-9f1a-d371b9efc490", "service.name": "jaeger", "service.version": "v2.22.0"}, "otelcol.component.id": "remote_sampling", "otelcol.component.kind": "extension", "path": ""}
jaeger-1 | 2026-11-01T02:00:25.520752967Z 2026-11-01T02:00:25.520Z info file/provider.go:56 No sampling strategies source provided, using defaults {"resource": {"service.instance.id": "fac523ba-ea82-4874-9f1a-d371b9efc490", "service.name": "jaeger", "service.version": "v2.22.0"}, "otelcol.component.id": "remote_sampling", "otelcol.component.kind": "extension"}
jaeger-1 | 2026-11-01T02:00:25.520811259Z 2026-11-01T02:00:25.520Z info remotesampling/extension.go:238 Starting remote sampling HTTP server {"resource": {"service.instance.id": "fac523ba-ea82-4874-9f1a-d371b9efc490", "service.name": "jaeger", "service.version": "v2.22.0"}, "otelcol.component.id": "remote_sampling", "otelcol.component.kind": "extension", "endpoint": "0.0.0.0:5778"}
jaeger-1 | 2026-11-01T02:00:25.520849217Z 2026-11-01T02:00:25.520Z info remotesampling/extension.go:270 Starting remote sampling GRPC server {"resource": {"service.instance.id": "fac523ba-ea82-4874-9f1a-d371b9efc490", "service.name": "jaeger", "service.version": "v2.22.0"}, "otelcol.component.id": "remote_sampling", "otelcol.component.kind": "extension", "endpoint": "0.0.0.0:5779"}
jaeger-1 | 2026-11-01T02:00:25.520878175Z 2026-11-01T02:00:25.520Z info extensions/extensions.go:66 Extension started. {"resource": {"service.instance.id": "fac523ba-ea82-4874-9f1a-d371b9efc490", "service.name": "jaeger", "service.version": "v2.22.0"}, "otelcol.component.id": "remote_sampling", "otelcol.component.kind": "extension"}
jaeger-1 | 2026-11-01T02:00:25.520925634Z 2026-11-01T02:00:25.520Z info extensions/extensions.go:48 Extension is starting... {"resource": {"service.instance.id": "fac523ba-ea82-4874-9f1a-d371b9efc490", "service.name": "jaeger", "service.version": "v2.22.0"}, "otelcol.component.id": "jaeger_query", "otelcol.component.kind": "extension"}
jaeger-1 | 2026-11-01T02:00:25.520978675Z 2026-11-01T02:00:25.520Z info storageconfig/factory.go:39 Initializing storage 'some_storage' {"resource": {"service.instance.id": "fac523ba-ea82-4874-9f1a-d371b9efc490", "service.name": "jaeger", "service.version": "v2.22.0"}, "otelcol.component.id": "jaeger_storage", "otelcol.component.kind": "extension"}
jaeger-1 | 2026-11-01T02:00:25.521039175Z 2026-11-01T02:00:25.521Z info jaegerquery/server.go:197 Archive storage not configured {"resource": {"service.instance.id": "fac523ba-ea82-4874-9f1a-d371b9efc490", "service.name": "jaeger", "service.version": "v2.22.0"}, "otelcol.component.id": "jaeger_query", "otelcol.component.kind": "extension"}
jaeger-1 | 2026-11-01T02:00:25.521061592Z 2026-11-01T02:00:25.521Z info jaegerquery/server.go:233 Metric storage not configured {"resource": {"service.instance.id": "fac523ba-ea82-4874-9f1a-d371b9efc490", "service.name": "jaeger", "service.version": "v2.22.0"}, "otelcol.component.id": "jaeger_query", "otelcol.component.kind": "extension"}
jaeger-1 | 2026-11-01T02:00:25.522120675Z 2026-11-01T02:00:25.522Z info internal/server.go:365 Jaeger telemetry MCP endpoint enabled {"resource": {"service.instance.id": "fac523ba-ea82-4874-9f1a-d371b9efc490", "service.name": "jaeger", "service.version": "v2.22.0"}, "otelcol.component.id": "jaeger_query", "otelcol.component.kind": "extension", "path": "/api/ai/mcp/"}
jaeger-1 | 2026-11-01T02:00:25.522257009Z 2026-11-01T02:00:25.522Z info internal/server.go:451 Query server started {"resource": {"service.instance.id": "fac523ba-ea82-4874-9f1a-d371b9efc490", "service.name": "jaeger", "service.version": "v2.22.0"}, "otelcol.component.id": "jaeger_query", "otelcol.component.kind": "extension", "http_addr": "[::]:16686", "grpc_addr": "[::]:16685"}
jaeger-1 | 2026-11-01T02:00:25.522282300Z 2026-11-01T02:00:25.522Z info aihealth/checker.go:52 Starting AI health checker {"resource": {"service.instance.id": "fac523ba-ea82-4874-9f1a-d371b9efc490", "service.name": "jaeger", "service.version": "v2.22.0"}, "otelcol.component.id": "jaeger_query", "otelcol.component.kind": "extension", "interval": 30, "timeout": 2}
jaeger-1 | 2026-11-01T02:00:25.522305300Z 2026-11-01T02:00:25.522Z info extensions/extensions.go:66 Extension started. {"resource": {"service.instance.id": "fac523ba-ea82-4874-9f1a-d371b9efc490", "service.name": "jaeger", "service.version": "v2.22.0"}, "otelcol.component.id": "jaeger_query", "otelcol.component.kind": "extension"}
jaeger-1 | 2026-11-01T02:00:25.522344634Z 2026-11-01T02:00:25.522Z info internal/server.go:489 Starting GRPC server {"resource": {"service.instance.id": "fac523ba-ea82-4874-9f1a-d371b9efc490", "service.name": "jaeger", "service.version": "v2.22.0"}, "otelcol.component.id": "jaeger_query", "otelcol.component.kind": "extension", "port": 16685, "addr": ":16685"}
jaeger-1 | 2026-11-01T02:00:25.522388092Z 2026-11-01T02:00:25.522Z info internal/server.go:477 Starting HTTP server {"resource": {"service.instance.id": "fac523ba-ea82-4874-9f1a-d371b9efc490", "service.name": "jaeger", "service.version": "v2.22.0"}, "otelcol.component.id": "jaeger_query", "otelcol.component.kind": "extension", "port": 16686, "addr": ":16686"}
jaeger-1 | 2026-11-01T02:00:25.523923592Z 2026-11-01T02:00:25.523Z info [email protected]/otlp.go:120 Starting GRPC server {"resource": {"service.instance.id": "fac523ba-ea82-4874-9f1a-d371b9efc490", "service.name": "jaeger", "service.version": "v2.22.0"}, "otelcol.component.id": "otlp", "otelcol.component.kind": "receiver", "endpoint": "[::]:4317"}
jaeger-1 | 2026-11-01T02:00:25.523946134Z 2026-11-01T02:00:25.523Z info [email protected]/otlp.go:175 Starting HTTP server {"resource": {"service.instance.id": "fac523ba-ea82-4874-9f1a-d371b9efc490", "service.name": "jaeger", "service.version": "v2.22.0"}, "otelcol.component.id": "otlp", "otelcol.component.kind": "receiver", "endpoint": "[::]:4318"}
jaeger-1 | 2026-11-01T02:00:25.523978800Z 2026-11-01T02:00:25.523Z info [email protected]/trace_receiver.go:212 Starting UDP server for Binary Thrift {"resource": {"service.instance.id": "fac523ba-ea82-4874-9f1a-d371b9efc490", "service.name": "jaeger", "service.version": "v2.22.0"}, "otelcol.component.id": "jaeger", "otelcol.component.kind": "receiver", "otelcol.signal": "traces", "endpoint": "0.0.0.0:6832"}
jaeger-1 | 2026-11-01T02:00:25.523993759Z 2026-11-01T02:00:25.523Z info [email protected]/trace_receiver.go:235 Starting UDP server for Compact Thrift {"resource": {"service.instance.id": "fac523ba-ea82-4874-9f1a-d371b9efc490", "service.name": "jaeger", "service.version": "v2.22.0"}, "otelcol.component.id": "jaeger", "otelcol.component.kind": "receiver", "otelcol.signal": "traces", "endpoint": "0.0.0.0:6831"}
jaeger-1 | 2026-11-01T02:00:25.524024550Z 2026-11-01T02:00:25.524Z info [email protected]/trace_receiver.go:340 Starting HTTP server for Jaeger Thrift {"resource": {"service.instance.id": "fac523ba-ea82-4874-9f1a-d371b9efc490", "service.name": "jaeger", "service.version": "v2.22.0"}, "otelcol.component.id": "jaeger", "otelcol.component.kind": "receiver", "otelcol.signal": "traces", "endpoint": "0.0.0.0:14268"}
jaeger-1 | 2026-11-01T02:00:25.524037884Z 2026-11-01T02:00:25.524Z info [email protected]/trace_receiver.go:367 Starting gRPC server for Jaeger Protobuf {"resource": {"service.instance.id": "fac523ba-ea82-4874-9f1a-d371b9efc490", "service.name": "jaeger", "service.version": "v2.22.0"}, "otelcol.component.id": "jaeger", "otelcol.component.kind": "receiver", "otelcol.signal": "traces", "endpoint": "0.0.0.0:14250"}
jaeger-1 | 2026-11-01T02:00:25.524042342Z 2026-11-01T02:00:25.524Z info [email protected]/service.go:284 Everything is ready. Begin running and processing data. {"resource": {"service.instance.id": "fac523ba-ea82-4874-9f1a-d371b9efc490", "service.name": "jaeger", "service.version": "v2.22.0"}}