Aus LinuxUser 12/2015

Individuelle Lösungen zur Systemüberwachung und -kontrolle

© Lightwise, 123RF

Fest im Blick

Überwachungstools von der Stange bieten oft viel zu viele Funktionen oder gerade nicht das Gewünschte. Mithilfe konventioneller Shellskripte bauen Sie sich individuelle Überwachungsroutinen aber leicht selbst.

Egal, ob Sie eine Heizungsanlage, einen Webserver, Datenbanksysteme, Netzwerkverbindungen, Benutzer, Lüfter oder die Rechnertemperatur automatisch überwachen und steuern möchten: Mit einfachen Shell-Routinen funktioniert das in der Regel zuverlässig und schnell. Einmal erstellte Skripte lassen sich dabei leicht für unterschiedliche Distributionen und Situationen anpassen.

Doch die Überwachung will durchdacht sein: Im Falle der eingangs erwähnten Überwachung eines Webservers genügt es nicht, nur zu prüfen, ob der Dienst läuft – schon der Fragestellung fehlt jegliche Präzision. Läuft die Hardware? Um das festzustellen, reicht ein schlichtes ping. Eine positive Antwort bedeutet aber noch lange nicht, dass der Webserver-Daemon funktioniert. Dafür müssten Sie zum Beispiel lokal auf dem Server den Prozessstatus abfragen (ps -C Dienst oder etwa service Dienst status).

Doch damit wissen Sie immer noch nicht, ob Nutzer die Daten des Webservers auch wirklich abrufen können. Dies müssten Sie regelmäßig manuell per Browser oder besser automatisch mit einem Kommandozeilenwerkzeug kontrollieren – und zwar idealerweise von außerhalb der eigenen geschützten Netzwerkinfrastruktur. Andernfalls riskieren Sie, sich durch Fehlinterpretationen in falscher Sicherheit zu wiegen – wenn etwa ein Router nicht mehr funktioniert.

Sensoren

Beim Überwachen von Programmausführungen gilt es, auf die Exit-Codes zu achten, die Terminalanwendungen und Kommandos in der Regel nach dem planmäßigen oder unplanmäßigen Ende des Programms ausgeben. Der Wert 0 steht dabei in der Regel für einen erfolgreichen Durchlauf, andere Codes für einen mehr oder weniger gravierenden Fehler. Die Tabelle „Prüfwerkzeuge“ stellt eine kleine Auswahl von gängigen Tools zur Systemüberwachung vor.

Prüfwerkzeuge

Prüfziel Werkzeug
Erreichbarkeit von Webseiten httping(1)
Datenbank-Shellclient für PostgreSQL-RDBMS psql
Erreichbarkeit von Rechnern ping
Namensauflösung host
Angemeldete Benutzer users
Dienstestatus (SysVinit) /etc/init.d/Dienst status
Dienstestatus (Systemd) systemctl status Dienst
Plattenspeicherplatz df
Temperatur sensors
Lüfteraktivität sensors(2)
Portzugriffe netread(3)
(1) Paket httping; (2) Paket lm-sensors; (3) Paket netrw

Wie das Beispiel der Überwachung eines Webservers zeigt, verursacht das Monitoring in manchen Fällen ein wenig Aufwand (Abbildung 1). In diesem Fall läuft idealerweise die Überwachung nicht innerhalb des Hauses, sondern außerhalb der eigenen IT-Infrastruktur, sodass Ausfälle nicht auch gleich das Überwachungssystem lahmlegen. Damit decken Sie aber auch fast alle Fälle von Störungen ab: Websperren, Überlastungsangriffe, allgemeine Netzüberlastung und selbst den Fall einer physikalischen Netzabtrennung durch den sprichwörtlichen Bagger.

Abbildung 1: Ablaufschema der Funktionsüberwachung eines Webservers.
Abbildung 1: Ablaufschema der Funktionsüberwachung eines Webservers.

Als Reaktion könnten Sie (automatisch) das Anfahren einer redundanten Anlage an anderer Stelle beziehungsweise mit anderer Anbindung an das Internet veranlassen. Listing 1 zeigt einen Ansatz, der als erste Reaktion zur Fehlereingrenzung bereits weitere Fragen abklärt (DNS-Problem, Netzwerkanbindung und mehr). Das Skript lässt sich bei Bedarf sehr einfach erweitern. Beachten Sie dabei die Stolperfalle, dass manche Internetanbieter beim Aufruf einer nicht erreichbaren Internetseite versuchen, Ihnen mit einer Navigationshilfe unter die Arme zu greifen. Werten Sie hier unbedingt den HTTP-Statuscode mit aus.

Listing 1

