---
title: "Grafana Alerting"
description: "Grafana-Alerting-Benachrichtigungen über einen Webhook-Contact-Point an Uptimeify Incident Management senden, abgebildet aus dem ersten Alarm der Gruppe."
---

Uptimeify bildet mit dem Grafana-Preset die Payload eines Grafana-Alerting-Webhook-Contact-Points direkt ab: Alarmname, Schweregrad-Label, Status und Instanz werden aus dem ersten Alarm der Benachrichtigungsgruppe vorab gemappt.

## 1. Alert Source in Uptimeify anlegen

Gehe zu **Incident Management → Alert Sources → Neu**, wähle das **Grafana**-Preset, vergib einen Namen und lege die Source an. Kopiere auf dem Erfolgsbildschirm die Ingest-URL (`https://deine-domain/api/im/ingest/<token>`). Sie wird nur einmal angezeigt und danach nie wieder im Klartext eingeblendet. Solltest du sie verlieren, rotiere den Token im Tab **Einstellungen** der Source.

## 2. Webhook-Contact-Point in Grafana anlegen

1. Gehe in Grafana zu **Alerting → Contact points** und klicke auf **Add contact point**.
2. Vergib einen Namen (z. B. `uptimeify`) und setze **Integration** auf **Webhook**.
3. Setze die **URL** auf die in Schritt 1 kopierte Ingest-URL und belasse die **HTTP-Methode** bei `POST`.
4. Belasse die Payload bei Grafanas Standard-Webhook-Body. Das Uptimeify-Preset liest die Standardfelder (`alerts[]`, `status`, `commonLabels`, …), die Grafana ohnehin sendet. Speichere den Contact Point.

## 3. Alarme zum Contact Point routen

Ein Contact Point erhält erst dann Benachrichtigungen, wenn eine **Notification Policy** dorthin routet:

1. Gehe zu **Alerting → Notification policies**.
2. Richte entweder die **Default Policy** auf deinen neuen Contact Point aus (jeder Alarm wird dorthin geroutet), oder füge eine verschachtelte Policy mit einem Label-Matcher hinzu (z. B. `severity =~ ".+"`), die passende Alarme dorthin routet.
3. Speichern. Grafana ruft den Webhook jetzt auf, sobald eine Alarmregel, die dieser Policy entspricht, auslöst oder sich auflöst.

## Standard-Feld-Mapping

Grafana gruppiert Alarme in eine Benachrichtigung; das Preset liest alle folgenden Werte aus dem **ersten Alarm** (`alerts[0]`) dieser Gruppe, für den Titel mit Fallback auf das übergeordnete `title`-Feld:

| Grafana-Feld | Normalisiertes Feld |
|---|---|
| `alerts[0].labels.alertname` (Fallback auf das übergeordnete `title`) | Titel |
| `alerts[0].labels.severity` | Schweregrad (über die Zuordnung unten) |
| `alerts[0].status` | Status: `resolved` löst den Alarm auf, alles andere (typischerweise `firing`) hält ihn offen |
| `alerts[0].labels.instance` | Host |
| `alerts[0].fingerprint` | Dedup-Key: Grafanas eigene stabile Identität pro Alarm |

### Schweregrad-Zuordnung

Grafana hat kein eingebautes `severity`-Label. Das funktioniert nur, wenn deine Alarmregeln selbst eines setzen (z. B. über ein `severity`-Label an der Regel):

| Grafana-Label `severity` | Uptimeify-Schweregrad |
|---|---|
| `critical` | `sev1` |
| `high` | `sev2` |
| `warning` | `sev3` |
| `info` | `sev4` |

Setzen deine Alarmregeln kein `severity`-Label, fällt jeder Alarm auf den in der Source konfigurierten Standard-Schweregrad zurück.

## Beispiel-Payload

So sieht die Payload aus, die das Grafana-Preset von Uptimeify erwartet:

```json
{
  "receiver": "uptimeify-webhook",
  "status": "firing",
  "orgId": 1,
  "alerts": [
    {
      "status": "firing",
      "labels": { "alertname": "HighCPU", "severity": "critical", "instance": "server1:9090" },
      "annotations": { "summary": "CPU usage above 90% on server1" },
      "startsAt": "2026-07-17T12:00:00Z",
      "endsAt": "0001-01-01T00:00:00Z",
      "generatorURL": "https://grafana.example.com/alerting/grafana/abc123/view",
      "fingerprint": "8f3b1c9a2d4e5f60",
      "silenceURL": "https://grafana.example.com/alerting/silence/new",
      "dashboardURL": "https://grafana.example.com/d/abc123",
      "panelURL": "https://grafana.example.com/d/abc123?viewPanel=2"
    }
  ],
  "groupLabels": { "alertname": "HighCPU" },
  "commonLabels": { "alertname": "HighCPU", "severity": "critical" },
  "commonAnnotations": { "summary": "CPU usage above 90% on server1" },
  "externalURL": "https://grafana.example.com/",
  "version": "1",
  "groupKey": "{}/{alertname=\"HighCPU\"}",
  "truncatedAlerts": 0,
  "title": "[FIRING:1] HighCPU",
  "state": "alerting",
  "message": "CPU usage above 90% on server1"
}
```

Du kannst genau diese Payload über den Tab **Payload Mapping** im Dashboard gegen das Mapping deiner Source senden, um den Aufbau zu prüfen, bevor du eine echte Notification Policy verbindest.
