Das Systemd Journal ist das zentrale Logging-System moderner Linux-Distributionen. journalctl ermöglicht leistungsfähiges Filtern und Analysieren von Logs.

Grundbefehle

Logs anzeigen

# Alle Logs
journalctl

# Letzte Logs
journalctl -n 100

# Live-Ansicht
journalctl -f

# Ohne Pager
journalctl --no-pager

# Reverse (neueste zuerst)
journalctl -r

Nach Zeit filtern

# Seit Boot
journalctl -b

# Vorheriger Boot
journalctl -b -1

# Seit Zeitpunkt
journalctl --since "2024-01-26 10:00:00"
journalctl --since "1 hour ago"
journalctl --since "yesterday"

# Zeitraum
journalctl --since "2024-01-26" --until "2024-01-27"

# Letzte 10 Minuten
journalctl --since "-10min"

Nach Service

# Bestimmter Service
journalctl -u nginx
journalctl -u nginx.service

# Mehrere Services
journalctl -u nginx -u php-fpm

# Service live
journalctl -u nginx -f

Nach Priorität

# Nur Fehler
journalctl -p err

# Fehler und kritischer
journalctl -p crit

# Bereich
journalctl -p warning..err
PrioritätWertBedeutung
emerg0System unbrauchbar
alert1Sofortige Aktion nötig
crit2Kritisch
err3Fehler
warning4Warnung
notice5Normal aber wichtig
info6Informativ
debug7Debug

Erweiterte Filter

Nach Kernel

# Kernel-Messages
journalctl -k
journalctl --dmesg

Nach Prozess/PID

# Nach PID
journalctl _PID=1234

# Nach Executable
journalctl _EXE=/usr/sbin/nginx

Nach User

journalctl _UID=1000
journalctl _UID=$(id -u www-data)

Kombinierte Filter

# Service + Priorität
journalctl -u nginx -p err

# Service + Zeit + Priorität
journalctl -u nginx --since today -p warning

# Mehrere Bedingungen (OR)
journalctl _SYSTEMD_UNIT=nginx.service + _SYSTEMD_UNIT=php-fpm.service

# Mehrere Bedingungen (AND)
journalctl _SYSTEMD_UNIT=nginx.service _PID=1234

Ausgabeformate

JSON

# JSON-Ausgabe
journalctl -o json

# Pretty JSON
journalctl -o json-pretty

# Einzelne Zeilen JSON
journalctl -o json --no-pager | jq '.MESSAGE'

Andere Formate

# Kurz
journalctl -o short

# Mit Timestamps
journalctl -o short-precise

# Verbose (alle Felder)
journalctl -o verbose

# Export-Format
journalctl -o export

Journal-Verwaltung

Speicherplatz

# Aktuelle Größe
journalctl --disk-usage

# Aufräumen nach Zeit
journalctl --vacuum-time=7d

# Aufräumen nach Größe
journalctl --vacuum-size=500M

# Aufräumen nach Anzahl Dateien
journalctl --vacuum-files=5

# Rotieren
journalctl --rotate

Konfiguration

# /etc/systemd/journald.conf

[Journal]
# Speichern auf Disk (persistent) oder RAM (volatile)
Storage=persistent

# Maximale Größe
SystemMaxUse=500M
SystemMaxFileSize=50M

# Runtime (RAM)
RuntimeMaxUse=100M

# Kompression
Compress=yes

# Aufbewahrung
MaxRetentionSec=1month

# Forwarding an Syslog
ForwardToSyslog=no
# Nach Änderung
systemctl restart systemd-journald

Persistentes Journal

# Verzeichnis erstellen
mkdir -p /var/log/journal
systemd-tmpfiles --create --prefix /var/log/journal

# Oder in Konfiguration
# Storage=persistent

Log-Analyse

Häufigste Meldungen

# Nach Häufigkeit
journalctl --no-pager | sort | uniq -c | sort -rn | head -20

Fehler-Übersicht

# Alle Fehler heute
journalctl --since today -p err

# Fehler pro Service
journalctl -p err --output json | jq -r '.SYSLOG_IDENTIFIER' | sort | uniq -c | sort -rn

Boot-Analyse

# Boot-Liste
journalctl --list-boots

# Aktueller Boot
journalctl -b 0

# Vorheriger Boot (bei Crash)
journalctl -b -1

# Boot-Zeit analysieren
systemd-analyze blame
systemd-analyze critical-chain

Praktische Beispiele

Debug-Script

#!/bin/bash
# debug-service.sh

SERVICE=$1

echo "=== Service Status ==="
systemctl status $SERVICE

echo ""
echo "=== Recent Logs ==="
journalctl -u $SERVICE -n 50 --no-pager

echo ""
echo "=== Errors ==="
journalctl -u $SERVICE -p err --since "1 hour ago" --no-pager

Log-Export

# Logs exportieren
journalctl -u nginx --since today > nginx-logs.txt

# Für externe Analyse
journalctl -o json --since "1 hour ago" > logs.json

Monitoring

#!/bin/bash
# Monitor auf Fehler

journalctl -f -p err | while read line; do
    echo "ERROR: $line" | mail -s "Log Error Alert" admin@example.de
done

Cleanup-Cron

# /etc/cron.weekly/journal-cleanup
#!/bin/bash
journalctl --vacuum-time=14d
journalctl --vacuum-size=1G

Remote Logging

Journal-Remote

# Auf Empfänger
apt install systemd-journal-remote
systemctl enable systemd-journal-remote.socket

# Auf Sender
apt install systemd-journal-upload

# /etc/systemd/journal-upload.conf
[Upload]
URL=http://logserver:19532

Syslog-Forward

# /etc/systemd/journald.conf
[Journal]
ForwardToSyslog=yes

Zusammenfassung

BefehlFunktion
journalctlAlle Logs
journalctl -fLive-Ansicht
journalctl -u serviceNach Service
journalctl -p errNach Priorität
journalctl -bSeit Boot
journalctl --sinceNach Zeit
journalctl --disk-usageSpeichernutzung
journalctl --vacuum-timeAufräumen
OptionFunktion
-n NLetzte N Zeilen
-rReverse
-o jsonJSON-Format
--no-pagerOhne Pager
DateiFunktion
/etc/systemd/journald.confKonfiguration
/var/log/journal/Persistente Logs
/run/log/journal/Volatile Logs

Fazit

Das Systemd Journal ist ein mächtiges Logging-System. Die strukturierten Logs ermöglichen präzises Filtern. JSON-Export erlaubt externe Analyse. Automatische Rotation verhindert Speicherprobleme. Für traditionelle Log-Dateien kann zusätzlich rsyslog eingesetzt werden.