Leite Alarm-E-Mails aus jedem Monitoring-Tool, Ticketing-System oder Postfach an eine eigene Empfangsadresse weiter oder route sie dorthin. Uptimeify wandelt sie automatisch in Vorfälle um.
Die Alert Source E-Mail wandelt E-Mails, die du an eine eigene Empfangsadresse weiterleitest oder routest, automatisch in Vorfälle um. Nutze sie für jedes Monitoring- oder Alerting-Tool, das nur per E-Mail benachrichtigen kann (keine Webhook-Option), oder überall dort, wo Alarme ohnehin in einem Postfach landen: ein gemeinsames Ops-Postfach, ein Legacy-Paging-System, ein Anbieter, der nur E-Mail-Benachrichtigungen anbietet.
Anders als die Webhook-Presets auf den anderen Seiten dieses Abschnitts hat eine E-Mail-Source keine JSON-Payload. Sie liest Betreff und Klartext-Body der E-Mail mit einer eigenen Selektor-Sprache aus (siehe unten), nicht mit den Dot-/Bracket-Selector-Pfaden dieser anderen Anleitungen.
1. Alert Source in Uptimeify anlegen
Gehe zu Incident Management → Alert Sources → Neu und wähle die Option E-Mail (neben den Webhook-Presets), vergib einen Namen und lege die Source an. Kopiere auf dem Erfolgsbildschirm die Empfangsadresse. Sie hat die Form <token>@ingest.uptimeify.io und wird nur einmal angezeigt, danach nie wieder im Klartext. Solltest du sie verlieren, rotiere den Token im Tab Einstellungen der Source, um eine neue Adresse zu erhalten.
2. Deine Alarme an die Adresse schicken
Es gibt keinen festen Absender oder Anbieter. Alles, was eine Klartext-E-Mail zustellen kann, funktioniert:
- Trage die Adresse als Benachrichtigungs-/Kontaktziel in einem Monitoring-Tool ein, das nur E-Mail-Alerting unterstützt.
- Richte in deinem Postfach (Gmail, Outlook, ein gemeinsamer Ops-Alias, …) eine Weiterleitungsregel ein, die passende Alarm-E-Mails dorthin weiterleitet.
- Zeige eine bereits bestehende Mail-Routing-Regel oder ein Relay darauf, falls Alarme schon durch eines laufen.
Gelesen wird nur der Klartext-Body. Eine reine HTML-E-Mail ohne Klartext-Teil ergibt für die Selektoren einen leeren Body. Der Betreff steht weiterhin zur Verfügung.
Standard-Feld-Mapping (ohne Konfiguration)
Eine frisch angelegte E-Mail-Source funktioniert ohne weitere Einrichtung mit diesen Vorgaben:
| Feld | Standardquelle | Hinweise |
|---|---|---|
| Titel | Betreff-Header, unverändert | |
| Status | open, außer der Betreff enthält als ganzes Wort resolved, recovered oder cleared (Groß-/Kleinschreibung egal) | Durchsucht wird dafür nur der Betreff, nie der Body, damit der Fließtext eines noch aktiven Alarms (z. B. „checks are not ok“) niemals als Auflösung missverstanden wird |
| Schweregrad | Der in der Source konfigurierte Standard-Schweregrad | Jede E-Mail nutzt ihn, bis du einen severity-Selektor + severityMap hinzufügst |
| Host | Leer | Bis du einen host-Selektor hinzufügst |
| Dedup-Key | Ein deterministischer Hash aus Titel + Absenderadresse | Bis du einen dedupKey-Selektor hinzufügst |
Die E-Mail-Selektor-Sprache
E-Mail-Selektoren sind eine kleine, eigene Syntax, getrennt von den JSON-Selector-Pfaden der Webhook-Sources, denn eine E-Mail hat keine JSON-Struktur zum Durchlaufen:
| Selektor | Löst auf zu |
|---|---|
subject | Der Betreff-Header der E-Mail, unverändert |
body | Der Klartext-Body, unverändert |
body.line(N) | Die N-te Zeile des Klartext-Bodys, 1-indiziert (body.line(1) ist die erste Zeile) |
subject =~ /muster/ | Regex-Match gegen den Betreff: die erste Capture-Gruppe (...), falls das Muster eine hat, sonst der gesamte Match |
body =~ /muster/ | Dasselbe, gegen den Klartext-Body |
Ein Selektor kann per || Fallback-Ketten bilden, dieselbe Konvention wie bei den Webhook-Selector-Pfaden: Der erste Kandidat, der zu einem nicht-leeren Wert auflöst, gewinnt:
subject =~ /Status: (\w+)/ || body.line(1)Ein fehlendes Feld, eine Zeilennummer außerhalb des gültigen Bereichs oder ein ungültiges bzw. nicht passendes Regex lösen alle zu „nichts“ auf, statt einen Fehler zu werfen. Eine fehlerhafte oder unerwartete E-Mail ist normaler, erreichbarer Input, kein Bug.
Mapping anpassen
Im Dashboard gibt es aktuell keinen eigenen Mapping-Editor für E-Mail-Sources (der Selektor-Editor im Tab Payload Mapping zielt auf die JSON-Webhook-Form). Um Selektoren zu konfigurieren, nutzt du die API:
GET /api/im/sources/:id, um das aktuellepayloadMappingder Source zu lesen. Du brauchst das VOLLSTÄNDIGE Objekt zurück, nicht nur den Teil, den du änderst (siehe Warnhinweis unten).PATCH /api/im/sources/:idmit dem vollständigenpayloadMapping, in dem du einenemailSelectors-Schlüssel hinzufügst oder bearbeitest:
curl -X PATCH "https://deine-domain/api/im/sources/<id>" \
-H "Content-Type: application/json" \
-H "Cookie: <deine-session-cookie>" \
-d '{
"payloadMapping": {
"title": "title",
"severity": "severity",
"severityMap": { "sev1": "sev1", "sev2": "sev2", "sev3": "sev3", "sev4": "sev4" },
"status": "status",
"resolveValues": ["resolved"],
"host": "host",
"dedupKey": "dedupKey",
"emailSelectors": {
"title": "subject",
"severity": "subject =~ /\\[(CRITICAL|WARNING)\\]/",
"severityMap": { "CRITICAL": "sev1", "WARNING": "sev3" },
"resolveValues": ["resolved", "recovered", "cleared"]
}
}
}'Ein PATCH ersetzt den kompletten payloadMapping-Wert, er wird nicht zusammengeführt. Sendest du nur { "payloadMapping": { "emailSelectors": {...} } }, gehen die übrigen Felder (title, severity, status, host, dedupKey, resolveValues) verloren, die Uptimeifys Ingest-Pipeline intern braucht, und die Source ist dann kaputt. Schicke immer das vollständige Objekt zurück, ausgehend von einem frischen GET.
Das emailSelectors-Unterobjekt akzeptiert:
| Schlüssel | Typ | Zweck |
|---|---|---|
title | Selektor | Standardmäßig subject |
severity | Selektor | Roher Wert wird in severityMap nachgeschlagen |
severityMap | Objekt | Bildet einen extrahierten Rohwert auf sev1 bis sev4 ab |
status | Selektor | Falls gesetzt, wird der aufgelöste Wert gegen resolveValues geprüft; falls nicht gesetzt, greift stattdessen der oben beschriebene Betreff-Scan ohne Konfiguration |
resolveValues | Array von Strings | Groß-/kleinschreibungsunabhängige Begriffe, die „aufgelöst“ bedeuten. Standard: ["resolved", "recovered", "cleared"] |
host | Selektor | |
dedupKey | Selektor | Standardmäßig ein Hash aus Titel + Absenderadresse |
custom | Objekt aus Selektoren | Zusätzliche Felder, genauso bereitgestellt wie das custom-Mapping einer Webhook-Source |
Antwort
Jede E-Mail, die eine gültige Adresse erreicht, wird zur asynchronen Verarbeitung angenommen. Es gibt kein synchrones Erfolgs-/Fehler-Signal wie das 202 Accepted eines Webhooks, da die Mailzustellung selbst der Transport ist. Eine E-Mail, deren Selektoren zu keinem Titel auflösen, wird verworfen (nichts, worauf man alarmieren könnte), statt einen leeren Vorfall zu erzeugen.
Datadog
Datadog-Monitor-Alarme über eine Datadog-Webhook-Integration an Uptimeify Incident Management senden, bereits auf Titel, Alarmtyp und Übergangsstatus abgebildet.
Grafana Alerting
Grafana-Alerting-Benachrichtigungen über einen Webhook-Contact-Point an Uptimeify Incident Management senden, abgebildet aus dem ersten Alarm der Gruppe.