journalctl — das systemd-Journal abfragen und durchsuchen

Praxis-Guide zu journalctl: das systemd-Journal nach Unit, Zeit und Priorität filtern, Logs live verfolgen, Boot- und Kernel-Meldungen prüfen und Speicher freiräumen.

journalctl ist dein Fenster in das systemd-Journal – den zentralen Log-Speicher, der Meldungen von Kernel, Diensten und Anwendungen strukturiert und durchsuchbar sammelt. Statt verstreute Textdateien unter /var/log zu durchforsten, filterst du gezielt nach Unit, Zeitraum, Priorität oder Prozess und verfolgst neue Einträge in Echtzeit. Dieser Guide zeigt dir die Abfragen, die du beim Debugging und im Betrieb wirklich brauchst – von der Diagnose eines einzelnen Dienstes bis zum Aufräumen eines voll gelaufenen Journals.

Grundlegende Nutzung

journalctl — Alle Journal-Einträge anzeigen (älteste zuerst) im Pager.

journalctl

journalctl -r — Einträge in umgekehrter Reihenfolge anzeigen (neueste zuerst).

journalctl -r

journalctl -n N — Nur die letzten N Einträge anzeigen (Standard: 10).

journalctl -n 50

journalctl -f — Follow-Modus – neue Einträge fortlaufend anzeigen (wie tail -f).

journalctl -f

journalctl -e — Im Pager ans Ende des Journals springen.

journalctl -e

journalctl --no-pager — Direkt ohne Pager ausgeben. Praktisch zum Weiterleiten (Piping).

journalctl --no-pager -n 100

Nach Unit/Service filtern

journalctl -u UNIT — Logs einer bestimmten systemd-Unit bzw. eines Dienstes anzeigen.

journalctl -u nginx.service

journalctl -u UNIT -f — Logs eines bestimmten Dienstes live verfolgen.

journalctl -u nginx.service -f

journalctl -u UNIT1 -u UNIT2 — Logs mehrerer Dienste anzeigen.

journalctl -u nginx.service -u php-fpm.service

journalctl -u 'nginx*' — Logs für Units anzeigen, die auf ein Muster passen.

journalctl -u 'nginx*'

journalctl -u UNIT --since today — Heutige Logs eines Dienstes anzeigen.

journalctl -u sshd.service --since today

Nach Zeit filtern

journalctl --since 'YYYY-MM-DD HH:MM:SS' — Einträge ab einem bestimmten Datum und Zeitpunkt anzeigen.

journalctl --since '2024-01-15 09:00:00'

journalctl --until 'YYYY-MM-DD HH:MM:SS' — Einträge bis zu einem bestimmten Datum und Zeitpunkt anzeigen.

journalctl --until '2024-01-15 17:00:00'

journalctl --since today — Einträge von heute anzeigen.

journalctl --since today

journalctl --since yesterday --until today — Einträge von gestern anzeigen.

journalctl --since yesterday --until today

journalctl --since '1 hour ago' — Einträge der letzten Stunde anzeigen.

journalctl --since '1 hour ago'

journalctl --since '30 min ago' — Einträge der letzten 30 Minuten anzeigen.

journalctl --since '30 min ago'

journalctl --since '2 days ago' — Einträge der letzten 2 Tage anzeigen.

journalctl --since '2 days ago'

Nach Priorität filtern

journalctl -p err — Nur Fehlermeldungen und höher anzeigen (err, crit, alert, emerg).

journalctl -p err

journalctl -p warning — Warnungen und höher anzeigen.

journalctl -p warning

journalctl -p crit — Nur kritische Meldungen und höher anzeigen.

journalctl -p crit

journalctl -p info — Info und höher anzeigen (Standard).

journalctl -p info

journalctl -p debug — Alle Meldungen inklusive Debug-Ebene anzeigen.

journalctl -p debug

journalctl -p err..warning — Meldungen in einem Prioritätsbereich anzeigen.

journalctl -p err..warning

Nach Prozess & Benutzer filtern

journalctl _PID=PID — Logs einer bestimmten Prozess-ID anzeigen.

journalctl _PID=1234

journalctl _UID=UID — Logs einer bestimmten Benutzer-ID anzeigen.

journalctl _UID=1000

journalctl _GID=GID — Logs einer bestimmten Gruppen-ID anzeigen.

journalctl _GID=33

journalctl _COMM=COMMAND — Logs von Prozessen mit einem bestimmten Kommandonamen anzeigen.

journalctl _COMM=sshd

journalctl _EXE=PATH — Logs einer bestimmten ausführbaren Datei anzeigen.

journalctl _EXE=/usr/sbin/nginx

journalctl _HOSTNAME=HOST — Logs eines bestimmten Hostnamens anzeigen (nützlich bei zentralem Journaling).

journalctl _HOSTNAME=webserver01

Kernel-Meldungen

journalctl -k — Nur Kernel-Meldungen anzeigen (entspricht dmesg).

journalctl -k

journalctl -k -b — Kernel-Meldungen des aktuellen Boots anzeigen.

journalctl -k -b

journalctl -k -p err — Kernel-Fehler anzeigen.

