Uptime Kuma
Eine schlanke und einfache Monitoring Lösung für ein Homelab oder kleine Unternehmen. Open Source & kostenlos zum selber hosten. Kann Ping, Webseiten & Zertifikate sowie Geschwindigkeit prüfen, Ports überwachen. Status Dashboard, auch zum öffentlichen teilen, Push Benachrichtigungen auf diversen Medien.
Installation & Konfiguration
Installation mit Docker und zusätzliche Konfiguration für Monitoring von Docker Containern und Benachrichtigungen.
Installation
Uptime Kuma lässt sich sehr einfach und schnell mit Docker bereitstellen. Es benötigt nur einen Container, da es zum Speichern der Daten eine SQLite Datenbank verwendet. Dadurch ist es ein schlankes, sparsames, aber auch begrenztes Monitoring. Sobald Vielzahl von Diensten überwacht oder weitere Metriken wie CPU, RAM und Festplatten-Last und gestartete/gestoppte Dienste überwacht werden sollen, eignet sich eher ein stärkeres, aber auch komplexeres Monitoring Werkzeug wie Zabbix.
Uptime Kuma kann auch auf einem Raspberry Pi bereitgestellt werden.
Um eine Kuma Instanz bereitzustellen, reicht die folgende Compose Konfiguration:
services:
monitoring:
image: louislam/uptime-kuma
container_name: monitoring
volumes:
- ./kuma_data:/app/data
ports:
- 3001:3001
restart: unless-stopped
Einfach noch die Konfiguration an die eigenen Wünsche anpassen und fertig. Mindestens sollte das Volume angepasst werden, da es in diesem Beispiel im aktuellen Ordner den Ordner kuma_data erstellt bzw. verwendet. Hier bietet es sich an, einen absoluten Pfad anzugeben:
volumes:
- /home/ein_user/Docker/kuma_data:/app/data
Um die Docker Compose Konfiguration auszuführen, kann am besten in das Verzeichnis der YAML Datei gewechselt werden. Danach wird je nach nach gewählter Installation sudo docker-compose up -d
oder sudo docker compose up -d
(keine Bindestrich zwischen docker und compose) eingegeben, um die Standard Konfiguration docker-compose.yml
zu starten. Compose erstellt dann die gewünschten Container mit den angegeben Optionen. Sollten die Container bereits mit dieser Compose Konfiguration erstellt worden sein, so werden die Container in dieser neu erstellt, dessen Konfiguration geändert wurde.
Docker Monitoring konfigurieren
Damit Docker Container auf dem selben Host überwacht werden können, ist eine Anpassung der Docker Compose Config aus der Installation notwendig. Zusätzlich zu dem Verzeichnis für die Daten ist noch ein weiteres Volume für den sog. Docker Socket hinzuzufügen. Danach sieht der Teil für die Konfiguration für Volumes wie folgt aus:
volumes:
- ./kuma_data:/app/data
- /var/run/docker.sock:/var/run/docker.sock
Hier gilt wieder: Den Pfad für das Data Verzeichnis anpassen. Der 2. Teil mit dem Docker Socket ist hingegen immer gleich und darf nicht geändert werden.
Alternativ kann ein Docker Host auch über TCP/HTTP angebunden werden, jedoch ist die Socket Methode immer vorzuziehen, da hierfür keine besonderen Freigaben auf dem Docker Host notwendig sind. Wenn ein Docker Host mit freigegebenen TCP/HTTP eingebunden werden soll, ist keine Anpassung der Konfiguration der Compose Datei notwendig.
Nachdem der Docker Socker konfiguriert wurde, kann nun beim Erstellen eines Monitors ein neuer Docker Server mit angegeben werden, der über docker.sock angebunden wird: Docker Container erstellen
Admin Dashboard
Nachdem dem Login wird das Dashboard angezeigt, welches einen Überblick über alle Dienste und ihren Status gewährt.
Auf der Linken Seite werden die zu überachenden Dienste dargestellt und wie ihr aktueller Status ist.
Auf der rechten Seite wird oben die Anzahl der Dienste nach Status gruppiert dargestellt, um auf einem Blick zu sehen, wie viele Dienste erreichbar und nicht erreichbar sind. Darunter sind die einzelnen Ereignisse aufgelistet.
Hier ein Screenshot von einer Testinstanz, die ein Homelab überwacht:
Indem einer der Dienste angeklickt wird, wechselt die Ansicht in die Detailansicht für das gewählte Element. Je nachdem was der Dienst überwacht, werden die jeweiligen Metriken angezeigt und darunter die aufgetretenen Ereignisse, wie z. B. ein Fehler wegen eines selbst signierten Zertifikates wie im folgenden Beispiel. Bei dem Dienst handelt es sich um die HTTPS Seite einer FritzBox, welche über ein selbst signiertes Zertifikat verfügt. Nachdem in der Konfiguration die Zertifikatsprüfung deaktiviert wurde, wechselte der Status in Up. Nachdem die Seite wieder Up ist, wird beim Abruf der Seite auch die Geschwindigkeit gemessen.
Monitor erstellen
Um z. B. eine Webseite oder einen Server zu überwachen, wird in Kuma ein sog. Monitor angelegt. Beim Erstellen des Monitors kann ausgewählt werden, um was für einen Typ es sich handelt. Je nachdem welcher Typ ausgewählt wird, müssen andere Parameter konfiguriert werden. Außerdem bestimmt der Typ, welche Metriken Kuma ermittelt und welche Daten später für den Monitor angezeigt werden.
Einige Typen werden in diesem Kapitel kurz vorgestellt. Tags und Gruppen können mit allen Typen verwendet werden. Deswegen wird diesen jeweils eine eigene Seite gewidmet.
Einstellungen für Monitore
Im folgenden werden die Felder genauer betrachtet, die bei allen Monitor Typen konfiguriert werden können.
Monitor Type
Durch den Typ wird letztlich ausgewählt, welcher Test von Kuma ausgeführt werden soll. Je nach gewähltem Typ werden die Einstellungen angepasst, um die benötigten Parameter abzufragen.
Friendly Name
Hier kann ein beliebiger Text eingefügt werden, welcher für einem selbst den Test sowie Service am besten beschreibt. Der Friendly Name wird nur in Übersichten und E-Mails angezeigt und hat keinerlei Auswirkungen auf die Tests an sich.
Heartbeat Interval
Mit dem Hearbeat Interval wird angegeben, wie häufig Kuma den Test ausführen soll. Die Angabe erfolgt in Sekunden und das Minimum sind 20 Sekunden. Standardmäßig sind 60 Sekunden vorausgewählt.
Retries
Die Anzahl der Fehlversuche, bevor Kuma den Dienst als Down markiert. Standardmäßig ist 0 angegeben, sodass jeder Fehlversuch unmittelbar zu einer Down Meldung führt.
Heartbeat Retry Interval
Diese Option ist nur relevant, wenn Retries größer als 0 ist. Wenn der Test fehlschlägt, dann wartet Kuma nicht so lange wie bei Heartbeat Interval angegeben ist, sondern die Anzahl an Sekunden, die in Heartbeat Retry Interval festgelegt ist. So lässt sich z. B. ein Dienst alle 10 Minuten testen, aber wenn Fehler auftreten, das Zeitintervall auf 1 Minuten herabsetzen, um schneller wieder informiert zu werden, wenn der Dienst wieder erreichbar ist.
Resend Notification if Down
Markiert Kuma einen Dienst als Down, die Anzahl der Fehlversuche wurde erreicht, dann wird eine Benachrichtigung versendet. Standardmäßig wird nur eine Down-Meldung versendet (Feld = 0). Wird hier z. B. eine 1 eingetragen, dann wird bei jedem Fehlerversuch eine weitere Benachrichtigung versendet oder bei Eingabe einer 5 bei jedem 5. Fehlversuch.
Monitor Group
Mit dieser Option lässt sich der Monitor oder auch die Gruppe zu einer Gruppe hinzufügen. Gruppen können nochmal separat überwacht werden. Hierdurch lässt sich z. B. eine Wordpress Seite samt MySQL Datenbank zu einer Gruppe hinzufügen, sodass in Kuma die Webseite als Down markiert wird, wenn die Wordpress Instanz oder die Datenbank ausgefallen ist.
Description
Eine Freitext Beschreibung für den Monitor. Diese hat keine Auswirkungen auf die Tests. Sie dient nur als Beschreibung in den Dashboards.
Tags
Es können selbst verschiedene Tags mit Namen und Farbe erstellt werden. Einem Monitor können keine, einer oder mehrere Tags zugewiesen werden. Sie haben keinerlei Auswirkungen auf Tests, sondern dienen nur der besseren Übersicht und bieten Filtermöglichkeiten in den Dashboards.
Ping
Die einfachste Art der Überwachung, es wird ein Ping gesendet und auf ein Pong gewartet. Es handelt sich um ein eigenes sehr schlankes Protokoll (ICMP), um die Erreichbarkeit von Geräten zu prüfen. Es reicht einen Anzeigenamen zu vergeben und den Hostnamen oder die IP des Gerätes anzugeben, welches getestet werden soll. Wie bei den anderen Typen auch können das Intervall geändert, Tags oder Gruppen oder Benachrichtigungen konfiguriert werden.
Nachdem der Monitor erstellt wurde, liefert Kuma folgende Metriken zurück. Die Antwortzeit, wie lange Kuma warten musste, bis der Pong zurückgekommen ist und daraus ergeben sich Durchschnitt und Verfügbarkeit.
HTTP(s)
Damit können Weboberflächen überwacht werden. Es werden sowohl verschlüsselte (HTTPS) als auch unverschlüsselte Seiten (HTTP) unterstützt. Im folgenden Beispiel wird ein neuer Monitor für die Seite https://jaeckel.one erstellt. Diese wird alle 60 Sekunden geprüft und zusätzlich wird auch ermittelt, wann das Zertifikat abläuft (Benachrichtigung ablaufendes Zertifikat).
Zusätzlich könnte dieser Monitor, wie jeder andere Typ auch, noch einer Gruppe hinzugefügt oder mit einem Tag versehen werden.
Außerdem kann bei diesem Typ noch eine HTTP Option gesetzt werden, um z. B. JSON Rückgaben auszuwerten, damit könnten HTTP Rest APIs überwacht werden. Zusätzlich unterstützt dieser Monitor auch einige Authentifizierungsverfahren, womit Logins getestet werden können.
Wenn eine HTTP Seite getestet wird, haben die Optionen zum Prüfen des Zertifikatsablauf und das ignorieren von Zertifikatsfehlern keine Auswirkungen und werden von Kuma ignoriert.
Sobald die Einstellungen gespeichert werden, testet Kuma die gewünschte Seite sofort und meldet, ob diese erreichbar ist oder nicht. Dadurch wird sofort ersichtlich, ob alles richtig konfiguriert ist oder etwas nicht passt. Anschließend wird die Seite im gewünschten Intervall getestet und bei einem Fehler, wird dieser im Web angezeigt und gemeldet.
Für dieses Beispiel sehen die Statistiken wie folgt aus.
Beim HTTPS Test werden neben der Antwortzeit und der Verfügbarkeit auch das Zertifikat geprüft und wann dieses abläuft.
Wenn die HTTPS Seite einer Webseite mit einem selbst signierten Zertifikat überwacht werden soll, dann muss die Option Ignoriere TLS-/SSL-Fehler von Webseiten gesetzt werden, da Kuma ansonsten einen Fehler meldet. Dieser Fehler wurde beim Erstellen eines Monitors für den Router FritzBox im folgenden gemacht. Anschließend wurde der Monitor nochmal bearbeitet und die Option nachträglich gesetzt. Unten auf der Seite werden die Statuswechsel angezeigt, wo auch der Fehler des selbst signierten Zertifikats gemeldet wurde und nach der Änderung ist der Status von Inaktiv auf Aktiv gewechselt.
Leider hat das Deaktivieren der Option den Nachteil, dass Kuma auch nicht mehr den Ablauf des Zertifikats prüfen kann. Diese Option sollte somit nur aktiviert werden, wenn es unbedingt notwendig ist. Um eine bestmögliche Sicherheit zu gewährleisten sollten unbedingt gültige und korrekt signierte Zertifikate z. B. von Let's Encrypt verwendet werden.
Docker Container
Kuma kann andere Docker Container überwachen, auch wenn es selbst als Container ausgeführt wird. Hierfür muss natürlich ein Docker Host in Kuma konfiguriert werden. Entweder über die Einstellungen -> Docker Hosts oder beim Erstellen eines Monitors einfach auf das "+" neben Feld für Docker Host anklicken.
Im folgenden soll der Container mongo überwacht werden. Dieser läuft auf dem selben Docker Host wie Kuma selbst. Deswegen wird in diesem Fall auf den Zugriff mit dem Docker Socket zurückgegriffen. Dafür muss die Konfiguration angepasst werden, was auf der Seite Docker Monitoring konfigurieren beschrieben ist. Für dieses Beispiel wurde die Konfiguration bereits angepasst.
Es wird ein neuer Monitor erstellt und als Monitor Typ wird Docker Container ausgewählt. Es werden ein Anzeigename für Kuma und der eigentliche Name des Containers eingegeben, dieser muss mit dem Namen in Docker übereinstimmen. Die ID sollte nicht verwendet werden, da diese sich beim neu erstellen des Containers ändern kann, z. B. bei einem Update. Da noch kein Docker Host konfiguriert ist, erfolgt ein Klick auf das "+" Zeichen neben dem Eingabe-Feld vom Docker Host:
Hier kann der Anzeigename angepasst werden. Die anderen Optionen müssen gleich sein. Außer es soll eine Verbindung über TCP/HTTP mit dem Docker Host erfolgen.
Das ausgefüllte Formular sieht dann wie folgt aus:
Nachdem der Monitor erstellt wurde, prüft Kuma direkt, ob der Container läuft und meldet dies in der Weboberfläche. Im folgenden Screenshot wurde der Container nach einigen Minuten Laufzeit manuell gestoppt und etwas später wieder gestartet. Dies ist anhand der Ereignisse ersichtlich und wird auch in der Grafik angezeigt. Hinweis: nur die Downtime wird rot eingefärbt, die Uptime jedoch nicht in grün.
Gruppe
Der Typ Gruppe ist besonders, da andere Monitore in die Gruppe aufgenommen werden können. Die Gruppe ist grün, sofern alle zugeordneten Monitore auch grün sind. Sobald ein sog. Child (der Gruppe zugeordneter Monitor) rot ist, wird die Gruppe ebenfalls rot eingefärbt und es wird ein Fehler ausgeworfen. Auch Gruppen können wiederum anderen Gruppen zugeordnet werden und lassen sich auch mit Tags versehen.
Um nun der Gruppe Children (Monitore) hinzuzufügen, müssen die Einstellungen der gewünschten Monitore bearbeitet werden. Dazu einfach im gewünschten Monitor das Feld Monitor Gruppe setzen und die gerade erstelle Gruppe auswählen.
Nachdem der Gruppe Monitore zugewiesen wurden, werden diese entsprechend im Admin Dashboard dargestellt und vereinfachen die Ansicht, indem sie die Informationen zusammenführen. Wenn die Gruppe angeklickt wird, werden alle Ereignisse der Gruppe angezeigt. Bei komplexen Diensten, die sich aus mehreren einzelnen Diensten zusammensetzen, wird so sofort ersichtlich ist, wann dieser nicht lief.
Status-Seite
Status-Seiten können als Übersichtsseiten für Externe erstellt werden, um diesen den Status einer ausgewählter Dienste/Gruppen anzuzeigen. Es können auch Wartungsmeldungen dargestellt werden. Die Status-Seite ist ohne Login einsehbar und zeigt den Status der gewählten Dienste in Echtzeit an.
Der Echtzeit-Status dieser Seite lässt sich übrigens hier einsehen: https://status.jaeckel.one/status/bookstack
Um eine neue Status-Seite zu erstellen, als Admin in Kuma einloggen und oben rechts auf Status-Seiten
klicken und dann auf + Neue Status-Seite
.
Dann einen Anzeigename (Name) vergeben sowie den Link anpassen (Slug).
Nun können Monitore und Gruppen zur Seite hinzugefügt werden. Wenn eine Gruppe hinzugefügt wird, wird nur der Gesamtstatus aller Dienste angezeigt, die einzelnen Monitore dahinter sind nicht sichtbar. Zusätzlich können jedoch auch die einzelnen Monitore mit angezeigt werden, falls dies gewünscht ist
Die Grüne Schaltfläche Gruppe hinzufügen hat nichts mit den Gruppen im Backend zu tun, sondern die auf der Status-Seite angezeigten Elemente lassen sich damit nochmals gruppieren.
Im folgenden Beispiel werden 2 (Ansicht-)Gruppen definiert, die obere Monitore hinter den Gruppen enthält die 3 Monitore, die zusammen die Gruppe Bookstack bilden, es handelt sich um die sog. Children. Die untere Gruppe enthält nur die Gruppe Bookstack, welche letztlich grün sein muss, damit die Seite Bookstack tatsächlich erreichbar ist, was nur der Fall ist, wenn alle 3 Children grün sind.
Nachdem Speichern wird nun folgende Seite angezeigt, welche öffentlich für alle einsehbar ist, die den Link haben.
Benachrichtigungen
Wenn Fehler auftreten oder wieder aufgelöst werden, kann Kuma selbstverständlich auch Benachrichtigungen versenden.
Neben den üblichen Verdächtigen wie Mail, Signal, Telegram, Microsoft Teams, Discord, Gotify, Webhook, Matrix, Mattermost werden noch viele weitere Dienste unterstützt. Die Einrichtung unterscheidet sich je nach Dienst und wird in jeweils einem eigenen angepassten Formular abgefragt.
Hier zum Beispiel die Einrichtung von E-Mail:
Wichtig wären noch die letzten Einstellungen ganz unten, da diese bei allen Benachrichtigungen gleich sind. Denn es können Standardbenachrichtigungen für alle Monitre eingestellt werden und sogar auf alle bestehenden Monitore angewendet werden.