Problem
A well-meaning label such as user ID or URL path multiplies series count, bloating memory, slowing queries, and producing surprise bills. Backends can crash or drop data when series count explodes.
Also known as: cardinality-control, label-governance
Control the number of unique metric series and fields so telemetry stays queryable and affordable.
A well-meaning label such as user ID or URL path multiplies series count, bloating memory, slowing queries, and producing surprise bills. Backends can crash or drop data when series count explodes.
Cardinality is the count of unique values a dimension can take. In time-series databases, every unique combination of label values is its own series. Three labels with 100, 50, and 20 values can create 100,000 series, and each series costs memory and index space.
Manage cardinality in four steps.
series = distinct(service) * distinct(route) * distinct(status) * ...
bad: http_requests_total{user_id="8841",path="/users/8841/orders"}
good: http_requests_total{route="/users/:id/orders",status="200"}
detail for one user -> logs and traces, found by trace_id
A weekly top-ten report of series by metric creates healthy pressure, and a pull request check can lint instrumentation for forbidden labels.
Medium - reduces storage spend
Medium - quota and review process
Medium - need mental model of series
Unbounded label slips through review and exhausts backend memory
Aggressive relabeling drops a label needed during an incident
Limits cause silent data loss because no alert watches rejections