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:
- They introduce head sampling (keeping only 10% or 1% of traces).
- They truncate payloads and drop contextual metadata.
- 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.
Frequently Asked Questions
What is the observability indexing tax?
How does a session graph differ from traditional flat logs?
Why is DuckLake suitable for high-scale agent telemetry?
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.
