Skip to main content
Bill Zuo
Bill Zuo
Observability
6 min read

The 200x Indexing Tax: Why Storing Telemetry Costs Cents but Searching It Costs Thousands

Why traditional log warehouses force teams to discard 90% of their runtime data, and how a session-graph architecture on S3/DuckLake collapses observability costs.

Key Takeaways & Executive Summary

  • The 200x Markup: Storing 1 GB in object storage costs pennies; indexing that same 1 GB in legacy APMs costs hundreds of dollars.
  • The Sampling Trap: 90% log sampling saves money on normal days, but guarantees zero evidence when rare production failures occur.
  • Architecture Solution: Treat telemetry as a structured session DAG stored in columnar Parquet, not as freeform text strings.
  • Durable Economics: Keep 100% of runtime events forever in a lake, reducing operational costs by over 90%.

Storing 1 GB of raw telemetry in Amazon S3 or Cloudflare R2 costs roughly two cents per month.

Making that exact same 1 GB searchable in a traditional observability platform? Between $3.00 and $5.00+.

When you ingest tens of terabytes of logs and traces across modern distributed microservices and autonomous AI agents, that math breaks down completely.

This 200x price discrepancy is what I call the Observability Indexing Tax.

It is the single greatest reason why engineering leaders are forced into an unacceptable trade-off: throwing away 90% of their operational data just to survive the monthly observability bill.


The Vicious Cycle of Log Sampling

Because inverted indexes are computationally brutal to maintain on writes, traditional platforms charge for ingestion volume.

When the observability bill threatens to overtake infrastructure compute costs, teams do what they must:

  1. They introduce head sampling (keeping only 10% or 1% of traces).
  2. They truncate payloads and drop contextual metadata.
  3. They set aggressive 7-day or 14-day data retention limits.
Full Runtime Reality (100%)
  ├── 90% Discarded at Ingest Gate (Cost Control)
  └── 10% Stored in Costly Inverted Index
        └── Result: Production incident occurs in the 90% missing void

This creates the Sampling Paradox: you pay millions of dollars for an observability suite, yet whenever a subtle edge-case incident, memory leak, or rogue agent session hits production, your engineers are still flying blind.

The Illusion of Coverage

Analyzing 10% of your telemetry to diagnose 100% of your problems is like solving a jigsaw puzzle with 90% of the pieces missing. The incident isn’t invisible because the code failed quietly; it is invisible because your log platform was too expensive to record it.


Why Is Traditional Indexing So Expensive?

Legacy log engines were designed in the early 2010s around search-engine text concepts (Lucene, Lucene-derived inverted indexes).

When a service outputs a log line like:

{"level":"info","msg":"User checkout completed","userId":"usr_98124","latency_ms":42}

An inverted indexer tokenizes every word: "User", "checkout", "completed", builds posting lists, merges segments, and maintains massive B-trees in memory and NVMe SSDs.

For unstructured web search, inverted indexes are wonderful. For machine telemetry, where 99% of queries are scoped by tenant, session, time window, and status, full-text indexing every token is massive, wasteful overkill.


The Alternative: The Session Graph & Lake Architecture

At Softprobe, we asked a simple architectural question:

What if we stopped indexing every word on the write path, and instead organized telemetry as a Session Graph written directly to columnar Parquet in an object store?

Ingest (High Throughput)
  │
  ├─► Soft Coalesce Buffer (In-Memory)
  │
  └─► Commit Parquet batches to DuckLake (S3 / R2)
        ├── Coalesced Parquet partitions (pruned by date & session)
        └── Postgres Catalog (Derived, lightweight session index)

1. Vectorized Columnar Storage Over Inverted Indexes

By storing telemetry in Apache Parquet files organized by tenant, date, and session ID, modern analytical query engines (like DuckDB and DuckLake) can execute vectorized SIMD scans across millions of records in milliseconds.

We don’t need a multi-million-dollar Elastic cluster sitting idle burning RAM. When you query a session, the engine reads only the exact byte offsets from object storage.

2. A Session Graph, Not Flat Lines

Autonomous AI agents don’t work in isolated spans. An agent execution is a complex loop:

  • User prompt
  • LLM reasoning turn
  • Tool calls (file search, shell execution, database query)
  • Error output and retry

When you capture this as a Directed Acyclic Graph (DAG) tied to an explicit session, you no longer need full-text search to find what broke. You traverse the graph directly from intent to error.


Comparing the Real-World FinOps Numbers

Consider a mid-sized engineering organization generating 1 TB of telemetry per day with a requirement for 90-day retention:

Metric Traditional Log Platform (Datadog / Splunk) Lake-Backed Session Graph (Softprobe DuckLake)
Ingestion & Index Cost $1,500 – $3,500 / day Negligible (Compute worker only)
90-Day Storage Cost $150,000+ / year (hot tier) ~$6,500 / year (S3/R2 standard)
Sampling Required? Yes (90% discarded) No (100% captured)
Annual Total Cost $1,800,000 – $2,400,000 ~$132,000
Evidence Retention 14 – 30 days max Forever

The goal of observability is not to generate real-time vanity dashboards for every span ever emitted. The goal is to provide uncompromised forensic evidence when an incident misbehaves. Boring lake storage makes that evidence affordable forever.

Bill Zuo— Founder & CEOat Softprobe

Frequently Asked Questions

What is the observability indexing tax?
The indexing tax is the exponential cost markup charged by traditional log platforms (Elasticsearch, Splunk, Datadog) to tokenize, build B-trees, and invert index every text field in real time, making search hundreds of times more expensive than underlying cloud storage.
How does a session graph differ from traditional flat logs?
A session graph structures distributed traces, HTTP calls, model turns, and tool executions into a Directed Acyclic Graph (DAG) keyed by session ID, rather than dumping disconnected lines of text into an indexer.
Why is DuckLake suitable for high-scale agent telemetry?
DuckLake combines the cheap durability of cloud object stores with vectorized columnar execution (DuckDB/Parquet), allowing targeted session queries and aggregations to run with sub-second latency without continuous indexing fees.

Stop Paying the Tax

Engineering teams shouldn’t have to apologize for logging too much context.

If your team is currently cutting logs to avoid price shocks, it’s time to move from the 2012 inverted-index model to a modern lake-backed session graph.

  • Keep the evidence.
  • Stop the sampling.
  • Escape the indexing tax.