ADMIN

2024

04

2024-03-27T12:00:00

Small-Business-IT

PRAXIS

062

Security-Tipp

Sicherheit

Webseiten

Healthchecks für Automatisierung

Lebenszeichen

von Dr. Matthias Wübbeling

Veröffentlicht in Ausgabe 04/2024 - PRAXIS

Automatisierung ist das Losungswort der modernen IT. Je mehr Sie automatisieren können, desto weniger Fehler können Sie bei der manuellen Ausübung Ihrer Tätigkeiten machen. Neben Backups, Datenbankreplikation, Softwareupdates und regelmäßiger Aktualisierung der TLS-Zertifikate gehören viele andere Aufgaben in den Verantwortungsbereich eines Admins. Dass die dafür erstellten Automatismen funktionieren, lässt sich etwa mit healthchecks.io überwachen – natürlich selbst gehostet.

Wer kennt das nicht: Das neu eingerichtete Backup lief nun mehrere Wochen ohne Probleme, die Wiederherstellung haben Sie auch erfolgreich ausprobiert – also alles prima. Dann der Schock, als plötzlich der Kollege in der Türe steht mit der Bitte, eine Datei in der Version von vorheriger Woche wiederherzustellen. Die Logs zeigen, dass Update ist einige Zeit gar nicht gelaufen. Der Grund ist einfach: Ihr Skript basiert auf Python 3.9 und das automatische Update Ihres Systems hat im Hintergrund Python 3.10 installiert und 3.9 entfernt.
Natürlich gehört das zu den Dingen, die nicht passieren dürfen, die so oder so ähnlich aber eben immer wieder geschehen. Natürlich könnten Sie sich jeden erfolgreichen Durchlauf des Backupskripts quittieren lassen. Jeden Tag eine E-Mail, da fällt schon auf, wenn mal einen Tag keine kommt. Doch genau das tut es nicht. Admins werden quasi blind für die regelmäßigen Hinweise über die erfolgreichen Backups, sodass das Fehlen der E-Mail gar nicht beachtet wird. Besser wäre also das Szenario, dass das Skript eine E-Mail sendet, wenn das Backup nicht funktioniert hat. Aber wer sendet dann die E-Mail, wenn das Skript gar nicht läuft?
Die Lösung ist vom Konzept ziemlich einfach. Es muss einen Service geben, der überwacht, wann keine E-Mail vom Backupskript gesendet wird, und der nur dann selbst eine Nachricht an den verantwortlichen Administrator rausschickt. Natürlich muss das Skript am Ende gar keine E-Mails versenden, es muss den Service nur informieren, dass alles geklappt hat. Das geht also auch per HTTP und kommt damit im Grunde an fast jeder Firewall vorbei und durch jeden HTTP-Proxy durch.
Wer kennt das nicht: Das neu eingerichtete Backup lief nun mehrere Wochen ohne Probleme, die Wiederherstellung haben Sie auch erfolgreich ausprobiert – also alles prima. Dann der Schock, als plötzlich der Kollege in der Türe steht mit der Bitte, eine Datei in der Version von vorheriger Woche wiederherzustellen. Die Logs zeigen, dass Update ist einige Zeit gar nicht gelaufen. Der Grund ist einfach: Ihr Skript basiert auf Python 3.9 und das automatische Update Ihres Systems hat im Hintergrund Python 3.10 installiert und 3.9 entfernt.
Natürlich gehört das zu den Dingen, die nicht passieren dürfen, die so oder so ähnlich aber eben immer wieder geschehen. Natürlich könnten Sie sich jeden erfolgreichen Durchlauf des Backupskripts quittieren lassen. Jeden Tag eine E-Mail, da fällt schon auf, wenn mal einen Tag keine kommt. Doch genau das tut es nicht. Admins werden quasi blind für die regelmäßigen Hinweise über die erfolgreichen Backups, sodass das Fehlen der E-Mail gar nicht beachtet wird. Besser wäre also das Szenario, dass das Skript eine E-Mail sendet, wenn das Backup nicht funktioniert hat. Aber wer sendet dann die E-Mail, wenn das Skript gar nicht läuft?
Die Lösung ist vom Konzept ziemlich einfach. Es muss einen Service geben, der überwacht, wann keine E-Mail vom Backupskript gesendet wird, und der nur dann selbst eine Nachricht an den verantwortlichen Administrator rausschickt. Natürlich muss das Skript am Ende gar keine E-Mails versenden, es muss den Service nur informieren, dass alles geklappt hat. Das geht also auch per HTTP und kommt damit im Grunde an fast jeder Firewall vorbei und durch jeden HTTP-Proxy durch.
Die Verwaltung und Überwachung der Healthchecks übernimmt der gleichnamige Service. Die Software ist Open Source und steht unter [1] zur Verfügung. Wenn Sie das Repository mit Git klonen, können Sie entweder die Software direkt verwenden oder Sie nutzen Docker, um die Abhängigkeiten in einem Image zu kapseln. Für einen ersten Blick auf die Software lohnt sich die Inbetriebnahme mittels Dockers. Dafür gehen Sie in den Ordner "docker/" innerhalb des Repositories. Kopieren Sie die Datei ".env.example" und nennen die resultierende Datei ".env". Anschließend editieren Sie die Datei und nehmen notwendige Einstellungen vor, hinterlegen etwa die relevanten Daten für den E-Mailversand.
Inbetriebnahme
Nachdem Sie alle für Ihre Umgebung relevanten Einstellungen gespeichert haben, starten Sie den Buildprozess. Rufen Sie dafür das Kommando docker compose build auf. Compose verwendet die in der Datei "docker-compose.yml" hinterlegten Informationen. Nun wird das Image entsprechend der Anleitung in dem Dockerfile erstellt. Nach einem kurzen Moment können Sie den Container starten:
docker compose up -d
Anschließend öffnen Sie im Browser die URL "http://localhost:8000/" und gelangen zum Login-Bildschirm. Natürlich haben Sie zu diesem Zeitpunkt noch keinen Account, daher wählen Sie zunächst "Sign Up" und geben dort Ihre E-Mailadresse ein. Wenn Sie den ausgehenden E-Mail-account in der ENV-Datei korrekt konfiguriert haben, erhalten Sie nach einem Klick auf "E-Mail Me a Link" eine E-Mail, mit der Sie sich einloggen können. Den Login können Sie immer so durchführen oder Sie setzen unter "Account" ein Passwort für die Logins.
Healthchecks erstellt für Sie sofort ein Projekt mit dem Namen Ihrer E-Mailadressen. Natürlich können Sie beliebig viele weitere Projekte anlegen. Um einen neuen Check anzulegen, klicken Sie auf den Button "Add Check" und füllen Sie das Formular entsprechend aus. Erstellen Sie zunächst einen Eintrag für einen Cronjob. Um es Ihnen möglichst einfach zu machen, geben Sie die zeitliche Definition aus der Crontab ein, dann müssen Sie selbst nicht ausrechnen, zu welchem Zeitpunkt der Ping erfolgen sollte.
Wählen Sie statt "Cron" etwa "Simple" als Schedule-Typen, können Sie ein beliebiges Intervall eingeben, in dem der Healthcheck erfolgen soll – etwa einmal täglich oder alle vier Stunden. Damit nicht ohne Not der Alarm losgeht, können Sie eine gewisse Grace Time setzen, das ist eine zusätzliche Zeitspanne, die das System auf eine Meldung wartet.
Nach dem Speichern erscheint der neu angelegte Check in der Übersicht. Die unter "Ping-URL" angegebene Adresse ist nun die, die regelmäßig angepingt, also aufgerufen werden muss. Das können Sie unter Linux mit direkt ausprobieren, ansonsten können sie auch einfach Ihren Browser verwenden. Der Wert unter "Last Ping" passt sich entsprechend an. Sie können für den oben angelegten Cronjob-Healthcheck mit dem folgenden Kommando einen tatsächlichen Cronjob anlegen mit . Fügen Sie nun die folgende Zeile in der Datei hinzu:
*/5 * * * * curl http://localhost:8000/ping/b8d72808-4400-4929-bd5c-bf741ba4e891
Ab jetzt sollte sich der Check also grün färben. Entfernen Sie nun den Cronjob wieder, um die Reaktion des Systems bei Ausbleiben des Pings zu beobachten.
Pings, Alarme und Badges anlegen
Betrachten wir noch einmal das Beispiel vom Beginn des Artikels. Sie erhalten eine E-Mail, wenn ihr Backupskript erfolgreich durchgelaufen ist. Wenn Sie in der Übersicht der Checks auf die drei Punkte im rechten Bereich eines Checks klicken, gelangen Sie zu den Details. In dieser Ansicht sehen Sie eine generierte E-Mail-Adresse. Eingehende E-Mails an diese Adresse gelten als gültiger Ping.
Bleiben der Ping über die URL und die E-Mail in den konfigurierten Zeiten aus, gibt es einen Alarm. Dieser erreicht ohne weitere Konfiguration die E-Mail-Adresse des angelegten Benutzers. Die Adresse des Absenders haben Sie in der ENV-Datei selbst konfiguriert, es bietet sich an, diesen auf eine Whitelist zu setzen, damit der Alarm nicht unerwartet als Spam einsortiert wird und damit wieder aus dem Blickfeld gerät.
Nach einem erfolgten Alarm wird der Check in der Weboberfläche markiert und die gewählten Tags prangen rot hinterlegt im oberen Bereich der Übersicht. Eine weitere Alarmierung erfolgt nicht. Sobald der Ping wieder erfolgt, ist der Check wieder grün und die Alarmierung wird zurückgesetzt. Sie erhalten erneut eine E-Mail mit der Information, dass der Check wieder "up" ist.
Healthchecks ermöglicht das Integrieren weiterer Kommunikationsbackends. Einige konfigurieren Sie auch in der ENV-Datei und die Aktivierung gelingt Ihnen unter dem Menüpunkt "Integrations". Wählen Sie das gewünschte Backend und klicken Sie auf "Add Integration". Die bereits aktive Integration ist "E-Mail", nämlich für Ihre eigene E-Mail. Sie können aber durch weiteres Hinzufügen von E-Mail-Adressen zusätzliche Empfänger hinterlegen. Die Integration der meisten Backends ist ziemlich einfach, Sie erhalten im nächsten Schritt eine Anleitung für die Vorbereitung des entsprechenden Dienstes und ein Eingabefeld für die URL zur Kommunikation mit dieser Anwendung. Nach einem Klick auf "Save Integration" steht diese dann schon bereit.
Badges können Sie verwenden, um mit ihnen auf Webseiten oder in der Dokumentation zu einem Projekt den Status von einzelnen Tags oder den Gesamtstatus des Services darzustellen. Dafür stellt Healthchecks unterschiedliche URLs und Datentypen zum Einbinden bereit und die Anzeige unterstützt die drei Zustände "up", "down" und "late", wenn die Meldung verspätet ist, aber noch in dem unter Grace Time konfigurierten Intervall.
Weitere Einstellungen
Wenn Sie die von Healthchecks bereitgestellte API verwenden oder Ihrem Projekt weitere Benutzer hinzufügen möchten, wählen Sie im Menü den Punkt "Settings" für das ausgewählte Projekt. In der Ansicht können Sie API-Keys und einen Ping-Key erstellen. Diese benötigen Sie zur Authentifikation, wenn Sie Ihren Healthchecks-Account über die API konfigurieren oder die Ping-URLs mittels Kürzel, sogenanntem Slug, verwenden möchten. Nach dem Erzeugen müssen Sie den jeweiligen Key nicht zwangsweise direkt kopieren, Sie können ihn später mit einem Klick auf "Show Keys" wieder anzeigen. Weiter unten auf der Settings-Seite können Sie das Projekt auch einem anderen Benutzer zuweisen oder es komplett löschen.
Bevor Sie das System in den Produktivbetrieb überführen, sollten Sie die Kommunikation mittels TLS absichern, bestenfalls hinter einem Frontproxy wie Nginx oder Traefik. Um einen Benutzer mit Administratorrechten anzulegen, führen Sie das folgende von Django bekannte Kommando aus:
docker compose exec web ./manage.py createsuperuser
Der Benutzer darf leider noch nicht in der Benutzerdatenbank existieren. Wählen Sie also eine neue E-Mailadresse und vergeben Sie ein Passwort für den Benutzer. Anschließend können Sie sich entsprechend in der Weboberfläche anmelden – und dort auch weitere Benutzer mit den Rechten eines Superusers ausstatten. Als Superuser können Sie nun im Admin-Bereich noch weitere Einstellungen Ihrer Site vornehmen.
Fazit
Ein Überblick über erfolgreiche Automation in der IT ist natürlich wichtig. Viel wichtiger ist aber, informiert zu werden, wenn die Automation mal nicht erfolgreich ist. Der Security-Tipp in diesem Monat hat Ihnen mit Healthchecks einen Service vorgestellt, den Sie einfach selbst betreiben können und der Ihnen im Notfall rechtezeitig Bescheid gibt, wenn Ihre Automatisierung mal nicht erfolgreich war. Achten Sie nur darauf, dass der Ping-Aufruf auch nur dann erfolgt, wenn die Aufgabe tatsächlich erfolgreich beendet wurde. Damit erhalten Sie eine einfache Methode zur Erweiterung Ihres Monitorings.
(dr)
Link-Codes