Protokollierung und Ansicht von Systemlogs: Kommandos journalctl
1. Warum mit Logs arbeiten?
Protokolle (oder Logs) sind dein persönlicher "Detektiv", der jede wichtige Operation im System aufzeichnet. Sie erfassen die Aktionen des Kernels, der Anwendungen, Dienste und anderer Systemkomponenten. Logs sind ein äußerst wichtiges Werkzeug zur Diagnose von Problemen und zur Überwachung des Systembetriebs.
Stell dir vor, dein Server reagiert plötzlich nicht mehr. Anstatt wie Sherlock Holmes herumzurätseln, was schiefgelaufen ist, kannst du einfach in die Protokolle schauen – dort steht alles schwarz auf weiß. Zum Beispiel: "Dienst ssh
ist abgestürzt", "Festplatte ist voll", "Katze ist über die Tastatur gelaufen und hat einen wichtigen Dienst gestoppt". Logs erzählen dir alles.
Die Arbeit mit Systemprotokollen hilft dir dabei:
- Probleme zu diagnostizieren. Wenn etwas schiefgeht, kannst du in den Logs Fehler oder Warnungen finden.
- Dienste zu überwachen. Zum Beispiel herausfinden, warum die PostgreSQL-Datenbank gestoppt wurde oder wann der Webserver zuletzt aktualisiert wurde.
- Analysen zu sammeln. Überwachung der Leistung und Metriken von Diensten.
- Sicherheit zu erhöhen. Logs können dir Versuche zeigen, über SSH einzubrechen, oder unbefugte Zugriffe aufdecken.
2. Einführung in journalctl
journalctl
ist ein mächtiger Befehl zum Anzeigen und Filtern von System-Logs in Linux. Es arbeitet mit systemd-journald
— einem Logging-System, das von systemd
verwaltet wird.
Grundlegende Aktionen mit journalctl
Zuallererst schauen wir uns an, wie wir dieses Tool nutzen können. Öffne das Terminal und gib ein:
journalctl
Dieser Befehl zeigt dir alle System-Logs, die chronologisch sortiert sind. Falls du etwas Einfaches erwartest, mach dich bereit: Logs füllen normalerweise mehrere Bildschirme. Keine Panik, wir lernen gleich, wie man sie filtert.
Um die Anzeige der Logs zu beenden, drücke q
(du hast bestimmt schon die Ähnlichkeit zwischen less
und journalctl
bemerkt, oder?).
Logs nach Zeit filtern
Jetzt werden wir die Logs magisch auf einen bequemeren Bereich reduzieren.
Logs der letzten Stunde anzeigen
journalctl --since "1 hour ago"
Logs für einen bestimmten Tag anzeigen
journalctl --since "2023-10-31"
Einen Zeitbereich festlegen
Möchtest du Ereignisse von 8 Uhr bis 9 Uhr sehen? Kein Problem:
journalctl --since "2023-10-31 08:00:00" --until "2023-10-31 09:00:00"
Das Filtern nach Zeit ist nützlich, z. B. wenn du weißt, dass ein Problem zu einem bestimmten Zeitpunkt begann. Vergleich: Du liest nicht das ganze Buch, um herauszufinden, wer der Mörder ist — du schaust einfach die letzten Seiten an.
Mit Logs eines bestimmten Dienstes arbeiten
Statt sich mit dem ganzen System zu beschäftigen, kannst du dich auf einen bestimmten Dienst konzentrieren. Zum Beispiel möchtest du sehen, wie der Webserver nginx
arbeitet:
journalctl -u nginx
Wenn du nur Einträge der letzten Stunde sehen möchtest (wir alle lieben frische Infos):
journalctl -u nginx --since "1 hour ago"
Kurzliste von Beispielen:
-u ssh
: Logs für den SSH-Dienst.-u cron
: Logs für CRON-Jobs.-u mysql
: Logs der MySQL-Datenbank.
Logs in Echtzeit lesen
Wenn du gerade etwas reparierst, könnte es nützlich sein, die Logs in Echtzeit zu beobachten — wie bei einem Fußballspiel. Dafür nutze den Befehl:
journalctl -f
Die Option -f
funktioniert ähnlich wie tail -f
, indem sie neue Log-Einträge in Echtzeit anzeigt.
Zum Beispiel, versuche den Befehl auszuführen und parallel einen Dienst neu zu starten:
sudo systemctl restart ssh
Du wirst Änderungen sehen — ein Eintrag über den Neustart erscheint in den Logs.
Fehler in Logs suchen
Oft sind Logs lang, und dort manuell nach relevanten Informationen zu suchen, ist fast wie die Nadel im Heuhaufen zu suchen. Deshalb kannst du nach Schlüsselwörtern suchen.
Einfache Nutzung:
journalctl | grep "ERROR"
Dieses Beispiel zeigt nur die Zeilen, die das Wort ERROR
enthalten. Du kannst ERROR
durch etwas anderes ersetzen, z. B. WARNING
, failed
oder panic
.
3. Besondere Optionen für journalctl
Anzeigen von Einträgen nur nach einem Neustart
Möchtest du wissen, was nach dem letzten Start des Systems passiert ist? Geheimnisvoll? Einfach so machen:
journalctl -b
Jeder Neustart des Systems wird als separater "Block" erfasst. Wenn du Einträge nach dem vorletzten Start ansehen möchtest (ja, das kann nützlich sein):
journalctl -b -1
Filterung nach Benutzer oder PID
Manchmal muss man die Aktionen eines bestimmten Benutzers oder Prozesses verfolgen. Zum Beispiel:
journalctl _UID=1000
Ersetze 1000
durch die Benutzer-ID (du kannst die ID mit dem Befehl id
herausfinden).
Für die Filterung nach PID (Prozess-ID):
journalctl _PID=1234
4. Praktische Beispiele
Fehler im SSH-Dienst finden.
Du möchtest wissen, warum SSH die Verbindung verweigert. Verwende:
journalctl -u ssh | grep "ERROR"
Analyse der Protokolle der letzten 24 Stunden für CRON.
Angenommen, du überprüfst, warum dein tägliches Skript nicht ausgeführt wurde:
journalctl -u cron --since "yesterday"
Echtzeit-Monitoring des Webservers.
Der Webserver ist unter Last? Überprüfe die Protokolle auf Fehler:
journalctl -u nginx -f
Übung zur Selbstpraxis
- Finde die Fehlerprotokolle für den SSH-Dienst der letzten 24 Stunden.
- Nutze
journalctl
, um Protokolle für CRON nur für den Morgen auszugeben. Stelle sicher, dass der Befehl mit dem korrekten Zeitbereich funktioniert. - Richte ein Echtzeit-Monitoring der
systemd
-Protokolle ein und starte einige Systemdienste, um deren Status in den Protokollen zu sehen.
Logging ist nicht nur ein Nachschlagewerk für Fehler oder Problemdiagnosen. Es ist dein geheimer Agent, der das gesamte Betriebssystem überwacht. Sobald du den Befehl journalctl
beherrschst, hast du ein mächtiges Werkzeug zur Analyse, Optimierung und Sicherstellung einer stabilen Linux-Systemarbeit unter allen Bedingungen.
GO TO FULL VERSION