Laravel Uptime Monitor - Einfaches Monitoring von Websites mit Slack-Anbindung

Bisher habe ich meine Websites, die ich betreue, mit keinem Monitoring überwacht, um z.B. benachrichtigt zu werden, wenn die Website nicht erreichbar ist. Vor einigen Wochen habe ich mich mit dem PHP-Framework Laravel beschäftigt und eine kleine Anwendung umgesetzt. In diesem Zuge bin ich auf eine Monitor-Lösung gestoßen, die auf Laravel setzt.

Den Laravel Uptime Monitor gibt es in zwei Version. In der ersten Version erweitert man eine neue Laravel-Installation, um den Laravel Uptime Monitor. Wenn man sich das händische Zusammenbauen sparen möchte, setzt man auf die zweite Version. In dieser ist alles fertig für den direkten Einsatz.

Da Uberspace mein Hoster der Wahl ist, zeige ich die Einrichtung für diesen Hoster. Für die Installation ist Composer nötig. Falls dies noch nicht auf deinem Uberspace installiert ist, führst du die vier Befehle aus der Anleitung von Composer aus. Anschließend, falls noch nicht vorhanden, legst du einen neuen Ordner bin in deinem Home-Ordner an.

mkdir ~/bin
chmod +x composer.phar
mv composer.phar composer
mv composer.phar ~/bin/

Nach dem Anlegen des Ordners gibst du der Datei die Rechte, das sie ausgeführt werden kann und benennst sie im composer um. Im letzten Schritt wird sie in den Ordner ~/bin  verschoben, damit sie von überall ausgeführt werden kann.

Mit dem Ausführen von composer siehst du, ob Composer funktioniert.

Den Laravel Uptime Monitor kannst du direkt im Home-Ordner installieren, da es keine Ausgabe für das Web gibt. Die Anwendung wird vollständig über das Terminal bedient.

composer create-project spatie/uptime-monitor-app <name of install directory>

Mit diesem Befehl wird die Anwendung installiert. Für die regelmäßige Überprüfung, ob eine Website erreichbar ist, muss ein Cronjob eingerichtet werden. Mit crontab -e öffnet sich eine Datei, in die der Cronjob eingetragen wird.

Gehen wir davon aus, du hast die Anwendung in den Ordner monitor in deinem Home-Ordner installiert, dann muss folgender Cronjob eingetragen werden:

PATH=/package/host/localhost/php-7.0/bin:/bin:/usr/bin

*/1 * * * * php ~/monitor/artisan schedule:run >/dev/null 2>&1

Beim Erstellen des Cronjobs musst du darauf achten, dass die Variable PATH neu definiert wird. PHP steht standardmäßig in einem Cronjob nicht zur Verfügung. Die erste Zeile sollte so ähnlich aussehen und auf jeden Fall den PHP-Teil enthalten. Mehr zur diesem Thema findest du im Wiki von Uberspace.

Vor dem Hinzufügen einer Website, fügst du die Slack-Anbindung in der configuration.php hinzu. Die Datei befindet sich auf der ersten Ebene des Projekt-Ordners. Im Abschnitt für Slack musst du deine Webhook-URL einfügen. Diese erstellst du direkt bei Slack. Dort definierst du auch in welchen Channel Laravel Uptime Monitor die Nachrichten schicken soll. Ich habe mir dafür einen neuen privaten Channel angelegt.

Alternativ zur Slack-Anbindung ist auch eine Benachrichtigung über E-Mail möglich. Weitere Einstellungen sind fürs erste nicht nötig.

Zurück im Terminal kannst du die erste Website hinzufügen. In dem Projekt-Ordner wird mit dem Befehl php artisan monitor:create <url> die URL der Website hinzugefügt. Beim Hinzufügen wird gefragt, ob das Tool nach einem String auf der Website suchen soll. Das würde ich empfehlen, weil es durch aus vorkommen kann, dass die Website erreichbar ist aber ein Fehler auf der Website vorliegt und deswegen die Website nicht ordnungsgemäß angezeigt wird.

Ich habe den Viewport-Metatag verwendet. Ich gehe davon aus, wenn dieser in der Website gefunden wird, ist die Website normal erreichbar. Den Viewport-Metatag auf jeden Fall direkt aus dem Quellcode kopieren und nicht aus den Entwickler-Tools. In meinem Fall war die Darstellung in den Entwickler-Tools nicht die Gleiche wie im Quellcode. Der Viewport-Metatag kann wie folgt aussehen:

<meta name="viewport" content="width=device-width, initial-scale=1.0">

Mit php artisan monitor:list wird dir eine Liste aller Websites ausgegeben und erhältst den Status der Websites. Weitere Befehle für das Monitoring bekommst du mit php artisan monitor angezeigt.

Die vollständige Dokumentation zu dem Projekt findest du in dem GitHub-Projekt.

Healthy monitors
================
+-----------------------+--------------+--------------+-------------------+-----------------------------+----------------------------+
| URL                   | Uptime check | Online since | Certificate check | Certificate Expiration date | Certificate Issuer         |
+-----------------------+--------------+--------------+-------------------+-----------------------------+----------------------------+
| https://domain.de     | ✅           | 1 week ago   | ✅                | 1 week from now             | Let's Encrypt Authority X3 |
| https://domain.de     | ✅           | 18 hours ago | ✅                | 3 months from now           | Let's Encrypt Authority X3 |
| https://domain.de     | ✅           | 1 week ago   | ✅                | 1 month from now            | Let's Encrypt Authority X3 |
| https://domain.de     | ✅           | 7 hours ago  | ✅                | 2 months from now           | Let's Encrypt Authority X3 |
| https://domain.de     | ✅           | 1 week ago   | ✅                | 2 months from now           | Let's Encrypt Authority X3 |
| https://domain.org    | ✅           | 1 week ago   | ✅                | 2 months from now           | Let's Encrypt Authority X3 |
| https://domain.de     | ✅           | 4 days ago   | ✅                | 2 months from now           | Let's Encrypt Authority X3 |
| https://domain.com    | ✅           | 1 week ago   | ✅                | 2 months from now           | Let's Encrypt Authority X3 |
| https://domain.de     | ✅           | 19 hours ago | ✅                | 2 months from now           | Let's Encrypt Authority X3 |
| https://domain.com    | ✅           | 1 week ago   | ✅                | 1 week from now             | Let's Encrypt Authority X3 |
| https://domain.eu     | ✅           | 3 days ago   | ✅                | 2 months from now           | Let's Encrypt Authority X3 |
| https://domain.de     | ✅           | 1 week ago   | ✅                | 2 months from now           | Let's Encrypt Authority X3 |
| https://domain.rocks  | ✅           | 1 day ago    | ✅                | 1 month from now            | Let's Encrypt Authority X3 |
+-----------------------+--------------+--------------+-------------------+-----------------------------+----------------------------+

Das Monitoring hat keinen großen Funktionsumfang, jedoch reicht das für mich aktuell aus, um die Seiten im Überblick zu behalten und ich werde benachrichtigt, wenn eine Seite nicht erreichbar ist. Neben der Uptime der Website bekommt man zusätzlich Nachrichten, wenn das SSL-Zertifikat abläuft. Auch sehr praktisch, wenn z.B. das automatische Verlängern von Let's Encrypt aus welchen Gründen auch immer nicht funktioniert.

Vermutlich verwendest du einen veralteten Browser. Da diese Website auf moderne Technik setzt, benötigst du einen aktuellen Browser, um diese Website richtig darzustellen.