Skip to main content

prometheus-anchored-query

Reusable wrapper for the knowledge-base-first PromQL pattern. Operator names the metric / question / time range. Skill calls query_observability_knowledge_base first to confirm labels + cardinality, derives the safe narrow PromQL, runs it via the Prometheus MCP, and saves the raw payload to a provenance-bearing bundle per the perf-lake-contract. Workload-agnostic. Replaces the ad-hoc "run PromQL and hope" pattern with a disciplined anchor-then-query workflow. Triggers on "prometheus query", "promql query", "anchored query", "knowledge-base query", "query the Prometheus MCP", "what's the prometheus metric for", "save prometheus payload", or any combination of "promql / prometheus / metric / query" with "anchored / knowledge-base / safe / provenance".

معلومات المصدر

المستودع
cfregly/claude-gpu-perf-tune
آخر نشاط في المصدر
١٤ يونيو ٢٠٢٦ في ٠٣:٣٣
لغة SKILL.md المكتشفة
الإنجليزية
النجوم
٠
التفرعات
٠

خيارات التثبيت

يُحدَّد Prompt الذي يراجع المصدر أولًا بشكل افتراضي. يمكنك التبديل إلى أمر مباشر أو تنزيل نسخة محلية.

مراجعة ملفات المصدر

اقرأ SKILL.md وأي ملفات مرافقة يعرضها SkillsMP قبل أن تقرر التثبيت.

عرض SKILL.md

