Functional
- Ingest timestamped metric samples with labels.
- Query ranges with filtering and aggregation.
- Evaluate recording and alerting rules.
Ingest, aggregate, retain, and query high-cardinality time-series data.
~300 MB/s before replication and index overhead.
Head index memory and churn are primary constraints.
Use object storage and compaction tiers.
Plan budgets, partial responses, and pre-aggregation.
These are reference assumptions, not universal facts. In an interview or architecture review, change them when the product context changes.
/v1/writeBatch ingest labeled samples with tenant identity./v1/query_rangeExecute bounded range expression with step and deadline./v1/rulesPublish versioned recording or alert rules.tenant+fingerprint, canonical_labels, chunks, min/max timeFingerprint routes all samples for a series consistently.time_range, series_index, compressed_chunks, checksumImmutable blocks support cheap object storage and compaction.Validate labels and control cardinality
Absorb bursts and enable replay
Compress and retain metric blocks
Fan out and merge time ranges
Gateways validate labels, enforce per-tenant series/sample budgets, and shard by series fingerprint. A replicated log absorbs bursts; ingesters build compressed in-memory chunks and periodically flush immutable blocks.
Limit new-series creation, label lengths, and per-metric dimension counts. Expose rejected-label diagnostics. Heavy-hitter detection identifies accidental user IDs or request paths before memory collapses.
A frontend splits ranges, deduplicates requests, caches stable blocks, and enforces byte/series/concurrency budgets. Queriers push filters to blocks and merge partial aggregates rather than raw samples when possible.
Enforce tenant budgets and drop low-value dimensions before storage.
Limit concurrency, cache rollups, and require narrower time ranges.
Move here when: Team-scale observability.
Move here when: Ingestion exceeds one node and retention grows.
Move here when: Noisy neighbors and global reliability matter.
Strong answer signal: Keep one series ordered/compressible while time blocks serve retention.
Strong answer signal: Head index memory, metadata churn, and compaction—not raw disk alone.
Strong answer signal: Usually fail-safe with explicit missing-data semantics; never silently treat partial as complete.