#! /bin/sh
HOST=www.example.com
IP=93.184.216.34
while true; do
  # Webseite abrufen, Ausgabe in Variable
  B=$(httping -G -g $HOST -c 1 -s -m)
  # Exit-Code in Variable speichern
  A=$?
  # Ausgabe von httping aufteilen
  C=$(echo $B  | cut -d \  -f1)
  D=$(echo $B  | cut -d \  -f2)
  # Ausgabe der Variablen
  echo "Exit-Code: $A"
  echo "STATUS: $C"
  # Namensaufloesung pruefen
  if [ "$C" = "-1" ]; then
    host $HOST
    # Exit-Code speichern ...
    NA=$?
    # ... und auswerten
    if [ $NA = 0 ]; then
      echo "Namensaufloesung ok"
    else
      echo "Fehler bei Namensauflösung"
      # Erreichbarkeit per IP-Adresse?
      ping -c 1 -q $IP
      # Exit-Code speichern ...
      E=$?
      # ... und auswerten
      if [ $E -eq 0 ]; then
        echo "Rechner im Netzwerk erreichbar"
      else
        echo "Rechner nicht im Netzwerk erreichbar"
      fi
    fi
  fi
  # Hinweis, falls Seite nicht abrufbar
  if [ $D -ne 200 ]; then
    echo "Seitenfehler $D"
  fi
  sleep 15
done

Das im Skript ausgeführte Kommando httping (meist im Paket httping) ruft die angegebene Webseite ab und zeigt zusätzliche Informationen an, wie etwa die Latenz (siehe Kasten „Webserver anpingen“). So lässt sich ein Webserver sehr leicht auf seine Funktion hin überwachen. Das gezeigte Systemüberwachungsskript stellt die Sensorikseite der Überwachung dar, üblicherweise ist die Reaktionsseite in ein zweites Skript ausgelagert.

Webserver anpingen

Das Programm Httping hilft, den Zugriff auf einen Webserver zu prüfen. Optional ermittelt es auch das Antwortzeitverhalten, sofern Sie die Verbindung nicht über einen Proxyserver führen oder mittels der Option -G den kompletten Seiteninhalt übertragen lassen; das würde die Antwortzeiten verfälschen. Der grundsätzliche Aufruf erfolgt in der Form httping -g URL, wobei Sie mit der Option -p Port einen anderen Port also den üblichen Port 80 angeben.

Httping erzeugt auf Wunsch neben den Exit-Codes (0 = Funktion, 127 = Fehler) noch weitere Ausgaben wie die Antwortzeit, die im Fehlerfall den Wert -1 annimmt. Einer Variable übergeben, lösen Sie auf Basis dieser Ergebnisse entsprechende Alarme oder Reaktionen aus. Zum besseren Verständnis der Funktion starten Sie das kleine Beispielskript aus Listing 2 auf einem Rechner. Die entsprechenden Ausgaben zeigt Listing 3.

Der erste Aufruf zielt auf eine allgemein funktionierende Webseite. Dabei zeigt Httping die Antwortzeit und den HTTP-Statuscode 200 an. Richten Sie Httping auf eine funktionierende Domain, aber eine nicht existierende Webseite, gibt das Prüfwerkzeug den klassischen 404-Fehler mit der Antwortzeit -1 aus. Gibt es schon die Domain nicht, dann leitet in unserem Beispiel der Internetanbieter auf eine eigene Navigationshilfe mit integrierter Suchfunktion weiter. Daher meldet Httping auch nicht ein „Resolving beischpiel.de failed“, sondern gibt mit 302 den entsprechenden Status-Code für die Umleitung aus.

Listing 2

#! /bin/sh
echo "Diese Webseite funktioniert:"
httping -g http://www.example.com -c 1 -s -m
echo "-------------------------------------------------"
echo "Domain vorhanden, aber Seite nicht gültig:"
httping -g http://example.com/seite-gibts-nicht.html -c 1 -s -m
echo "-------------------------------------------------"
echo "Domain nicht vorhanden, Umleitung durch Provider:"
httping -g http://beischpiel.com -c 1 -s -m

Listing 3

$ ./listing2.sh
Diese Webseite funktioniert:
206,761122 200
-------------------------------------------------
Domain vorhanden, aber Seite nicht gültig:
-1 404
-------------------------------------------------
Domain nicht vorhanden, Umleitung durch Provider:
-1 302

Datenbanken überwachen

Neben Webservern bilden Datenbanken einen weiteren wichtigen Baustein einer IT-Infrastruktur, den es ebenfalls zu überwachen gilt. Sehr häufig kommen hier MySQL, MariaDB oder PostgreSQL zum Einsatz; auf Letzteres konzentrieren wir uns in diesem Beispiel. Zum Überwachen des Dienstes legen Sie einen eigenen Benutzer und für diesen eine Datenbank mit einer Tabelle darin an. Dadurch versetzen Sie das Shellskript in die Lage, die Abfrage automatisch vorzunehmen. Im Beispiel trägt die Datenbank den Namen waechter, in dieser findet sich die Tabelle wacht mit der Spalte zahl sowie ein Datensatz (Abbildung 2).

DIESEN ARTIKEL ALS PDF KAUFEN
EXPRESS-KAUF ALS PDFUmfang: 7 HeftseitenPreis €0,99
(inkl. 19% MwSt.)
KAUFEN
LinuxUser 12/2015 KAUFEN
EINZELNE AUSGABE Print-Ausgaben Digitale Ausgaben
ABONNEMENTS Print-Abos Digitales Abo
TABLET & SMARTPHONE APPS
Deutschland

Hinterlasse einen Kommentar

  E-Mail Benachrichtigung  
Benachrichtige mich zu: