HTTP Status per Pi und Pushover

24 Juni 2023 - Lesezeit: 6 Minuten

Ich betreibe mehrere Webseiten und betreue u.a. auch die Seite meiner selbständigen Ehefrau. Der Betreiber des dahinterliegenden Servers hatte in den letzten Monaten/Jahren immer mal wieder Aussetzer, die ich zwar über UpTimeRobot teilweise erkennen kann, aber in der kostenlosen Version sind nur Abfragen alle 5 Minuten möglich und die Ausfälle dauern fast immer weniger.

Also brauchte ich eine alternative Option, welche mind. minütlich den Status abfragt, und wollte gerne auf ein schreibintensives Monitoringsystem auf meinem Raspberry Pi verzichten, nur um einen HTTP Status zu überwachen.

Also habe ich im Fediverse mal ein bisschen rumgefragt und dabei kam jemand auf die Idee, dass man ja einfach per Script auf dem Pi eine Abfrage bauen kann und per Pushover eine Meldung absetzt, wenn ein bestimmter Status erfüllt ist.

Vorteil der Lösung ist, dass der Pi dabei keine schreibintensiven Vorgänge ausführen muss und dass Linux die gewünschten Funktionen sowieso mitbringt.

Man sollte allerdings vorher wissen, dass Pushover Geld kostet. Der Service selbst ist zwar pro API Zugriff bis zu einer Höchstgrenze kostenlose, allerdings kostet die App für iOS ca. 6€ einmalig, allerdings kann man Pushover ja auch noch für viele andere Dinge nutzen, weswegen der Preis gerechtfertig ist.

Wie ist das Ganze aufgebaut?

Der Pi fragt minütlich den Status der Webseite ab und prüft, ob ein anderer Status als "200" ausgegeben wird. Wenn "200" ausgegeben wird, dann wird das Script beendet und es passiert nichts weiter, weil ja die Seite normal erreichbar ist.

Wenn ein anderer Status als "200" ausgegeben wird, dann soll der Pi eine Meldung an Pushover absetzen. Dies soll allerdings nicht minütlich wiederholt werden, weil die Webseite ja durchaus länger ausfallen kann. Irgendwann wäre sonst das Limit der freuen API Requests bei Pushover ggf. schnell erreicht.

Es reicht ja, dass man 1x die Meldung bekommt und dann prüfen kann, welcher Status ausgegeben wird und ggf. manuell nachschaut, ob die Webseite erreichbar ist.

Was ist zu tun?

Zuerst registriert man sich bei Pushover und richtet dort seinen Account ein. Dies ist der erste Schritt, weil dies für das spätere Script notwendig ist.

Nach Anlegen des Accounts, legt man unten auf der Seite über "Create an Application/API Token" eine neue "App" an und vergibt einen Namen. Mit "Create Application" wird die App erzeugt. Hierdurch wird ein "API Token/Key" erzeugt, den man später benötigt. Genau wie den vorher bereits erstellten "User Key".

Jetzt beginnt das Script.

Ich habe mir in meinem Home-Ordner auf dem Pi einen Unterordner "Domain_Check" angelegt und dort wird das Script abgelegt.

Angelegt wird das Script als "Check_wutticom.sh" per nano:

nano Check_wutticom.sh

Im folgenden nano Fenster wird folgendes Script hinterlegt:

#!/bin/bash

DOMAIN="Domain" --> auszutauschen gegen die abzufragende Domain

PUSHOVER_USER_KEY="User Key" --> User Key aus der Pushover-Startseite

PUSHOVER_APP_TOKEN="API Token/Key" --> API Token/Key aus der in Pushover angelegten App

NOTIFICATION_SENT_FILE="/home/Benutzer/Domain_Check/wutticom/notification_sent.txt" --> Hier wird eine Logdatei angelegt, damit der Status nicht minütlich an Pushover gemeldet wird, wenn ein Ausfall mal länger dauert

HTTP_STATUS=$(curl -sL -w "%{http_code}\\n" "$DOMAIN" -o /dev/null)

if [ "$HTTP_STATUS" != "200" ]; then

    if [ ! -f "$NOTIFICATION_SENT_FILE" ]; then

        curl -s \

             --form-string "token=$PUSHOVER_APP_TOKEN" \

             --form-string "user=$PUSHOVER_USER_KEY" \

             --form-string "message=Domain $DOMAIN returned HTTP status $HTTP_STATUS" \

             https://api.pushover.net/1/messages.json

        touch "$NOTIFICATION_SENT_FILE"

    fi

else

    rm -f "$NOTIFICATION_SENT_FILE"

fi

Der Rest des Scripts führt die Abfrage des HTTP Status mit curl aus. Wenn nicht Status "200" ausgegeben wird, sendet das Script eine Meldung an Pushover und legt eine temporäre Logdatei an. Solange diese Datei vorhanden ist, also solange nicht Status "200" ausgegeben wird, wird keine weitere Meldung an Pushover gesendet.

Sobald wieder Status "200" abgefragt wird, wird die Logdatei automatisch gelöscht und das Ganze geht von vorne los.

Um die Datei ausführbar zu machen, muss jetzt noch folgender Befehl ausgeführt werden:

sudo chmod -X Check_wutticom.sh

Wenn ihr das Script regelmäßig ausführen wollt, dann legt ihr dafür noch einen Cronjob an.

That's it.

Mit diesem simplen Workaround kann man sehr einfach und mit wenig Aufwand den Status aller seiner Domains abfragen und braucht dafür nicht den Aufwand betreiben sich auf seinem Pi ein Monitoring wie Icinga oder Check_MK zu installieren, welches mit Kanonen auf Spatzen schießt.

Außerdem spart man sich einen kostenpflichtigen Cloudienst, welcher auch nichts anderes macht und das Ergebnis ist nicht genauer.

Probiert das mal aus und ich freue mich, wenn ihr mir einen Kommentar hinterlasst und vielleicht habt ihr noch tolle weitere Ideen oder Infos.

Über

Hier soll es um Technik, Politik und meine persönliche Meinung gehen. Da ich meinen RaspberryPi mit PiHole sehr mag und daran gerne bastle, versuche ich hier auch immer Neuigkeiten darum zu teilen.

Politisch links-neutral und ich glaube fest daran, dass alle Menschen einfach nur Menschen sind.