journalctl ist das zentrale Werkzeug zum Lesen von systemd-Logs. Es ersetzt unter modernen Distributionen weitgehend klassische Logdateien unter /var/log/. Hier die wichtigsten Befehle.

Grundlegende Nutzung

# Alle Logs seit letztem Boot
journalctl -b

# Letzten 100 Einträge, live mitverfolgen
journalctl -n 100 -f

# Logs eines bestimmten Dienstes
journalctl -u nginx.service -n 50

# Nur Fehler und kritische Meldungen
journalctl -p err -b

# Logs einer bestimmten Zeitspanne
journalctl --since "2026-05-01" --until "2026-05-15 12:00"

# Logs des aktuellen Boots nach Priorität filtern
journalctl -b -p warning

Logs persistent speichern

Standardmäßig speichert systemd Logs nur im RAM (/run/log/journal/). Nach einem Reboot sind sie weg. Für persistente Logs:

sudo mkdir -p /var/log/journal
sudo systemd-tmpfiles --create --prefix /var/log/journal
sudo systemctl restart systemd-journald

# Optional: Maximale Größe begrenzen
# /etc/systemd/journald.conf
[Journal]
SystemMaxUse=500M
SystemKeepFree=100M
MaxRetentionSec=30day

Dienst-Debugging

Wenn ein Dienst nicht startet, liefert journalctl deutlich mehr Kontext als systemctl status:

# Vollständige Fehlerausgabe eines Dienstes
journalctl -u mein-dienst.service -b --no-pager

# Kernel-Meldungen (äquivalent zu dmesg)
journalctl -k -b

# Kritische Boot-Fehler der letzten 3 Boots
journalctl -p crit -b -3 --no-pager

# Export für Bug-Report
journalctl -u mein-dienst -b --no-pager > /tmp/service-debug.log

Formatierung & Ausgabe

# JSON-Format (für Parsing)
journalctl -u nginx -n 20 -o json | jq ".MESSAGE"

# Nur Zeitstempel + Meldung
journalctl -u nginx -o short-monotonic

# Spezifisches Binary
journalctl _EXE=/usr/bin/python3 -n 30

Wer regelmäßig Dienste debuggt, sollte sich ein Alias anlegen: alias jf="journalctl -f -n 50" — damit hat man einen schnellen Live-Tail aller System-Logs parat.