Cardinality Multiplies โ It Doesn't Add
Every dimension you tag a metric with is a multiplier on the number of distinct time series your monitoring backend has to store and bill for, not an additive cost. This calculator makes that concrete: totalTimeSeries = baseMetrics ร environments ร regions ร userCardinality. At the defaults โ 50 base metrics, 3 environments, 4 regions, 5,000 unique tag values โ that's 50 ร 3 ร 4 ร 5,000 = 3,000,000 active time series, priced here at Datadog's modeled custom-metrics rate of roughly $5.00 per 100 series/month. Adding one more region or environment feels incremental; multiplying the existing cardinality by it is not.
The Tag You Should Never Add
The single input that dominates this formula in practice is the last one โ a high-entropy tag value like user_id. Going from 500 to 5,000 unique users tagged on every metric doesn't add 4,500 series; it multiplies your entire existing series count by 10x, because cardinality compounds across every base metric, environment, and region combination that already exists. The same trap applies to any unbounded label: request_id, email, ip_address, session UUIDs. None of these belong as metric tags โ they belong in structured logs or as span attributes in distributed tracing, where per-event cardinality is expected and priced differently than per-series cardinality.