Konfiguration von Systemd-Journal-Limits: Optimierung der Festplattennutzung und Log-Rotation

Konfigurieren Sie die Größen- und Aufbewahrungslimits des systemd-Journals mit `journald.conf`, `journalctl` und sicheren Log-Bereinigungsbefehlen.

Konfiguration von Systemd-Journal-Limits: Optimierung der Festplattennutzung und Log-Rotation

Systemprotokolle sind nützlich, bis sie leise die Festplatte füllen. Auf Linux-Systemen, die systemd verwenden, speichert systemd-journald indizierte Protokolle und kann Größen- und Altersgrenzen durchsetzen, sodass Ihr Journal genügend Verlauf behält, ohne den Rest des Systems zu verdrängen.

Diese Anleitung zeigt, wo Sie systemd-Journal-Limits konfigurieren, wie sich persistenter und flüchtiger Speicher unterscheiden und wie Sie die Bereinigung mit journalctl überprüfen.

Grundlegendes zu Journal-Speichermodi

Bevor Sie Limits festlegen, ist es wichtig zu verstehen, wo das Journal seine Protokolle speichert. systemd-journald unterstützt zwei primäre Speichermodi, die durch die Direktive Storage= in journald.conf definiert werden.

1. Flüchtiger Speicher (/run/log/journal)

Flüchtiger Speicher bewahrt Protokolle in einem temporären Dateisystem, typischerweise tmpfs oder einem speichergestützten Verzeichnis. Hier gespeicherte Protokolle gehen bei einem Systemneustart verloren.

  • Anwendungsfall: Hochgradig temporäre Protokolle, ressourcenbeschränkte Umgebungen, in denen kein dauerhafter Verlauf benötigt wird.
  • Konfiguration: Setzen Sie Storage=volatile.

2. Persistenter Speicher (/var/log/journal)

Persistenter Speicher stellt sicher, dass Protokolle Systemneustarts überleben, was ihn zur Standardwahl für Server und Produktionssysteme macht. Das Verzeichnis /var/log/journal wird erstellt, falls es noch nicht existiert.

  • Anwendungsfall: Produktionssysteme, die Prüfpfade und historische Analysen erfordern.
  • Konfiguration: Setzen Sie Storage=persistent oder Storage=auto (Standard, der den persistenten Speicher aktiviert, wenn /var/log/journal existiert).

Tipp: Wenn das System für Storage=auto konfiguriert ist und /var/log/journal nicht existiert, werden Protokolle standardmäßig im flüchtigen Speicher abgelegt, bis das persistente Verzeichnis erstellt wird.

Die primäre Konfigurationsdatei

Alle primären Limits und Verhaltensweisen für systemd-journald werden über die Hauptkonfigurationsdatei gesteuert, die sich normalerweise unter /etc/systemd/journald.conf befindet.

# Bearbeiten Sie die Hauptkonfigurationsdatei
sudo nano /etc/systemd/journald.conf

Um sicherzustellen, dass zukünftige Paketaktualisierungen Ihre Anpassungen nicht überschreiben, ist es bewährte Praxis, eine Override-Datei im Verzeichnis /etc/systemd/journald.conf.d/ zu erstellen. Erstellen Sie zum Beispiel /etc/systemd/journald.conf.d/01-custom-limits.conf.

Implementieren von Größenlimits zur Festplattenoptimierung

Die gebräuchlichste Methode zur Steuerung des Journalwachstums ist das Setzen maximaler Grenzen für die Festplattennutzung. Wenn die angegebene Größe überschritten wird, beginnt journald automatisch mit dem Löschen der ältesten archivierten Protokolle, bis das Limit erreicht ist.

SystemMaxUse (Das absolute persistente Limit)

Diese Direktive definiert den maximalen gesamten Festplattenspeicher, den die persistenten Journaldateien (/var/log/journal) belegen dürfen. Dies ist der primäre Mechanismus zur Steuerung der persistenten Festplattennutzung.

Journaldateien werden rotiert und bereinigt, wenn die Gesamtgröße diesen Wert überschreitet. Übliche Einheiten sind K (Kilobyte), M (Megabyte), G (Gigabyte) und T (Terabyte).

Direktive Beschreibung Beispielwert
SystemMaxUse Maximale Größe für persistente Journaldaten. 500M oder 2G

Beispielkonfiguration:

Um den persistenten Journalspeicher auf maximal 1 Gigabyte zu begrenzen:

[Journal]
SystemMaxUse=1G

SystemKeepFree (Festplatten-Sicherheitspuffer)

Während SystemMaxUse eine Obergrenze setzt, fungiert SystemKeepFree als entscheidende Sicherheitsmaßnahme. Es gibt den minimalen Festplattenspeicher an, der auf dem Dateisystem, das die Journaldateien enthält, frei bleiben sollte.

Wenn der verfügbare freie Speicher unter den Wert von SystemKeepFree fällt, wird journald Protokolle bereinigen, selbst wenn das Limit von SystemMaxUse noch nicht erreicht wurde. Dies verhindert, dass das Protokollwachstum die Festplatte vollständig füllt und kritische Systemoperationen zum Stillstand bringt.

Direktive Beschreibung Beispielwert
SystemKeepFree Mindestens erforderlicher freier Speicherplatz auf dem Journal-Dateisystem. 10% oder 4G

