AA_PO-24782_lightwise-123RF.jpg

© Lightwise, 123RF

Individuelle Lösungen zur Systemüberwachung und -kontrolle

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.

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).

Abbildung 2: Einfache Datenbank für die Funktionskontrolle eines PostgreSQL-Servers.

Der Shell-Client psql verwendet die klassischen Exitcodes 0 bei Funktion und 1 für einen Fehlschlag. Das Shellskript im Listing 4 unterscheidet nun, ob lediglich aus irgendeinem Grund die Daten nicht zugänglich sind oder der Dienst überhaupt nicht arbeitet. Abbildung 3 zeigt den Ablauf, wobei wir probehalber einmal die Daten löschten und das andere Mal den Dienst stoppten. Sofern das Skript auf dem gleichen Rechner läuft wie das relationale Datenbankmanagementsystem, können Sie auch andere Aktionen ausführen lassen.

Listing 4

#! /bin/sh
while true; do
  # Datum und Zeit in Variable legen
  ZEIT=$(date +%d.%m.%Y:%H:%M:%S)
  # Datenbankabfrage für Exit-Code-Gewinnung
  M=$(psql -q -d waechter -c "select * from wacht;")
  # Exitcode speichern und auswerten
  A=$?
  if [ $A -eq 0 ]; then
    echo "$ZEIT Datenbank arbeitet"
  elif [ $A -eq 1 ]; then
    echo "$ZEIT Daten nicht gefunden"
  elif [ $A -eq 2 ]; then
    echo "$ZEIT Datenbank inaktiv"
  fi
  sleep 60
done
Abbildung 3: Ablauf der Prüfung eines PostgreSQL-Servers auf Funktion.

Diesen Artikel als PDF kaufen

Express-Kauf als PDF

Umfang: 7 Heftseiten

Preis € 0,99
(inkl. 19% MwSt.)

LinuxCommunity kaufen

Einzelne Ausgabe
 
Abonnements
 
TABLET & SMARTPHONE APPS
Bald erhältlich
Get it on Google Play

Deutschland

Ähnliche Artikel

Kommentare

Infos zur Publikation

LU 12/2017: Perfekte Videos

Digitale Ausgabe: Preis € 5,95
(inkl. 19% MwSt.)

LinuxUser erscheint monatlich und kostet 5,95 Euro (mit DVD 8,50 Euro). Weitere Infos zum Heft finden Sie auf der Homepage.

Das Jahresabo kostet ab 86,70 Euro. Details dazu finden Sie im Computec-Shop. Im Probeabo erhalten Sie zudem drei Ausgaben zum reduzierten Preis.

Bei Google Play finden Sie digitale Ausgaben für Tablet & Smartphone.

HINWEIS ZU PAYPAL: Die Zahlung ist ohne eigenes Paypal-Konto ganz einfach per Kreditkarte oder Lastschrift möglich!

Stellenmarkt

Aktuelle Fragen

Installation Linux mint auf stick
Reiner Schulz, 10.12.2017 17:34, 0 Antworten
Hallo, ich hab ein ISO-image mit Linux Mint auf einem Stick untergebracht Jetzt kann ich auch...
Canon Maxify 2750 oder ähnlicher Drucker
Hannes Richert, 05.12.2017 20:14, 4 Antworten
Hallo, leider hat Canon mich weiterverwiesen, weil sie Linux nicht supporten.. deshalb hier die...
Ubuntu Server
Steffen Seidler, 05.12.2017 12:10, 1 Antworten
Hallo! Hat jemand eine gute Anleitung für mich, wie ich Ubuntu Server einrichte? Habe bisher...
Tinte sparen bei neuem Drucker
Lars Schmitt, 30.11.2017 17:43, 2 Antworten
Hi Leute, ich habe mir Anfang diesen Monats einen Tintenstrahldrucker angeschafft, der auch su...
Für Linux programmieren
Alexander Kramer, 25.11.2017 08:47, 3 Antworten
Ich habe einen Zufallsgenerator entworfen und bereits in c++ programmiert. Ich möchte den Zufalls...