journalctl entmystifiziert: Ihr Leitfaden zu Linux-Systemprotokollen

Beherrschen Sie das systemd-Dienstprogramm `journalctl`, um Linux-Systemprotokolle effektiv anzuzeigen, zu filtern und zu analysieren. Dieser Leitfaden behandelt wesentliche Befehle für die Echtzeitüberwachung, zeitbasierte Abfragen, die Isolierung von Protokollen von Diensten und die Verwaltung der Journal-Festplattennutzung für eine leistungsstarke Fehlerbehebung.

29 Aufrufe

journalctl entmystifiziert: Ihr Leitfaden zu Linux-Systemprotokollen

Das Dienstprogramm journalctl ist der zentrale Befehl zur Anzeige und Analyse der strukturierten Protokolle, die vom Journaling-System von systemd verwaltet werden. Da dies der moderne Standard für die Protokollierung auf vielen Linux-Distributionen ist, ist das Verständnis von journalctl entscheidend für die effektive Systemadministration, Dienstverwaltung und insbesondere für die Fehlerbehebung.

Im Gegensatz zu herkömmlichen textbasierten Protokolldateien (wie denen in /var/log) erfasst systemd Protokolle in einem binären, indizierten Format. Dies ermöglicht leistungsstarke Abfragen basierend auf Zeit, Dienst, Boot-ID und mehr. Dieser Leitfaden führt Sie durch die wesentlichen Befehle, die Sie benötigen, um das volle Potenzial der historischen und Echtzeitereignisse Ihres Systems auszuschöpfen.


Das Systemd-Journal verstehen

Bevor wir uns mit den Befehlen befassen, ist es hilfreich zu wissen, was journalctl verwaltet. Das systemd-Journal sammelt Protokolle vom Kernel, von Diensten (Units), Anwendungen und sogar vom Systemstartprozess. Diese Protokolle werden typischerweise in strukturierten Binärdateien gespeichert, was die Suche und Filterung im Vergleich zu herkömmlichen flachen Dateien wesentlich beschleunigt.

Schlüsselkonzepte:

  • Persistenz: Protokolle können so konfiguriert werden, dass sie über Neustarts hinweg dauerhaft gespeichert werden (persistenter Modus) oder nur im Speicher verbleiben (volatiler Modus).
  • Strukturierte Daten: Protokolle enthalten Metadaten (wie Unit-Name, Priorität, Boot-ID), die journalctl zur Filterung nutzt.

Wesentliche Anzeige-Befehle

Die häufigste Anforderung ist das einfache Anzeigen der Protokolle. Hier sind die grundlegenden Befehle, um mit der Erkundung der Systemhistorie zu beginnen.

1. Alle Protokolle anzeigen

Um jeden Eintrag anzuzeigen, den das Journal seit Beginn der Protokollierung gesammelt hat, verwenden Sie den Befehl ohne Argumente:

journalctl

Standardmäßig wird diese Ausgabe mit einem Tool wie less seitenweise dargestellt, sodass Sie mit den Pfeiltasten oder der Leertaste nach oben und unten navigieren können.

2. Protokolle in Echtzeit anzeigen (Folgen)

Ähnlich wie bei der Verwendung von tail -f können Sie Protokolle überwachen, während sie in das Journal geschrieben werden. Dies ist von unschätzbarem Wert, wenn ein bestimmter Dienst gestartet oder debuggt wird:

journalctl -f

Um die Echtzeitansicht zu verlassen, drücken Sie Strg+C.

3. Ausgabe nach Zeilenanzahl begrenzen

Wenn Sie nur die neuesten Einträge benötigen, verwenden Sie das Flag -n, um die Anzahl der Zeilen anzugeben:

# Zeigt die letzten 20 Protokolleinträge an
journalctl -n 20

4. Protokolle ab einem bestimmten Zeitpunkt anzeigen

Die Filterung nach Zeit ist eine der stärksten Funktionen von journalctl. Sie können relative oder absolute Zeitstempel verwenden.

Beispiele für relative Zeiten:

Befehl Beschreibung
journalctl --since "1 hour ago" Protokolle der letzten Stunde.
journalctl --since "yesterday" Protokolle ab Beginn des vorangegangenen Kalendertages.
journalctl --since "2023-10-26 14:30:00" Protokolle nach einem bestimmten Datum und einer bestimmten Uhrzeit.

Tipp: Sie können --since und --until kombinieren, um einen genauen Bereich festzulegen, z. B.: journalctl --since "2023-10-26" --until "2023-10-27 00:00:00".


Protokolle nach Unit, Dienst oder Prozess filtern

Einer der wichtigsten Anwendungsfälle von journalctl ist die Isolierung von Nachrichten, die sich auf eine bestimmte systemd-Unit (Dienst) beziehen.

Nach Dienstnamen filtern

