Linux Systemüberwachung

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

Zur Ausgabe von Informationen zu Arbeitsspeicher und Swap kann folgende Kommandozeile verwendet werden:

free --human

Zur Ausgabe von Informationen zu Dateisystemen kann folgende Kommandozeile verwendet werden:

df --human

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  

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/*

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

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.

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"

1)
Stand: 05.07.2020
2)
Die Datei „/etc/nullmailer/remotes“ ist war nur für den Benutzer „root“ lesbar, allerdings kann z.B. durch den Zugriff von einem Live-Betriebssystem auch der root des Livesystems die Datei lesen.
  • linux_systemueberwachung.txt
  • Zuletzt geändert: 31.07.2023
  • von 127.0.0.1