Bewährte Praxis: Es wird dringend empfohlen, sowohl SystemMaxUse als auch SystemKeepFree zu setzen. Verwenden Sie für SystemKeepFree auf großen Laufwerken einen Prozentsatz (%) für eine bessere Skalierbarkeit.

RuntimeMaxUse (Limit für flüchtigen Speicher)

Wenn Sie flüchtigen Speicher (/run/log/journal) verwenden oder die Speicher-/tmpfs-Nutzung auch bei aktiviertem persistenten Speicher steuern möchten, verwenden Sie RuntimeMaxUse. Dies steuert den Festplattenspeicher, der von flüchtigen Journaldateien verwendet wird, die temporär sind und sich im Speicher oder in tmpfs befinden.

Direktive Beschreibung Beispielwert
RuntimeMaxUse Maximale Größe für flüchtige Journaldaten. 300M

Implementieren von Zeitlimits für die Protokollaufbewahrung

Größenbasierte Limits stellen sicher, dass der Festplattenspeicher erhalten bleibt, garantieren jedoch nicht, wie alt die Protokolle sind. Bei geringem Protokollvolumen könnten Protokolle unbegrenzt bestehen bleiben. Zeitbasierte Limits stellen sicher, dass Protokolle nach einer bestimmten Dauer rotiert werden, unabhängig von der Gesamtgröße.

MaxRetentionSec

Diese Direktive gibt die maximale Zeit an, für die Protokolle aufbewahrt werden sollen. Alle Protokolle, die älter als diese Dauer sind, werden automatisch gelöscht, was die Größenlimits ergänzt.

Direktive Beschreibung Beispielwert
MaxRetentionSec Maximales Alter der aufzubewahrenden Protokolle. 30 days, 1 month, 2 weeks

Beispielkonfiguration:

Um sicherzustellen, dass Protokolle nie älter als 30 Tage sind und der gesamte persistente Speicher 5 Gigabyte nicht überschreitet:

[Journal]
Storage=persistent
SystemMaxUse=5G
SystemKeepFree=10%
MaxRetentionSec=30 days

Hinweis: Wenn MaxRetentionSec auf 30 Tage und SystemMaxUse auf 5G gesetzt ist, wird journald das Limit einhalten, das zuerst erreicht wird. Wenn das 5G-Limit in 10 Tagen erreicht wird, werden Protokolle, die älter als 10 Tage sind, gelöscht, was die 30-Tage-Aufbewahrungsrichtlinie außer Kraft setzt.

Praktische Schritte: Anwenden und Überprüfen der Konfiguration

1. Aktuelle Journalnutzung prüfen

Überprüfen Sie vor Änderungen die aktuelle Festplattennutzung des Journals:

journalctl --disk-usage

Beispielausgabe:

Journals take up 3.4G of disk space.

2. Limits konfigurieren

Bearbeiten Sie /etc/systemd/journald.conf (oder Ihre Override-Datei) und kommentieren Sie die gewünschten Direktiven ein bzw. setzen Sie sie. Zum Beispiel, um eine maximale Nutzung von 500 MB und eine Aufbewahrung von 30 Tagen sicherzustellen:

[Journal]
Storage=persistent
SystemMaxUse=500M
SystemKeepFree=1G
MaxRetentionSec=30 days

3. Journal-Dienst neu starten

Damit die Änderungen wirksam werden, muss der Dienst systemd-journald neu gestartet werden. Dies beeinträchtigt die aktive Protokollierung nicht, teilt dem Daemon jedoch mit, die neuen Größenbeschränkungen sofort anzuwenden und den Bereinigungsprozess zu starten.

sudo systemctl restart systemd-journald

4. Manuelles Erzwingen der Bereinigung

Wenn sofort Festplattenspeicher basierend auf den neuen Limits freigegeben werden muss, ist der Neustart des Dienstes oft ausreichend. Alternativ können Sie Dateien explizit mit journalctl bereinigen.

Um Protokolle zu bereinigen und Speicherplatz freizugeben, wobei nur die letzten 500 MB übrig bleiben:

sudo journalctl --vacuum-size=500M

Um Protokolle zu bereinigen, die älter als 7 Tage sind:

sudo journalctl --vacuum-time=7d

Zusammenfassung der wichtigsten Direktiven

Direktive Geltungsbereich Zweck
Storage Global Definiert den Speicherort (persistent, flüchtig, auto).
SystemMaxUse Persistent (/var/log/journal) Absolute maximale Gesamtgröße für persistente Protokolle.
SystemKeepFree Persistent (/var/log/journal) Stellt sicher, dass eine Mindestmenge an freiem Festplattenspeicher erhalten bleibt.
RuntimeMaxUse Flüchtig (/run/log/journal) Absolute maximale Gesamtgröße für flüchtige (Laufzeit-)Protokolle.
MaxRetentionSec Beide Definiert das maximale Alter für aufbewahrte Protokolle.

Fazit

Setzen Sie Journal-Limits, bevor Protokolle zu einem Ausfall führen. Für die meisten Server verwenden Sie einen Drop-In unter /etc/systemd/journald.conf.d/, setzen Sie SystemMaxUse plus SystemKeepFree, fügen Sie MaxRetentionSec hinzu, wenn Sie ein Aufbewahrungsziel haben, starten Sie systemd-journald neu und bestätigen Sie das Ergebnis mit journalctl --disk-usage.