====== 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 Speichervolumen((Stand: 05.07.2020)) 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 [[https://www.heise.de/select/ct/2018/12/1528000378377701|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!((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.)) 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" ===== Links & Quellen ===== * [[suche>Linux Systemueberwachung|Websuche nach "Linux Systemueberwachung"]] {{tag>Linux Systemüberwachung Logs}}