From grafana-app-sdk
Configures Grafana Alerting, IRM, and SLOs end-to-end: alert rules, contact points, notification policies, on-call schedules, incident integrations, and multi-window burn-rate alerts.
How this skill is triggered — by the user, by Claude, or both
Slash command
/grafana-app-sdk:alerting-irmThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
> **Docs**: https://grafana.com/docs/grafana/latest/alerting.md
Create contact points (where notifications go):
curl -X POST https://grafana.example.com/api/v1/provisioning/contact-points \
-H 'Authorization: Bearer <token>' -H 'Content-Type: application/json' \
-d @contact-points.json
Verify:
curl https://grafana.example.com/api/v1/provisioning/contact-points \
-H 'Authorization: Bearer <token>' | jq '.[].name'
Add notification policies (which alerts go where) — see § Notification policies below for the matchers pattern.
Write the alert rule — pick the type:
Verify routing before going live:
# Force-fire a test alert from the rule's UI, then check Alertmanager's view
curl https://grafana.example.com/api/alertmanager/grafana/api/v2/alerts \
-H 'Authorization: Bearer <token>' | jq '.[] | {alertname: .labels.alertname, receiver: .receivers}'
The expected receiver should appear. If the wrong receiver appears, re-check the policy's matchers.
# provisioning/alerting/contact_points.yaml
apiVersion: 1
contactPoints:
- orgId: 1
name: pagerduty-critical
receivers:
- uid: pd-receiver
type: pagerduty
settings:
integrationKey: YOUR_PAGERDUTY_KEY
severity: critical
- orgId: 1
name: slack-alerts
receivers:
- uid: slack-receiver
type: slack
settings:
url: https://hooks.slack.com/services/YOUR/WEBHOOK/URL
channel: '#alerts'
For email, webhook, Teams, Telegram, OnCall, and other receiver types, see references/alerting.md § Contact point receiver types.
Hierarchical routing tree with label matchers:
# provisioning/alerting/notification_policies.yaml
apiVersion: 1
policies:
- orgId: 1
receiver: default-receiver
group_by: ['alertname', 'cluster', 'service']
group_wait: 30s
group_interval: 5m
repeat_interval: 12h
routes:
# Critical alerts → PagerDuty
- receiver: pagerduty-critical
matchers:
- severity = critical
group_wait: 10s
repeat_interval: 4h
# Platform team → Slack, but page on critical
- receiver: slack-alerts
matchers:
- team = platform
routes:
- receiver: pagerduty-critical
matchers:
- severity = critical
# Everything else → email
- receiver: email-alerts
matchers:
- severity =~ "warning|info"
Suppress notifications for matching alerts without stopping evaluation:
curl -X POST https://grafana.example.com/api/alertmanager/grafana/api/v2/silences \
-H 'Authorization: Bearer <token>' \
-H 'Content-Type: application/json' \
-d '{
"matchers": [
{"name": "alertname", "value": "HighErrorRate", "isRegex": false},
{"name": "env", "value": "staging", "isRegex": false}
],
"startsAt": "2024-01-01T00:00:00Z",
"endsAt": "2024-01-01T02:00:00Z",
"comment": "Maintenance window",
"createdBy": "admin"
}'
# Verify it was created
curl https://grafana.example.com/api/alertmanager/grafana/api/v2/silences \
-H 'Authorization: Bearer <token>' | jq '.[] | select(.status.state == "active")'
| State | Description |
|---|---|
| Normal | Condition not met |
| Pending | Condition met, waiting for for duration |
| Firing | Condition met for full for duration |
| NoData | Query returned no data |
| Error | Query/evaluation error |
| Recovering | Was firing, condition no longer met |
provisioning/alerting/
├── alert_rules.yaml # Alert and recording rules
├── contact_points.yaml # Notification destinations
├── notification_policies.yaml # Routing tree
├── templates.yaml # Message templates
└── mute_timings.yaml # Recurring mute windows
Add X-Disable-Provenance: true to keep resources editable in the UI after API provisioning:
curl -X PUT https://grafana.example.com/api/v1/provisioning/policies \
-H 'Authorization: Bearer <token>' \
-H 'X-Disable-Provenance: true' \
-H 'Content-Type: application/json' \
-d @policy.json
curl -X POST https://grafana.example.com/api/v1/provisioning/alert-rules \
-H 'Authorization: Bearer <token>' \
-H 'X-Disable-Provenance: true' \
-H 'Content-Type: application/json' \
-d @rule.json
references/alerting.md — full alert rule YAML (Grafana-managed / Prometheus / Loki) + notification templatesreferences/slo.md — generated SLO recording rules + multi-window burn-rate alert pattern + validation stepsreferences/irm.md — IRM capabilities, integration sources, Alerting → IRM routing + verification + common failure modesnpx claudepluginhub grafana/skills --plugin grafana-app-sdkSets up and manages Grafana OnCall and IRM: alert routing, escalation chains, on-call schedules, integrations with Alertmanager, Grafana Alerting, and Slack.
Creates alerting rules for Prometheus, Grafana, and PagerDuty with thresholds, routing, escalation, and runbooks. Useful for performance monitoring setup and refinement.
Writes SLO-based alert rules with burn-rate thresholds and paired runbooks for Prometheus, Grafana, Datadog, CloudWatch. Outputs configs when asked to set up alerts, create runbooks, or define SLOs.