SKILL.md
تعليمات المصدر · معاينة للقراءة فقط
name
prometheus-anchored-query
last_validated
2026-05-21T00:00:00.000Z
description
Reusable wrapper for the knowledge-base-first PromQL pattern. Operator names the metric / question / time range. Skill calls query_observability_knowledge_base first to confirm labels + cardinality, derives the safe narrow PromQL, runs it via the Prometheus MCP, and saves the raw payload to a provenance-bearing bundle per the perf-lake-contract. Workload-agnostic. Replaces the ad-hoc "run PromQL and hope" pattern with a disciplined anchor-then-query workflow. Triggers on "prometheus query", "promql query", "anchored query", "knowledge-base query", "query the Prometheus MCP", "what's the prometheus metric for", "save prometheus payload", or any combination of "promql / prometheus / metric / query" with "anchored / knowledge-base / safe / provenance".
allowed-tools
["mcp__prometheus_mcp__query_observability_knowledge_base","mcp__prometheus_mcp__query_prometheus","mcp__prometheus_mcp__list_prometheus_label_values","mcp__prometheus_mcp__list_prometheus_label_names","mcp__prometheus_mcp__list_prometheus_metric_names","mcp__prometheus_mcp__list_prometheus_metric_metadata","mcp__prometheus_mcp__list_datasources","mcp__prometheus_mcp__get_datasource","Bash(date:*)","Bash(jq:*)","Read","Write"]
# prometheus-anchored-query ## Purpose Make ad-hoc PromQL queries **safe by default** by wrapping the "Contention And O11y Pattern" discipline (anchor labels in the knowledge base FIRST, then run the query) as a reusable skill. Saves the raw payload to a provenance-bearing bundle so future queries can replay the same shape, and so the perf-lake-contract is honored without operator effort. This skill exists because PromQL is easy to write **wrong** at cluster scale: a missing label selector turns a 100-series query into a 10,000-series query that overloads the Prometheus backend. The bundled server's [`mcp-composition.md`](/plugins/profile-and-optimize/server/docs/mcp-composition.md) Contention And O11y Pattern (step 3) makes the knowledge-base-first call mandatory. This skill enforces it. Use it for ad-hoc questions ("what's the IB traffic on `<node>` right now?" / "is the dataloader being starved?" / "what's the median dcgm_xid rate across a partition?"). ## When to use - Operator has a question that maps to a PromQL query but doesn't know the exact labels yet. - Operator wants to save a Prometheus payload to disk with provenance (for evidence bundles, post-incident write-ups, share-with-team artifacts). - Operator wants to confirm a metric exists + has the expected cardinality before writing a dashboard panel for it. Do **not** use this skill for: - Already-vetted queries - call `mcp__prometheus_mcp__query_prometheus` directly (or run them from whatever dashboarding UI they live in). The anchor pass adds nothing when the query shape is already known. - Log queries - this skill emits PromQL only. The MCP server also fronts a log datasource via `query_loki_logs`, but anchored log queries are out of scope here. ## Example prompts - "What's the IB traffic on these 8 nodes for the last hour?" - "Is dataloader starvation showing up in dcgm_gpu_utilization for the cohort I just ran?" - "Save the dcgm_xid trajectory across the gb300 partition for the last 24h." - "What's the median GPU temp on this rack right now?" - "Anchored PromQL for nccl_perf_bandwidth across the cohort." - `/prometheus-anchored-query --question "IB tx bytes by node for <partition> last 1h" --time-range "now-1h..now"` - `/prometheus-anchored-query --metric dcgm_gpu_temp --labels '{partition="gb300"}' --time-range "now-24h..now"` ### Inference-perf example The [`inference-perf-bench`](/plugins/profile-and-optimize/skills/inference-perf-bench/SKILL.md) workflow scrapes four canonical vLLM Prometheus metrics pre/post each benchmark run: | Metric | What it answers | | --- | --- | | `vllm:prefix_cache_hit_rate` | KV cache hit rate during the run (delta pre vs post) | | `vllm:gpu_cache_usage_perc` | GPU cache utilization peak | | `vllm:num_requests_running` | Concurrent requests peak | | `vllm:avg_generation_throughput_toks_per_s` | Generation throughput | Operators replaying a perf-bench run via this skill should anchor against these four metric names first (knowledge-base call confirms cardinality + datasource UID), then run the narrow PromQL with `{model_name="<served-name>", namespace="<ns>"}` selectors. See [`inference-perf-bench`](/plugins/profile-and-optimize/skills/inference-perf-bench/SKILL.md) Phase 4 / 7 for the in-pod scrape pattern this skill complements at the Prometheus MCP layer. ## Prerequisites 1. **Prometheus MCP reachable** (`PROMETHEUS_MCP_URL` set). 2. **Operator question or metric+labels** - one of: - Free-form question (skill derives metric + labels via knowledge base). - Explicit `--metric <name> --labels <json>`. 3. **Time range** - `--time-range "now-Nh..now"` or absolute UTC range. Default `now-1h..now`. 4. **`PROFILE_AND_OPTIMIZE_REPO_ROOT`** for the payload bundle path (falls back to `${PWD}/prometheus-bundles/<run-id>/`). ## Interaction style Iterative. The whole point of the skill is the "anchor first, then query" discipline. Pause after the knowledge-base call to surface the proposed PromQL before running it. ## Workflow ### Phase 0: resolve the question If operator provided a free-form question, restate the question + the proposed metric / labels in one sentence. Get confirmation. If operator provided explicit metric + labels, proceed. ### Phase 1: knowledge-base anchor ```text mcp__prometheus_mcp__query_observability_knowledge_base with: query: "<one-line question or metric+context>" user_prompt: "<operator's original prompt>" ``` The knowledge-base response tells us: - Whether the metric exists in the Prometheus MCP's catalog. - The available labels for that metric. - The expected cardinality (so we don't accidentally select 100k series). - The canonical datasource UID for this metric on this cluster (the MCP can front several datasources - e.g. per-cluster Prometheus instances plus a log backend - so every query tool takes an explicit `datasourceUid`). - Any noted caveats (sampling rate, retention, legacy renames). If the knowledge base does NOT cover the metric: stop. Report what's missing. Per [`mcp-composition.md`](/plugins/profile-and-optimize/server/docs/mcp-composition.md) "Contention And O11y Pattern" step 3, running uncovered PromQL is unsafe. ### Phase 2: validate labels exist For each label the proposed query selects on: ```text mcp__prometheus_mcp__list_prometheus_label_values with: datasourceUid: "<from knowledge-base anchor in Phase 1>" labelName: "<label>" matches: ["<metric>{<other-selectors>}"] user_prompt: "<operator's original prompt>" ``` If a label or value doesn't exist, the query would be silently empty. Stop and surface. ### Phase 3: emit the PromQL Construct the narrow PromQL using only knowledge-base-confirmed labels and the operator's `--time-range`. Print it back: ```text Proposed PromQL: <full query> Datasource UID: <from knowledge base> Time range: <start> .. <end> Expected series count: ~<from knowledge base cardinality estimate> ``` Ask: "Run this query?" Do not auto-advance. ### Phase 4: run + save After confirmation: ```text mcp__prometheus_mcp__query_prometheus with: datasourceUid: "<from-anchor>" expr: "<promql>" queryType: "range" startTime: "<start>" endTime: "<end>" stepSeconds: <resolution-seconds> user_prompt: "<operator's original prompt>" ``` (Use `queryType: "instant"` + only `endTime` for a single-point query. Drop `startTime` / `stepSeconds` in that case.) Save the raw payload to: ``` ${PROFILE_AND_OPTIMIZE_REPO_ROOT}/experiments/artifacts/prometheus-bundles/<run-id>/ SOURCE.md # operator + question + cluster + UTC-ts query.promql # the exact PromQL run query.json # the exact request JSON response.json # the raw Prometheus response (saved verbatim) summary.md # human-readable summary: series count, range, top-5 anomalies knowledge-base-anchor.json # the knowledge-base response (provenance for the label discipline) ``` ### Phase 5: report Print: - **Series count** + **time-bucket count** (sanity check: did we get the cardinality the knowledge base predicted?). - **Top 5 anomalies** (highest / lowest values, recent step-deltas). - **Bundle path** for the saved payload. ## Full-context reporting (no bare numbers) Per `docs/METHODOLOGY.md` "Full-context reporting": every number this skill emits (throughput, latency, TPOT/ITL, BW, %SoL, speedup, efficiency, goodput, acceptance rate, scaling efficiency, thermal/failure rate - whatever it reports) MUST carry its full measurement-context descriptor, and every comparison MUST be matched on it. A bare number is a defect - it cannot set a default, ship a config, or appear in a report. - **Identity:** model (+HF path), hardware (exact ceiling token `GB300`/`B200`), quant, kv-cache dtype. - **Parallelism:** TP, DP (replicas), PP, EP, parallel_strategy. - **Serving cfg:** max-num-seqs, max-num-batched-tokens, gpu-memory-utilization, max-model-len, cudagraph_mode/enforce_eager, async_scheduling, prefix-caching. - **Workload:** dataset, ISL/OSL (or mean in/out tokens), concurrency, num-prompts. - **Regime:** warm vs cold. Latency vs throughput tier. - **Stack:** image/vllm commit, bench backend, serving engine. - **Grounding:** `%SoL` (+ ceiling key from `configs/sol-ceilings.yaml` - never inline a peak), sol_rigor (L1-L4), trials n (mean±std), same-node, baseline named. (If the metric is not roofline-bound - e.g. accuracy/acceptance - omit `%SoL` but keep the rest of the descriptor.) - **Per-number exact shape (no smoothing):** when reporting more than one number, keep EACH with its own exact shape (ISL/OSL, concurrency, dataset, regime) - never normalize a set to one uniform descriptor that hides per-point variation (e.g. `c=1 @ ISL1024/OSL256` + `c=64 @ ISL4096/OSL512`, NOT one shared "random"). ## Next lever / BREAKTHROUGH (Grind Mandate) If this skill emits a measured result, its output MUST end by naming the **next perf lever**, its **expected unlock** (direction + rough magnitude), and the **gate** that proves/refutes it, per `docs/METHODOLOGY.md` "Always be grinding". A measured win is the new floor, not the finish -- so **do everything we can to find the next BREAKTHROUGH**: the highest-EV unlock toward Speed-of-Light (a new champion / kernel / router / quant / parallelism / spec-decode win, or an unblocked stack), not just the next micro-lever. Rank the candidate breakthrough levers by value x cost (the GRIND FRONTIER, `perftunereport value_view`), pursue the top, bank the rest with evidence. Record WHY a refuted lever loses, update the standing frontier in the active bundle's `HANDOFF.md`. Never conclude "exhausted/optimal/done" without an explicit next-lever frontier (an empty frontier AND a documented SoL wall only). Delete this section ONLY if the skill produces no measurements. ## Safety - **Knowledge base first is mandatory.** Phase 1 cannot be skipped - fail fast, no silent fallbacks. The whole point of the skill is to enforce that discipline. - **No high-cardinality queries.** If the knowledge base reports the proposed query would return >10k series, the skill refuses to run it. Operator narrows the selector and retries. - **Raw payload preservation.** Per [`perf-lake-contract.md`](/plugins/profile-and-optimize/server/docs/perf-lake-contract.md), every saved query records the datasource UID, the exact PromQL, the time range, the response time, and the source label. - **Read-only.** The skill never mutates state through the Prometheus MCP. Never creates dashboards / annotations / alerts (those would need `create_*` tools which are not in `allowed-tools`). ## Known limitations - **The agent's MCP token may lack `datasources:read`.** If `mcp__prometheus_mcp__query_prometheus` returns `403 datasources:read on <uid>` for every Prometheus datasource UID, Phases 2-4 of this skill are blocked end-to-end. **Workaround:** the operator runs the exact PromQL produced in Phase 3 from an authenticated shell or the Prometheus web UI and pastes the response JSON into `${PROFILE_AND_OPTIMIZE_REPO_ROOT}/experiments/artifacts/prometheus-bundles/<run-id>/response.json`. The skill's Phase 5 summary still works against the operator-pasted payload. ## Source-of-truth references - [`server/docs/mcp-composition.md`](/plugins/profile-and-optimize/server/docs/mcp-composition.md) - "Contention And O11y Pattern" (the workflow this skill generalizes). - [`server/docs/perf-lake-contract.md`](/plugins/profile-and-optimize/server/docs/perf-lake-contract.md) - raw-payload provenance contract. - [`docs/METHODOLOGY.md`](/docs/METHODOLOGY.md) - measurement canon (full-context reporting, verdict rigor).
عرض على GitHub