Why label explosions wreck most metrics backends — and how columnar storage keeps cardinality cheap.

Teams get told to avoid high-cardinality labels — user IDs, trace IDs, request paths — precisely the labels that answer real questions. The problem is the pricing model, not the cardinality.

Store wide, aggregate late

Keep the raw, wide events and compute aggregates at query time. You stop paying a per-series tax for the privilege of asking a specific question.

Columnar storage changes the math

Row-per-series backends charge you for every unique label combination, so cardinality becomes a bill. A columnar store keeps each label as a compressed column and only touches the ones a query names — the cost tracks the question you ask, not the number of series you could theoretically create.

Budget cardinality, do not ban it

Blanket bans on user IDs and trace IDs throw away the labels that answer real incidents. Instead, set a per-team cardinality budget, surface the top offenders, and let owners decide what is worth keeping. High-cardinality data is an asset when storage does not punish you for holding it.