Linux Systemüberwachung
aktueller Systemstatus
Prozess-Monitoring
mit grafischer Benutzeroberfläche (GUI)
Eine weit verbreitete Anwendung zur Systemüberwachung ist das Programm „gnome-system-monitor“.
im Terminal (CLI)
Auf allen (uns bekannten) Linux-Derivaten ist die Anwendung „top“ zu Systemüberwachung bereits vorinstalliert:
tldr top
Eine etwas „modernere“ Umsetzung ist „htop“:
sudo apt install --yes top && tldr htop
Noch umfangreicher (uns auch als Webserver via Browser lesbar) ist „glances“. Glances ist allerdings mit etlichen Abhängigkeiten und ~70MB Speichervolumen1) leider kein Leichtgewicht.
sudo apt install --yes glances && tldr glances
Arbeitsspeicher
Zur Ausgabe von Informationen zu Arbeitsspeicher und Swap kann folgende Kommandozeile verwendet werden:
free --human
Datenträger
Zur Ausgabe von Informationen zu Dateisystemen kann folgende Kommandozeile verwendet werden:
df --human
Protokolldateien (Logs)
Logdateien befinden sich üblicherweise im Verzeichnis „/var/log“. Eine Übersicht der enthaltenen Dateien und Verzeichnisse erhält man mit folgender Kommandozeile:
ls /var/log/
Allgemeine Systemmeldungen enthält die Datei „/var/log/syslog“. Um die gesamte Datei ausgeben zu lassen, kann folgende Kommandozeile verwendet werden:
cat /var/log/syslog
Um fortlaufend neue Meldungen ausgeben zu lassen, kann das Kommando „tail“ mit der Option „–follow“ verwendet werden:
tail --follow /var/log/syslog
Um ausschließlich neue Meldungen ausgeben zu lassen, kann die o.g. Kommandozeile um die Option „–lines=0“ ergänzt werden:
tail --lines=0 --follow /var/log/syslog
Um Logdateien nach bestimmten Suchwörtern zu filtern, verwendet man „grep“:
grep "Suchwort" /var/log/*
Ein praktisches Beispiel zur Suche nach Fehlern ist z.B. folgende Kommandozeile:
grep 'error\|fail\|warn\|malfunction' /var/log/*
Um Statusmeldungen des Init-Systems „systemd“ ausgeben zu lassen, verwendet man das Kommando „journalctl“:
man journalctl
Um Statusmeldungen eines bestimmten Dienstes ausgeben zu lassen, kann man das Kommando „journalctl“ um die Option „–unit=“ gefolgt vom Namen des Dienstes verwenden. Ein Beispiel:
journalctl --unit=cron
Um den aktuellen Status eines Dienstes ausgeben zu lassen, verwendet man „service $dienst status“. Ein Beispiel:
service cron status
Um Statusmeldungen des Linux-Kernels ausgeben zu lassen, verwendet man das Kommando „dmesg“:
man dmesg
Archive
Das maximale Alter der einzelnen Logdateien sowie deren (komprimierte) Archive können mit „logrotate“ konfiguriert werden. Die Ausgabe der aktuellen Einstellungen erhält man mit folgender Kommandozeile:
cat /etc/logrotate.conf /etc/logrotate.d/*
Email-Benachrichtigungen
Für den Versand von Systemnachrichten an festgelegte Mailadressen sollte zunächst ein Minimal-Mailer eingerichtet werden. Wir schließen uns der Empfehlung von heise.de an und empfehlen zu diesem Zweck das Werkzeug „nullmailer“.
Die Installation erfolgt mit folgender Kommandozeile:
sudo apt update && sudo apt install --yes nullmailer
Bei der Erstinstallation werden bereits ein paar Informationen abgefragt; nach der Installation kann die Konfiguration mittels „sudo dpkg-reconfigure nullmailer“ angepasst werden.
Als Mail-Name kann z.B. der Hostname und ggf. die Domäne verwendet werden. Ein Beispiel
raspberrypi01.local
Im nächsten Schritt muss ein Postausgangsserver (smtp) konfiguriert werden. ACHTUNG: Das Passwort zur Anmeldung am SMTP-Server wird im Klartext(!) in der Datei /etc/nullmailer/remotes gespeichert!2) Es empfiehlt sich also eine separate Emailadresse nur für Systemmails zu verwenden. Hierzu ein Beispiel:
mail.server.tld smtp --port=587 --starttls --user=logs@meine-domain.tld --pass=********************************************
Im letzten Schritt kann eine Zieladresse konfiguriert werden, an welche lokale E-Mails umgeleitet werden sollen. In unserem Beispiel ist Absendeadresse = Empfangsadresse:
logs@meine-domain.tld
Werkzeuge
Für eine gute Zusammenfassung von Systemmeldungen empfehlen wir „logwatch“:
sudo apt install --yes logwatch
Eine manuelle Ausgabe von logwatch erhält man durch dessen Aufruf:
logwatch
Um nur Meldungen zu einem bestimmten Dienst zu erhalten, ergänzt man das Kommando um die Option „–service“ so wie den Namen des Dienstes. Ein Beispiel:
logwatch --service sshd
Wenn die System-Emailbenachrichtigungen eingerichtet wurden, erhält man tägliche Zusammenfassungen per Mail.
Eigene Log-Meldungen erstellen
Um selbst Logmeldungen (z.B. aus Skripten) in das Syslog zu schreiben, verwendet man das Kommando „logger“. Ein einfaches Beispiel:
logger "Testeintrag" && tail /var/log/syslog
Hinter dem Hostnamen wird ein Tag (Kennzeichnung) verwendet. In dem vorherigen Beispiel wurde kein Tag definiert, so dass stattdessen der Name des Benutzers verwendet wurde. Möchte man ein Tag verwenden, so ergänzt man die Option „–tag“ entsprechend:
logger --tag="KENNZEICHNUNG" "Testeintrag"
In selbst-geschriebenen Skripten kann es sinnvoll sein das Skript selbst als Kennzeichnung zu verwenden:
logger --tag="$0" "Testeintrag"
Hierzu ein Beispielskript:
echo "#! /usr/bin/env bash" > /tmp/Testskript.sh echo "logger --tag=\"\$0\" \"Testeintrag\"" >> /tmp/Testskript.sh chmod +x /tmp/Testskript.sh && /tmp/Testskript.sh
Soll nur der Skriptname (ohne Pfad) als Tag verwendet werden, so kann man eine Subshell mit dem Kommando „basename“ verwenden:
logger --tag="$(basename "$0")" "Testeintrag"