Understand your Grafana Cloud Metrics invoice
Grafana Cloud calculates metrics usage from two components specific to Grafana Cloud Metrics billing: active series and data points per minute (DPM). When you understand these components, you can better manage usage and reduce costs for your organization.
Active series
An active series is a time series that has received new data points within the previous 20 minutes. Shortly after you stop writing new data points to a series, it’s no longer active. This applies to both hosted Prometheus and hosted Graphite.
Note
The definition of active series is different for Prometheus native histograms. Refer to Prometheus native histograms.
To view active series data, query the grafanacloud_instance_active_series metric in the grafanacloud-usage data source.
To understand metrics and time series, refer to Prometheus time series or Graphite time series.
Data points per minute (DPM)
A data point is a single measured occurrence, or sample, of a metric within a time series, consisting of a unique value and timestamp. Data points per minute (DPM) is the number of data points sent to Grafana Cloud Metrics per minute per series. DPM is calculated per stack.
Grafana Cloud measures DPM directly from the data sent to its servers. You can also calculate DPM by multiplying the number of active series by the number of data points per series per minute.
To calculate the data points per series per minute, divide the number of seconds in a minute by your scrape interval. For example:
- A scrape interval of 15 seconds produces 4 data points per series per minute. This is the Prometheus default.
- A scrape interval of 60 seconds produces 1 data point per series per minute. This is the default for Grafana Cloud integrations.
To view DPM, query the grafanacloud_instance_samples_per_second metric in the grafanacloud-usage data source, then multiply by 60 to convert to minutes ( * 60).
To improve your DPM, refer to optimize your scrape interval.
Included DPM per series
Grafana Cloud Pro accounts include a default resolution of 1 DPM per active series. You can shorten your scrape interval to ship data points more frequently and increase your DPM, for an additional charge. Contracted plans let you choose between the default 1 DPM resolution and a 4 DPM resolution for higher resolution use cases.
To view included DPM per series, query the grafanacloud_org_metrics_included_dpm_per_series metric in the grafanacloud-usage data source.
Billing calculations
Your usage is determined by two factors, both measured at the 95th percentile:
- The number of active series
- The number of data points per minute (DPM)
If your average DPM per active series is greater than the included DPM, your usage is based on total DPM.
The following examples show pricing calculations for a Grafana Cloud Pro account. For actual cost values, refer to Grafana Cloud pricing:
- Scenario A: 50,000 active series at a 60-second scrape interval (1 DPM):
50,000 active series * (1 DPM / 1 DPM included) * $COST_PER_ACTIVE_SERIES / 1000 active series) = $YOUR_COST / month - Scenario B: 50,000 active series at a 30-second scrape interval (2 DPM):
50,000 active series * (2 DPM / 1 DPM included) * $COST_PER_ACTIVE_SERIES / 1000 active series) = $YOUR_COST / month
As your data needs grow, Grafana can provide volume-based discounts. Contact us for more information about upgrading to a paid plan.
Usage and cost calculations
The following sections show usage and cost calculations in pseudo-PromQL.
Active series:
active_series = quantile_over_time(0.95, sum by (id)(grafanacloud_instance_active_series < Inf)[30d:])DPM:
total_dpm = quantile_over_time(0.95, sum by (id)(grafanacloud_instance_samples_per_second < Inf)[30d:]) * 60Total usage:
usage = max(active_series, total_dpm/included_dpm)Total cost:
cost = (usage/1000) * $COST_PER_ACTIVE_SERIES95th percentile billing
For each billing period, Grafana Cloud bills you based on the 95th percentile of the active series and total DPM it tracks. This helps you avoid getting billed for unexpected or temporary spikes in usage, such as when you first configure Prometheus or Grafana Alloy.
In other words, Grafana Cloud forgives the top five percent of usage time in each monthly billing period, which is roughly the top 36 hours assuming a 720 hour month (0.05 * 720 = 36).
For example, if you normally send around 6,000 active series but spike to 30,000 active series for a total of 24 hours in a month, you’re still only billed at the rate of 6,000 active series.
Prometheus time series
A Prometheus time series is a list of timestamp and value pairs, or samples, identified by a metric name and zero or more pairs of label names and label values.
For example, consider the following output from a Prometheus metrics exporter:
node_cpu_seconds_total{host="host1",cpu="0",mode="user"}
node_cpu_seconds_total{host="host1",cpu="1",mode="user"}This output contains two time series:
- The metric name is
node_cpu_seconds_total. - The label names are
host,cpu, andmode. - The label values are
host1,0or1, anduser.
There are two time series because the cpu label value differs, even though host and mode are the same. When you scrape a target and it generates a sample, the sample has a specific timestamp and measured value. Scraping the same target again, for example one minute later, creates a second data point in the same series with a new timestamp and value.
Metrics usage can ramp up quickly when a metric has many different combinations of labels. This is called high cardinality, and it’s best to avoid spikes in cardinality. For example, with 6 CPU modes, 10 hosts, and 4 CPUs, node_cpu_seconds_total counts as 6*10*4, or 240 active series. At a 15-second scrape interval, this produces a DPM per series of 4, or a total DPM of 4*240=960 data points.
You can read a detailed explanation of the Prometheus data model in the Prometheus documentation.
Prometheus native histograms
Prometheus native histograms are a data type that lets you produce, store, and query high resolution histograms.
Pricing for time series with native histograms depends on the number of buckets used to represent your data distribution. Unlike classic histograms, which use a predefined number of buckets, native histograms provision the number of buckets automatically. The number of active buckets is then counted toward a billable series with a ratio of 0.25, instead of counting the active series itself. As a result, for the same cost, you can use four times as many buckets for native histograms as for classic histograms.
To assess and limit the number of buckets used in native histograms, refer to Analyze the cardinality of native histograms.
Graphite time series
For Graphite, unique time series are equivalent to metric paths. For example, the following Graphite output contains eight unique time series:
collect.host1.cpu-0.cpu-idle
collect.host1.cpu-0.cpu-user
collect.host1.cpu-0.cpu-wait
collect.host1.cpu-0.cpu-system
collect.host2.cpu-3.cpu-idle
collect.host2.cpu-3.cpu-user
collect.host2.cpu-3.cpu-wait
collect.host2.cpu-3.cpu-systemIf you use Graphite tags, the following output also contains eight unique time series:
collect.cpu;host=host1;cpu=0;mode=idle
collect.cpu;host=host1;cpu=0;mode=user
collect.cpu;host=host1;cpu=0;mode=wait
collect.cpu;host=host1;cpu=0;mode=system
collect.cpu;host=host2;cpu=3;mode=idle
collect.cpu;host=host2;cpu=3;mode=user
collect.cpu;host=host2;cpu=3;mode=wait
collect.cpu;host=host2;cpu=3;mode=systemFor more information about Graphite tags, refer to Graphite tags.


