DEV Community

Cover image for Tracing Backends in 2026: Same Spans, Five Different Bills
Moksh Gupta
Moksh Gupta

Posted on Originally published at devtoollab.com

Tracing Backends in 2026: Same Spans, Five Different Bills

A checkout request that hits a load balancer, three services, Postgres, a queue and Stripe leaves four seconds of latency and no obvious culprit until you stitch the hops into one timeline. That's what distributed tracing is for, and I went looking for what it actually costs to store that timeline once you're past the free tier. I wrote up the full breakdown on DevToolLab, and the short version is that nobody prices tracing the same way, so a side-by-side comparison means nothing unless you know your span size first.

Nobody bills the same unit

Grafana Cloud and SigNoz charge per gigabyte of spans. Honeycomb and Dash0 charge per span. Datadog charges per host plus per million indexed spans. AWS splits between per-trace (classic X-Ray) and per-gigabyte (the newer CloudWatch Transaction Search). None of that is comparable until you know how big your spans are, so instead of trusting a vendor's example numbers I generated 50,000 of them.

Using the official OpenTelemetry JS SDK and its OTLP protobuf serializer, I built a checkout trace: an HTTP server span, three SQL queries, an inventory service call, a Stripe call, a queue publish, four internal spans, us-east-1 Kubernetes resource attributes attached. Batched in groups of 512 (the SDK default), the average span came out to 266 bytes as protobuf and 656 bytes as JSON. That's a lean number, before auto-instrumentation adds its usual pile of attributes, and it matters because none of the per-GB pricing pages say whether their gigabyte is measured before or after compression.

What a month actually costs

Feeding 266-byte spans into each vendor's public rate card at two volumes (50 million spans across 6 hosts, and 500 million spans across 24 hosts) produced this:

50M spans/mo, 6 hosts = 13.3 GB
  Grafana Cloud Traces            $19.00
  SigNoz Cloud                    $49.00
  Datadog APM                     $350.80
  Honeycomb Pro                   $150.00
  Dash0                           $30.00
  AWS X-Ray (classic)             $24.50
  CloudWatch Transaction Search   $4.66
  Self-hosted Tempo (S3 only)     $0.31

500M spans/mo, 24 hosts = 133.0 GB
  Grafana Cloud Traces            $56.35
  SigNoz Cloud                    $49.00
  Datadog APM                     $1913.20
  Honeycomb Pro                   not published
  Dash0                           $300.00
  AWS X-Ray (classic)             $249.50
  CloudWatch Transaction Search   $46.55
  Self-hosted Tempo (S3 only)     $3.06
Enter fullscreen mode Exit fullscreen mode

That's a roughly 40x spread on the same 500 million spans: $1,913.20 on Datadog versus $46.55 on CloudWatch Transaction Search. Bump the span size to 1 KB and only the per-GB backends move - Grafana Cloud goes to $221.50, SigNoz to $150.00 - while Datadog, Dash0 and X-Ray hold steady, because they never cared about bytes in the first place. Small spans favor per-GB pricing; fat, attribute-heavy spans make per-span pricing look better by comparison. None of this counts self-hosting compute, extended retention or volume discounts, so treat it as a starting estimate, not a quote.

The backends, briefly

Jaeger is the CNCF project, and v2 rebuilt it on top of the OpenTelemetry Collector framework. You pick the storage backend (Elasticsearch, Cassandra, ClickHouse, Badger), which means you also own operating it. v1 reached end of life December 31, 2025.

Jaeger open source distributed tracing platform homepage

Grafana Tempo needs only object storage, and that's why it's cheap: our 133 GB month costs $3.06 in S3 before compute. Version 3.0 replaced the ingester architecture and made TraceQL metrics generally available, but the new write path pulls Kafka into a self-hosted deployment. Grafana Cloud Traces gives you 50 GB free, then $19/month gets you 50 GB more.

Grafana Tempo open source distributed tracing backend page

SigNoz stores traces, logs and metrics together in ClickHouse and prices at a flat $0.30/GB with a $49 minimum, no host or seat fees. The ee/ directory sits under a separate license, so it's not purely MIT, and ClickHouse at scale is its own operational job.

Honeycomb counts every span, span event and span link as a billable event but doesn't charge extra for attributes, which the docs call "unlimited custom fields." That makes high-cardinality debugging genuinely cheap, but only the 50M-event, $150/month tier is public. Go past 500 million and you're negotiating.

Datadog APM bills per host ($31/month, annual) plus per indexed span past the bundled allotment. In our 24-host run, indexed spans alone were $809 of the $1,913 total. It's the best option if Datadog already owns your infra dashboards; it's the worst option if you're optimizing for a tracing line item in isolation.

Datadog APM performance monitoring page with a trace waterfall

Dash0 charges $0.06/M spans ingested plus $0.54/M stored, 30-day retention, no free tier. Sampling inside its own SignalControl filtering only charges the ingest rate, so dropping spans there is cheap - but a lean 266-byte span gets you nothing, since the price is per-span, not per-byte.

AWS X-Ray / CloudWatch Transaction Search is mid-migration: the classic X-Ray SDKs went into maintenance mode February 25, 2026, and the product URL now redirects to CloudWatch. Transaction Search bills $0.35/GB ingested plus $0.75/M spans indexed beyond a small free allotment, and it came out cheapest of every hosted option in both of our workloads.

The math side by side

Backend Billing unit Entry price Retention
Jaeger Your storage $0 You decide
Grafana Tempo Per GB (Cloud) Free 50 GB, then $19/mo 30 days
SigNoz Per GB $49/mo minimum 15 days
Honeycomb Per event Free 20M, then $150/mo 60 days
Datadog APM Per host + indexed span $31/host/mo 15 days
Dash0 Per span $0.60 per 1M kept 30 days
AWS X-Ray / CloudWatch Per trace or per GB 100k traces free 30 days (classic)

Picking one without migrating twice

Instrument with OpenTelemetry regardless of backend - Jaeger v2 is built on the OTel Collector and even AWS is steering people off its own SDKs, so vendor lock-in now happens at the pricing layer, not the instrumentation layer. Before you sign anything, point a Collector at a file exporter for an hour of real production traffic and divide total bytes by span count; that single number tells you whether per-GB or per-span pricing wins. Do your tail sampling in the Collector, not in the vendor's ingestion pipeline, since Grafana Cloud and Dash0 both bill ingestion even for spans you're about to sample out. And keep a Collector between your apps and whichever backend you pick, so switching later is a config change, not a redeploy.

If you're a small team, Grafana Cloud's $19/month Pro tier covered our entire 50-million-span workload inside its included 50 GB. If you want to own your data outright, Tempo or Jaeger-on-ClickHouse both work, but budget engineering time, not just storage dollars. If you're already deep in Datadog, stay, but index selectively - that's where the real cost sits. If you're all-in on AWS, CloudWatch Transaction Search undercut everything else we tested at both volumes. I go into more of the decision framework, plus the actual pricing script you can run against your own numbers, in the full post.

If you're setting up the collector side of this, DevToolLab's OTel Config Generator builds the tail-sampling and dual-write YAML mentioned above, and the Protobuf Decoder is handy for reading a captured OTLP span payload without hunting down the .proto file.

References

Top comments (0)