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=persistentoderStorage=auto(Standard, der den persistenten Speicher aktiviert, wenn/var/log/journalexistiert).
Tipp: Wenn das System für
Storage=autokonfiguriert ist und/var/log/journalnicht 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
MaxRetentionSecauf 30 Tage undSystemMaxUseauf 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.