From netdata-skills
Use when migrating alerting rules from VictoriaMetrics (vmalert), Prometheus, Thanos Ruler, or Mimir/Cortex to Netdata health alerts. These tools share the same Prometheus alerting-rule YAML and PromQL/MetricsQL, so the method is identical. Covers the stock-first decision (Netdata already ships alerts for most common signals), the translation methodology from PromQL expressions to Netdata lookup/calc/warn/crit on a chart context, the constructs that do not map cleanly (cross-metric joins, predict_linear, histogram_quantile, fleet aggregations, absent), notification-routing parity with Alertmanager (agent roles and Netdata Cloud), and automatic verification over MCP. Pairs with netdata-mcp-integration to connect and netdata-custom-collector when a rule alerts on a metric Netdata does not yet collect.
How this skill is triggered — by the user, by Claude, or both
Slash command
/netdata-skills:netdata-alert-migrationThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
This skill migrates alerting rules to Netdata's health engine. The
This skill migrates alerting rules to Netdata's health engine. The
source is almost always a Prometheus-style rule set: VictoriaMetrics
vmalert, Prometheus itself, Thanos Ruler, or Mimir/Cortex. They all
consume the same alerting-rule YAML and the same PromQL/MetricsQL
query language, so one method covers all of them. Examples here lead
with vmalert because that is the common request.
The work is not a transpile. The two systems have different models: a PromQL rule queries arbitrary time series by metric name and label matchers, while a Netdata alert attaches to a chart context and aggregates that chart's dimensions over a time window. There is no one-to-one converter. This skill is a translation methodology, and a large part of it is recognizing what you should not translate at all.
vmalert rules file or a Prometheus
*.rules.yaml and asks how to get the same alerts in Netdata.rules/stock-alert-equivalents.md.name{label=...}; Netdata
binds an alert to a context (on:) and reads that chart's
dimensions through lookup:. A per-series Prometheus alert usually
becomes a Netdata template: (one alert per chart instance) plus
lookup ... of <dimensions>. The target DSL is in
rules/netdata-health-alerts.md.for:
maps to lookup over a window plus warn:/crit: with the
hysteresis idiom and an optional delay:. The field-by-field
mapping and worked examples are in
rules/translate-rules.md.on/group_left),
forecasting (predict_linear), histogram_quantile, fleet-wide
aggregations (sum/topk by), and absent()/up == 0 have no
per-chart equivalent. Each needs a strategy, not a transcription.
See rules/hard-cases.md.netdata-custom-collector skill) or keep that subset on vmalert.expr references a recorded metric, inline that expression.route/receiver maps to Netdata
notification roles (agent) or Netdata Cloud integrations and
silencing rules. Cloud is the closer parity for label-matcher
routing. Some Alertmanager features (group_by, group timing,
inhibit_rules) have no clean equivalent. See
rules/notifications.md.rules/choose-what-to-migrate.md:
stock equivalent, clean translation, hard case, or
metric-not-collected.rules/stock-alert-equivalents.md.
Do not hand-write these.rules/translate-rules.md, using the
DSL reference in
rules/netdata-health-alerts.md.rules/hard-cases.md (native equivalent,
collect-first, redesign, or keep on vmalert). Flag anything that
cannot be reproduced.rules/notifications.md.rules/verify-migration.md: confirm
each alert loaded, attached, and parsed, then trigger a transition
and revert. When a Netdata MCP server is connected, do this without
waiting for the user.for: 5m as if it were exact. Netdata has no for;
approximate it with the lookup window and delay:.families: or charts: lines, or starting from the old
documented DSL. Those keys are silently ignored. Model new alerts
on current stock files.group_by, group timing, or
inhibit_rules. State the gap instead.When a Netdata MCP server is connected, the agent verifies the
migration itself rather than handing the user a checklist. After
netdatacli reload-health, call list_running_alerts to confirm each
translated alert is present and attached (not UNINITIALIZED or
UNDEFINED), cross-check the parsed expression via
GET /api/v1/alarms?all, then deliberately trigger one alert (lower a
threshold), confirm the transition with list_alert_transitions, and
revert. A health file that fails to parse is skipped, not fatal, so a
missing alert means a parse or attach error: check the daemon log
(journalctl -u netdata). Full procedure in
rules/verify-migration.md.
rules/choose-what-to-migrate.mdrules/stock-alert-equivalents.mdrules/netdata-health-alerts.mdrules/translate-rules.mdrules/hard-cases.mdrules/notifications.mdrules/verify-migration.mdsrc/health/REFERENCE.md in the Netdata repo.Searches MemPalace before answering questions about past work, people, projects, or prior decisions. Returns verbatim stored content instead of guessing from model memory.
Guides Payload CMS config (payload.config.ts), collections, fields, hooks, access control, APIs. Debugs validation errors, security, relationships, queries, transactions, hook behavior.
Implements vector databases with Pinecone, Weaviate, Qdrant, Milvus, pgvector for semantic search, RAG, recommendations, and similarity systems. Optimizes embeddings, indexing, and hybrid search.
npx claudepluginhub netdata/skills --plugin netdata-skills