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.

来源信息

仓库
cloudflare/cloudflare-prometheus-exporter
最近来源活动
2026年3月4日 22:22
检测到的 SKILL.md 语言
英语
星标
184
分支
43

安装方式

默认使用会先检查来源的 Prompt;你也可以切换为直接命令,或下载本地副本。

检查来源文件

决定是否安装前,请先阅读 SKILL.md,以及 SkillsMP 当前展示的配套文件。

文件资源管理器
4 个文件

正在显示 SKILL.md

SKILL.md
来源说明 · 只读预览
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 |
在 GitHub 查看