Skip to main content

adding-metrics

Add new Prometheus metrics to the Cloudflare exporter. Use when adding metrics, implementing new GraphQL/REST queries, or extending metric coverage. Covers the full workflow from schema discovery through client implementation and README updates.

Source facts

Repository
cloudflare/cloudflare-prometheus-exporter
Last source activity
March 4, 2026 at 22:22
Detected SKILL.md language
English
Stars
184
Forks
41

Install options

The review-first prompt is selected by default. You can switch to a direct command or download a local copy.

Review the source files

Read SKILL.md and any companion files shown by SkillsMP before deciding whether to install.

File Explorer
4 files

Showing SKILL.md

SKILL.md
Source instructions · Read-only preview
name
adding-metrics
description
Add new Prometheus metrics to the Cloudflare exporter. Use when adding metrics, implementing new GraphQL/REST queries, or extending metric coverage. Covers the full workflow from schema discovery through client implementation and README updates.
# Adding Metrics Guided workflow for adding new Prometheus metrics to the Cloudflare Prometheus Exporter. Derived from patterns in PRs #10, #13, #14, #15, and opencode session `1770403408223-happy-garden`. ## Decision Tree ``` What kind of metric are you adding? | +-- Uses Cloudflare GraphQL API? | | | +-- Scoped to a single account (no zones)? | | -> Account-level GraphQL | | -> See workflow.md, Step A | | | +-- Scoped to zones (needs zoneTag_in)? | -> Zone-level GraphQL | -> See workflow.md, Step B | +-- Uses Cloudflare REST API? -> REST API (zone-scoped DO) -> See workflow.md, Step C ``` ## Quick Reference: Files to Modify | Step | File | Change | |------|------|--------| | 1 | `src/cloudflare/gql/queries.ts` | Add `graphql()` tagged template (skip for REST) | | 2 | `src/cloudflare/queries.ts` | Add to `MetricQueryNameSchema` enum + category arrays | | 3 | `src/cloudflare/client.ts` | Import query, add switch case, implement handler | | 4 | `src/durable-objects/MetricExporter.ts` | Only if special guardrails needed (e.g. allowlists) | | 5 | `README.md` | Add metric docs + update architecture diagram counts | ## Key Conventions - **Metric names**: `cloudflare_<scope>_<thing>_<unit>` -- `_total` for counters, `_seconds` for durations - **Label keys**: `snake_case` always. Normalize accounts via `normalizeAccountName()`, zones via `findZoneName()` - **Counter vs Gauge**: counters for window totals (DO accumulates); gauges for snapshots/rates/ratios - **Null safety**: `noUncheckedIndexedAccess` is on -- null-coalesce everything: `dims?.field ?? ""` - **Empty filter**: Always `return [...metrics].filter(m => m.values.length > 0)` - **Exhaustive switch**: Both dispatch methods use `const _exhaustive: never = query` -- TS errors if case missing ## Reading Order | Task | Files | |------|-------| | Add a metric (full workflow) | workflow.md | | Copy/paste code templates | patterns.md | | Avoid known pitfalls | gotchas.md | ## In This Reference | File | Purpose | |------|---------| | [workflow.md](./references/workflow.md) | Step-by-step checklist per metric category | | [patterns.md](./references/patterns.md) | Code templates for queries, handlers, and MetricDefinitions | | [gotchas.md](./references/gotchas.md) | Pitfalls from real PRs and code reviews |
View on GitHub