Skip to main content
skill CX Codex

dpm-finder — Claude Code skill: what it does, how to install

Identifies high-cardinality Prometheus metrics driving up Grafana Cloud bills by ranking them by Data Points per Minute.

Install into Claude Code · Skills CLI (Vercel) All methods and platforms ↓
npx skills add grafana/skills --skill dpm-finder -a claude-code
Open on GitHub

What dpm-finder does

This skill guides the agent through running dpm-finder, a Grafana Professional Services CLI tool. It scans a Prometheus endpoint and ranks active metrics by Data Points per Minute (DPM). The output breaks down cardinality per label set, helping pinpoint noisy metric series or compare cardinality shifts around recording rules.

Running the tool requires Python 3.9+ and an API key with the metrics:read scope. The Prometheus username must be your numeric stack ID. Without this numeric ID, requests fail immediately with HTTP 401. The utility can calculate costs via the --cost-per-1000-series flag and supports a standalone Prometheus exporter mode. Multi-stack scans should stay within three concurrent tasks to avoid hitting rate limits.

What it helps with

  • rank Prometheus metrics by Data Points per Minute
  • pinpoint noisy labels causing cardinality spikes
  • estimate series costs with pricing flags
  • compare metric cardinality before and after recording rules

Example prompts for the agent

  • Find which Prometheus metrics generate the highest DPM in my Grafana Cloud stack.
  • Run dpm-finder to get the top 10 cardinality offenders in JSON format.
  • Scan my Prometheus endpoint for metrics above 2.0 DPM with label breakdowns.

How to install dpm-finder

1Skills CLI (Vercel)

npx skills add grafana/skills --skill dpm-finder -a claude-code

2Manually: put the files in place

~/.claude/skills/dpm-finder/SKILL.md

Copy the whole skill folder; for one project use .claude/skills/dpm-finder/

Step by step, with commands for each platform: How to install skills in Claude Code: five ways

Questions about dpm-finder

How to install dpm-finder in Claude Code?

Run npx skills add grafana/skills --skill dpm-finder -a claude-code in your terminal.

What does dpm-finder do?

It ranks Prometheus metrics by Data Points per Minute and details active label combinations to pinpoint what inflates your Grafana Cloud spend.

Why does dpm-finder return a 401 or 403 error?

This happens when the API key lacks the metrics:read scope or when the username is not set to the numeric stack ID.

Source text

SKILL.md · Apache-2.0
---
name: dpm-finder
license: Apache-2.0
description: Find the Prometheus metrics that drive your Grafana Cloud bill. `dpm-finder` is a Grafana Professional Services CLI that ranks metrics by Data Points per Minute (DPM) with per-label-set breakdown, optional `--cost-per-1000-series` pricing, and a Prometheus-exporter mode. Use when investigating high Grafana Cloud spend, hunting noisy / high-cardinality metrics, comparing pre/post recording-rule cardinality, or feeding cost data into dashboards — even when the user says "why is my Mimir bill so high?", "find the biggest metrics", "cardinality offenders", or "optimize Prometheus cost" without naming dpm-finder.
---

# dpm-finder

Grafana PS tool ranking Prometheus metrics by DPM with per-series breakdown. Source: https://github.com/grafana-ps/dpm-finder

## Prerequisites

- Python 3.9+
- A Grafana Cloud Prometheus endpoint URL + numeric stack ID + API key (`glc_…`, `metrics:read` scope)

## Common Workflows

### One-shot analysis (most common)

```bash
# 1. Clone + venv + install
git clone https://github.com/grafana-ps/dpm-finder.git
cd dpm-finder
python3 -m venv venv && source venv/bin/activate
pip install -r requirements.txt

# 2. Configure creds — copy .env_example → .env and fill in:
#    PROMETHEUS_ENDPOINT  https://prometheus-<cluster_slug>.grafana.net  (NOTHING after .net)
#    PROMETHEUS_USERNAME  <numeric stack id>
#    PROMETHEUS_API_KEY   glc_…

# 3. Verify creds before scanning — should return >0 series count
curl -s -u "$PROMETHEUS_USERNAME:$PROMETHEUS_API_KEY" \
  "$PROMETHEUS_ENDPOINT/api/v1/label/__name__/values" | jq '.data | length'

# 4. Run the scan (10-min lookback, 2.0 DPM minimum, top output)
./dpm-finder.py -f json -m 2.0 -t 8 --timeout 120 -l 10

# 5. Read the result — top 10 metrics by DPM
jq -r '.metrics | sort_by(-.dpm) | .[:10][] | "\(.dpm)\t\(.series_count)\t\(.metric_name)"' metric_rates.json
```

If step 5 is empty, lower `-m` or confirm the endpoint URL has no trailing path after `.net`.

### Discover stack details with `gcx`

If [gcx](https://github.com/grafana/gcx) is installed it can derive the endpoint + username:

```bash
gcx config check          # active stack context
gcx config list-contexts  # all configured stacks
gcx config view           # full config with endpoints
```

The Prometheus endpoint pattern is `https://prometheus-{cluster_slug}.grafana.net`. Username is the numeric stack ID.

Without gcx: look up in the Grafana Cloud portal, or query `grafanacloud_instance_info{name=~"STACK_NAME.*"}` on the usage datasource.

### Multi-stack runs

Limit to **max 3 concurrent** runs to avoid GCloud rate limits. Batch the stacks and wait for each batch before the next.

## Interpreting results

- **DPM** = max data points per minute across that metric's series
- **series_count** = active time-series count for that metric
- **series_detail[]** (JSON / text only) = per-label-combination DPM breakdown — use this to spot the offending label
- Sort by DPM descending → noisiest metrics; combine with `--cost-per-1000-series` to prioritize by spend

## Troubleshooting

- **401 / 403** — API key invalid or missing `metrics:read`; confirm `PROMETHEUS_USERNAME` is the numeric stack ID
- **Timeouts** — bump `--timeout` to 120+ for stacks with thousands of metrics
- **HTTP 422** — metric has aggregation rules; tool warns + skips automatically
- **Empty results** — lower `-m`; verify endpoint has no trailing path
- **Connection errors** — exponential backoff retries up to 10 times; persistent failure usually = network/firewall

## References

- [`references/cli.md`](references/cli.md) — full flag reference, output-format details, exporter mode, Docker invocation, auto-exclusion rules, retry behavior

## Resources

- [dpm-finder GitHub](https://github.com/grafana-ps/dpm-finder)
- [gcx](https://github.com/grafana/gcx)

© grafana · Apache-2.0 · grafana/skills

Similar skills

Everything for DevOps and infrastructure →

From the same set47

Project sponsors

Companies that keep this analytics open
Gold sponsor

Impressions, clicks and code copies — open statistics. We keep the numbers public for the same reason NeBlask itself is public. Become a sponsor