Uptimeify Docs

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=json

Sie 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

  1. Öffne in Beszel Einstellungen → Benachrichtigungen.
  2. 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 Alert an; schließe ihn von Hand.
  3. Ö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-AlarmTitel beim AuslösenTitel bei der Entwarnung
CPU, Speicher, Datenträger, Bandbreite, Temperatur, Last, GPUweb-01 CPU above thresholdweb-01 CPU below threshold
Akku (löst bei niedrigem Stand aus)web-01 battery below thresholdweb-01 battery above threshold
Status (Verbindung)Connection to web-01 is down 🔴Connection to web-01 is up ✅
Container-ZustandUnhealthy container db on web-01 🔴 oder 3 unhealthy containers on web-01 🔴web-01 containers are healthy ✅
systemd-DiensteFailed services on web-01 🔴Services recovered on web-01 ✅
Netzwerk-Monitor (Paketverlust)Network monitor loss on web-01: 1.1.1.1:53Network monitor recovered on web-01: 1.1.1.1:53
SMARTSMART failure on web-01: /dev/sda 🔴keine
ZFS-PoolStorage pool DEGRADED on web-01: tankkeine

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-FeldNormalisiertes Feld
titleTitel, unverändert
titleStatus: below threshold (Akku: above threshold), is up, recovered und containers are healthy schließen den Alarm, alles andere lässt ihn offen
titleHost: der Systemname in Beszel, auch wenn er Leerzeichen enthält
titleDedup-Key: System plus Alarmtyp, für Auslösung und Entwarnung gleich
messageLink zurück zum System in Beszel (die URL, die Beszel an jede Nachricht hängt)
messageEigenes Feld details, die Nachricht ohne den Link (zum Beispiel CPU averaged 91.20% for the previous 10 minutes.)

Schweregrad-Zuordnung

Beszel-AlarmUptimeify-Schweregrad
SMART failure, ZFS-Pool FAULTED, OFFLINE, UNAVAIL, REMOVED oder SUSPENDEDsev1
Verbindung down, ausgefallene Dienste, ZFS-Pool DEGRADEDsev2
SMART warningsev3
Alles andereDer 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.

Auf dieser Seite