Beszel
Beszel-Serveralarme über einen generischen Shoutrrr-Webhook an Uptimeify Incident Management senden, mit Host, Link, Schweregrad und automatischer Entwarnung für jeden Beszel-Alarmtyp.
Beszel benachrichtigt über Shoutrrr-URLs. Sein generischer Webhook schickt nur einen Titel und eine Nachricht, ohne Statusfeld und ohne Alarm-ID. Das Beszel-Preset liest alles Nötige aus dem Titel: ob der Alarm auslöst oder sich erholt, um welches System es geht und welchen früheren Alarm eine Entwarnung schließt. Geprüft gegen die Alarmtexte von Beszel 0.21.
1. Alarmquelle in Uptimeify anlegen
Gehe zu Incident Management → Alarmquellen → Neu, wähle das Beszel-Preset, vergib einen Namen und lege die Quelle an. Die Erfolgsseite zeigt eine fertige Benachrichtigungs-URL für Beszel:
generic://<deine-domain>/api/im/ingest/<token>?template=jsonSie wird einmal angezeigt und danach nie wieder im Klartext. Wenn du sie verlierst, rotiere das Token im Tab Einstellungen der Quelle und baue die URL aus der neuen Ingest-URL neu: https:// durch generic:// ersetzen und ?template=json anhängen.
template=json ist Pflicht. Ohne diesen Parameter schickt Beszel reinen Text statt { "title", "message" }, und das Preset hat nichts zu lesen.
2. URL in Beszel eintragen
- Öffne in Beszel Einstellungen → Benachrichtigungen.
- Trage unter Webhook / Push-Benachrichtigungen die URL aus Schritt 1 ein und speichere. Test URL schickt eine Testbenachrichtigung. Sie kommt als offener Alarm mit dem Titel
Test Alertan; schließe ihn von Hand. - Öffne in der Systemtabelle das Glockensymbol jedes Systems und aktiviere die gewünschten Alarme (Status, CPU, Speicher, Datenträger und so weiter).
Beszel schickt eine Benachrichtigung, wenn ein Alarm auslöst, und eine, wenn er sich erholt. Beide landen beim selben Uptimeify-Alarm, die Entwarnung schließt ihn also.
Unterstützte Alarmtypen
| Beszel-Alarm | Titel beim Auslösen | Titel bei der Entwarnung |
|---|---|---|
| CPU, Speicher, Datenträger, Bandbreite, Temperatur, Last, GPU | web-01 CPU above threshold | web-01 CPU below threshold |
| Akku (löst bei niedrigem Stand aus) | web-01 battery below threshold | web-01 battery above threshold |
| Status (Verbindung) | Connection to web-01 is down 🔴 | Connection to web-01 is up ✅ |
| Container-Zustand | Unhealthy container db on web-01 🔴 oder 3 unhealthy containers on web-01 🔴 | web-01 containers are healthy ✅ |
| systemd-Dienste | Failed services on web-01 🔴 | Services recovered on web-01 ✅ |
| Netzwerk-Monitor (Paketverlust) | Network monitor loss on web-01: 1.1.1.1:53 | Network monitor recovered on web-01: 1.1.1.1:53 |
| SMART | SMART failure on web-01: /dev/sda 🔴 | keine |
| ZFS-Pool | Storage pool DEGRADED on web-01: tank | keine |
Für SMART und ZFS schickt Beszel keine Entwarnung. Diese Alarme bleiben offen, bis du sie in Uptimeify schließt. Mehrere ungesunde Container auf einem System teilen sich einen Alarm, weil auch Beszels Entwarnung das ganze System betrifft.
Standard-Feldzuordnung
| Beszel-Feld | Normalisiertes Feld |
|---|---|
title | Titel, unverändert |
title | Status: below threshold (Akku: above threshold), is up, recovered und containers are healthy schließen den Alarm, alles andere lässt ihn offen |
title | Host: der Systemname in Beszel, auch wenn er Leerzeichen enthält |
title | Dedup-Key: System plus Alarmtyp, für Auslösung und Entwarnung gleich |
message | Link zurück zum System in Beszel (die URL, die Beszel an jede Nachricht hängt) |
message | Eigenes Feld details, die Nachricht ohne den Link (zum Beispiel CPU averaged 91.20% for the previous 10 minutes.) |
Schweregrad-Zuordnung
| Beszel-Alarm | Uptimeify-Schweregrad |
|---|---|
SMART failure, ZFS-Pool FAULTED, OFFLINE, UNAVAIL, REMOVED oder SUSPENDED | sev1 |
Verbindung down, ausgefallene Dienste, ZFS-Pool DEGRADED | sev2 |
| SMART warning | sev3 |
| Alles andere | Der Standard-Schweregrad der Quelle |
Beispiel-Payload
{
"title": "backend1 CPU above threshold",
"message": "CPU averaged 91.20% for the previous 10 minutes.\n\nhttps://beszel.example.com/system/x8k2m4p9q1w7e3r"
}Du kannst genau diese Payload über den Tab Payload Mapping im Dashboard gegen das Mapping deiner Quelle schicken, bevor du die Alarme in Beszel aktivierst.
Beszel stattdessen per E-Mail
Wenn Beszel dich nur per E-Mail erreicht (SMTP unter Einstellungen → Benachrichtigungen), nimm stattdessen eine E-Mail-Quelle. Der Betreff von Beszels E-Mail ist derselbe Titel, der Text ist die Nachricht mit dem Link dahinter. Setze diese emailSelectors über die Alert-Sources-API, dann verhält sich die Quelle wie das Webhook-Preset:
{
"emailSelectors": {
"title": "subject",
"severity": "subject =~ /^SMART (failure) on / || subject =~ /^Storage pool (FAULTED|OFFLINE|UNAVAIL|REMOVED|SUSPENDED) on / || subject =~ /^Connection to .+ is (down)\\b/ || subject =~ /^(Failed) services on / || subject =~ /^Storage pool (DEGRADED) on / || subject =~ /^SMART (warning) on /",
"status": "subject =~ / (battery (?:above|below)) threshold/ || subject =~ / (above|below) threshold/ || subject =~ /^Connection to .+ is (down|up)\\b/ || subject =~ /^Network monitor (loss|recovered) on / || subject =~ /^Services (recovered) on / || subject =~ /containers are (healthy)\\b/",
"host": "subject =~ /^(.+?) (?:\\d+m load|\\S+) (?:above|below) threshold/ || subject =~ /^Connection to (.+) is (?:down|up)\\b/ || subject =~ /^Network monitor (?:loss|recovered) on (.+?): / || subject =~ /^(?:Failed services|Services recovered) on (.+) \\S+$/ || subject =~ /^(?:Unhealthy container \\S+|\\d+ unhealthy containers) on (.+) \\S+$/ || subject =~ /^(.+) containers are healthy\\b/ || subject =~ /^SMART \\S+ on (.+?): / || subject =~ /^Storage pool \\S+ on (.+?): /",
"dedupKey": "subject =~ /^(.+) (?:above|below) threshold/ || subject =~ /^(Connection to .+) is (?:down|up)\\b/ || subject =~ /^Network monitor (?:loss|recovered) (on .+)$/ || subject =~ /^(?:Failed services|Services recovered) (on .+) \\S+$/ || subject =~ /^(?:Unhealthy container \\S+|\\d+ unhealthy containers) on (.+) \\S+$/ || subject =~ /^(.+) containers are healthy\\b/ || subject =~ /^(SMART \\S+ on .+?) \\S+$/ || subject =~ /^(Storage pool .+)$/",
"severityMap": { "failure": "sev1", "FAULTED": "sev1", "OFFLINE": "sev1", "UNAVAIL": "sev1", "REMOVED": "sev1", "SUSPENDED": "sev1", "down": "sev2", "Failed": "sev2", "DEGRADED": "sev2", "warning": "sev3" },
"resolveValues": ["below", "battery above", "up", "recovered", "healthy"],
"custom": { "details": "body =~ /^(.*?)\\s*https?:\\/\\/\\S+\\s*$/s || body" }
}
}Wo es geht, ist das Webhook-Preset die bessere Wahl: es speichert zusätzlich den Beszel-Link als Link des Incidents.
Alert-Source-Einrichtungsanleitungen
Schritt-für-Schritt-Anleitungen, um Zabbix, Datadog, Grafana Alerting, Prometheus Alertmanager, Sentry, Beszel oder einen beliebigen eigenen Webhook mit Uptimeify Incident Management zu verbinden.
Benutzerdefinierter Webhook
Alarme aus jedem Tool, das JSON per POST senden kann, an Uptimeify Incident Management schicken, mit eigenem Feld-Mapping im Dashboard.