Skip to content
Preptima
hardConceptScenarioDesignMidSeniorStaff

Engineers added a user_id label to a few metrics and the observability bill went up tenfold. Explain what actually happened, and how you would fix it without losing the ability to debug.

Every distinct combination of label values is a separate time series with its own index entry, so an unbounded label multiplies series count by the number of users rather than adding one dimension. Metrics are the wrong tool for per-entity questions: keep labels bounded, move per-user debugging to exemplar-linked traces, and guard against the next unbounded label.

5 min readUpdated 2026-08-16Target archetype: Big Tech, Enterprise Captive, Product Startup

Answer

Short answer

A label is not a column you can filter later — every distinct combination of label values creates its own time series, stored and indexed independently. Adding user_id to a metric does not add one dimension; it multiplies the series count by the number of users. One metric with three labels becomes two million metrics, and you are billed per series. Metrics answer aggregate questions; per-entity questions belong to traces and logs.

Was this answer helpful?

Likely follow-ups

  • Which labels would you allow on an HTTP request metric, and which would you forbid?
  • A team insists they need per-customer latency for their top twenty accounts. How do you serve that?
  • How would you find the metrics responsible before you start deleting things?
  • What is an exemplar, and what problem does it solve here?
  • Your endpoint label is the raw URL path containing order ids. What do you do?

Related questions

Further reading