journalctl -k -p err

journalctl -k -f — Kernel-Meldungen in Echtzeit verfolgen.

journalctl -k -f

Boot-Logs

journalctl -b — Logs des aktuellen Boots anzeigen.

journalctl -b

journalctl -b -1 — Logs des vorherigen Boots anzeigen.

journalctl -b -1

journalctl -b -2 — Logs von vor zwei Boots anzeigen.

journalctl -b -2

journalctl --list-boots — Alle verfügbaren Boot-Sitzungen mit Zeitstempeln auflisten.

journalctl --list-boots

Ausgabeformate

journalctl -o short — Standard-Ausgabe im Syslog-Stil.

journalctl -o short -n 10

journalctl -o short-precise — Syslog-Stil mit Mikrosekunden-Genauigkeit.

journalctl -o short-precise -n 10

journalctl -o short-iso — Syslog-Stil mit ISO-8601-Zeitstempeln.

journalctl -o short-iso -n 10

journalctl -o verbose — Alle Felder jedes Eintrags anzeigen.

journalctl -o verbose -n 5

journalctl -o json — Ausgabe im JSON-Format (ein Objekt pro Zeile).

journalctl -o json -n 5

journalctl -o json-pretty — Ausgabe als formatiertes JSON.

journalctl -o json-pretty -n 5

journalctl -o cat — Nur den Meldungstext anzeigen (ohne Metadaten).

journalctl -u nginx -o cat -n 20

journalctl -o export — Binäres Exportformat für journalctl --import.

journalctl -o export > journal.export

Suchen & Grep

journalctl -g PATTERN — Einträge per regulärem Ausdruck filtern (wie grep).

journalctl -g 'error|fail'

journalctl -g PATTERN --case-sensitive=no — Regex-Suche ohne Beachtung der Groß-/Kleinschreibung.

journalctl -g 'timeout' --case-sensitive=no

journalctl | grep PATTERN — Zur klassischen Textsuche durch grep leiten.

journalctl --no-pager | grep 'Failed password'

Speicherplatz & Wartung

journalctl --disk-usage — Anzeigen, wie viel Speicher das Journal belegt.

journalctl --disk-usage

journalctl --vacuum-size=SIZE — Alte Einträge entfernen, bis das Journal unter SIZE liegt. Destruktiv: gelöschte Logs sind unwiderruflich weg.

sudo journalctl --vacuum-size=500M

journalctl --vacuum-time=TIME — Einträge entfernen, die älter als TIME sind. Destruktiv.

sudo journalctl --vacuum-time=30d

journalctl --vacuum-files=N — Nur die N neuesten Journal-Dateien behalten; ältere werden gelöscht. Destruktiv.

sudo journalctl --vacuum-files=5

journalctl --rotate — Rotation der Journal-Dateien erzwingen (aktuelle Datei schließen, neue beginnen) – Voraussetzung für sofortiges Vacuumen.

sudo journalctl --rotate

journalctl --verify — Integrität der Journal-Dateien prüfen.

journalctl --verify

Typische Muster

journalctl -u nginx -p err --since today — Heutige Fehler von nginx.

journalctl -u nginx.service -p err --since today

journalctl -u sshd -g 'Failed password' --since '1 hour ago' — Fehlgeschlagene SSH-Logins der letzten Stunde.

journalctl -u sshd.service -g 'Failed password' --since '1 hour ago'

journalctl -p err -b --no-pager — Alle Fehler seit dem aktuellen Boot ohne Pager.

journalctl -p err -b --no-pager

journalctl -u UNIT -o json --no-pager | jq . — Dienst-Logs als JSON mit jq auswerten.

journalctl -u nginx -o json --no-pager -n 5 | jq .

journalctl -k -p err -b — Kernel-Fehler des aktuellen Boots.

journalctl -k -p err -b

journalctl --since '5 min ago' -f — Die letzten 5 Minuten anzeigen und weiter verfolgen.

journalctl --since '5 min ago' -f

Fazit

journalctl macht aus verstreuten Logdateien eine einzige, durchsuchbare Quelle: Mit -u, --since, -p und -f grenzt du Vorfälle in Sekunden ein, und -b bzw. -k bringen dich gezielt an Boot- und Kernel-Meldungen; -x ergänzt erklärende Hinweise zu vielen systemd-Einträgen. Für den Zugriff auf fremde oder systemweite Logs musst du in der Gruppe adm oder systemd-journal sein (oder sudo nutzen); ob das Journal Neustarts überlebt, hängt von Storage=persistent und einem vorhandenen /var/log/journal ab. Vorsicht bei --vacuum-size, --vacuum-time, --vacuum-files und --rotate: Diese Befehle löschen bzw. verdrängen alte Einträge unwiderruflich – ideal zum Freiräumen von Speicher, aber führe sie nie auf Verdacht aus, solange du die Logs noch zur Analyse brauchst.

Verwandte Kommandos

  • systemctl – systemd-Dienste verwalten und ihren Status prüfen
  • dmesg – den Kernel-Ringpuffer direkt auslesen
  • loginctl – Login-Sitzungen und Benutzer über systemd-logind verwalten