Slide 3 of 5

Cardinality affects cost and performance

Cardinality affects cost and performance

High cardinality affects both your bill and query performance, but metrics and logs are billed differently.

  • Metrics cost: Grafana Cloud bills metrics on active series, so every unique label combination is a billing unit, whether or not anyone queries it.
  • Logs cost: Grafana Cloud bills logs on GB processed and ingested, not per stream. High stream cardinality doesn’t add a direct per-stream charge, but it can inflate query costs because larger indexes and more chunks mean bigger scans.
  • Performance: For logs, many streams mean a large index and many small chunks, which slows queries down. Loki, the Grafana Cloud Logs backend, is designed for low-cardinality labels and limits index labels to 15 by default.

High-cardinality attributes to watch for include user IDs, request or trace IDs, IP addresses, Kubernetes pod names, and timestamps. Any of these used as a label value creates a new series or stream for every unique value.

Script

High cardinality hits you in two places, on the bill and at query time, and metrics and logs behave differently.

For metrics, every unique label combination is a billing unit. It costs money whether or not anyone ever queries it.

For logs, billing is based on the gigabytes you process and ingest, so high stream cardinality doesn’t add a direct per-stream charge. But it still has an impact, because a larger index and more chunks mean bigger scans and higher query costs. Loki, the backend behind Grafana Cloud Logs, is designed for low-cardinality labels and limits index labels to 15 by default.

So what should you watch for? User IDs, request and trace IDs, IP addresses, Kubernetes pod names, and timestamps. Use any of these as a label value and you create a new series or stream for every unique value.