Verwenden Sie das Flag -u (oder --unit) gefolgt vom Dienstnamen (z. B. sshd.service, nginx.service):

# Zeigt nur Protokolle für den Apache-Webserver-Dienst an
journalctl -u apache2.service

# Protokolle für den Docker-Dienst verfolgen
journalctl -u docker.service -f

Nach Boot-ID filtern

systemd verfolgt Protokolle über verschiedene Systemstarts hinweg. Um Protokolle von einem früheren Startvorgang anzuzeigen, listen Sie zunächst die verfügbaren Starts auf:

journalctl --list-boots

Dies gibt eine indizierte Liste aus (z. B. -1, -2, 0 für den aktuellen Start). Sie können dann den Index oder die vollständige Boot-ID verwenden:

# Zeigt Protokolle vom unmittelbar vorhergehenden Start an
journalctl -b -1

# Zeigt Protokolle von einer bestimmten Boot-ID an (verwenden Sie die oben aufgelistete lange ID)
journalctl -b a1b2c3d4e5f6...

Nach Kernel-Meldungen filtern

Um nur Meldungen anzuzeigen, die vom Kernel stammen (ähnlich wie bei der Verwendung von dmesg):

journalctl -k
# Oder gleichbedeutend:
journalctl -b -k

Erweiterte Filterung und Ausgabe-Steuerung

Effektive Fehlerbehebung erfordert oft die Kombination von Filtern und die Steuerung des Ausgabeformats.

1. Nach Prioritätsstufe filtern

Protokolle erhalten Prioritätsstufen (0=Notfall, 7=Debug). Sie können das Flag -p (oder --priority) verwenden, um Meldungen einer bestimmten oder höheren Schweregradstufe anzuzeigen:

Prioritätsstufe Numerischer Wert
err (Fehler) 3
warning 4
notice 5
info 6
# Zeigt alle Fehler-, kritischen und Notfallmeldungen des SSH-Dienstes an
journalctl -u sshd.service -p err

2. Nach spezifischem Text suchen

Wenn die Standardfilterung nicht ausreicht, können Sie die Ausgabe an grep weiterleiten, obwohl journalctl einen eingebauten Mechanismus für die Textsuche bietet, der bei strukturierten Daten oft effizienter ist:

# Durchsucht alle Protokolle nach Zeilen, die das Wort 'failed' enthalten
journalctl | grep failed

# Oder verwenden Sie die Option --grep für eine einfachere Filterung (falls verfügbar/bevorzugt)
journalctl --grep=failed

3. Ausgabeformat ändern

Für Skripte oder die Übertragung von Protokollen an andere Tools ist die Änderung des Ausgabeformats unerlässlich. Die Standardeinstellung ist pretty (menschenlesbar).

  • --output=json: Gibt Einträge als strukturierte JSON-Objekte aus.
  • --output=short: Ähnlich wie pretty, aber weniger farbig.
  • --output=export: Gibt Roh-Journal-Einträge zur Archivierung aus.
# Gibt die letzten Protokolle als JSON aus
journalctl -n 5 --output=json

4. Filter kombinieren

Filter stapeln sich multiplikativ. Um alle Fehler von Nginx zu sehen, die in den letzten 10 Minuten protokolliert wurden:

journalctl -u nginx.service --since "10 minutes ago" -p err

Verwaltung der Journalgröße und Persistenz

Mit der Zeit kann das Journal erheblichen Festplattenspeicher beanspruchen, insbesondere wenn es für die persistente Protokollierung konfiguriert ist. Systemadministratoren müssen seine Größe verwalten.

Aktuelle Nutzung prüfen

Um zu sehen, wie viel Festplattenspeicher die aktuellen Journaldateien belegen:

journalctl --disk-usage

Alte Protokolle bereinigen

Sie können Protokolle basierend auf Zeit oder Gesamtgröße löschen.

Bereinigung nach Zeit:

# Behält nur Protokolle der letzten 7 Tage
journalctl --vacuum-time=7d

Bereinigung nach Größe:

# Reduziert die Gesamtprotokollgröße auf maximal 500 Megabyte
journalctl --vacuum-size=500M

Warnung: Seien Sie vorsichtig beim Löschen von Protokollen, insbesondere denen älterer Starts (-b). Stellen Sie sicher, dass wichtige Diagnoseinformationen nicht vorzeitig entfernt werden.

Fazit

journalctl ist ein mächtiges, flexibles Werkzeug, das die Protokollierung über einfache Textdateien hinaushebt. Indem Sie die zeitbasierte Filterung (--since, --until), die Unit-Isolierung (-u) und die Echtzeitüberwachung (-f) beherrschen, erhalten Sie eine granulare Kontrolle über die Überwachung des Systemzustands. Ob Sie den Status eines Dienstes überprüfen oder einen Kernel-Absturz von letzter Woche untersuchen, journalctl ist Ihre primäre Schnittstelle zum modernen Linux-Systemjournal.