Zum Hauptinhalt springen
Zurück zur Kategorie

Log-Verwaltung: Festplatte voll verhindern mit logrotate

Wichtige Log-Speicherorte, logrotate-Konfiguration, journald-Größenlimits, große Log-Dateien finden und Log-Analyse-Grundlagen. Anleitung zur Vermeidung voller Festplatten auf Linux-Servern.

Lesezeit: 11 min Serververwaltung
logrotatelog-verwaltungjournaldfestplattenspeichersysloglinuxlog-analyse

Inhaltsverzeichnis

Log-Verwaltung: Festplatte voll verhindern mit logrotate

Log-Dateien sind unverzichtbar für die Diagnose von Systemproblemen und die Überwachung von Sicherheitsereignissen. Wenn sie jedoch nicht verwaltet werden, können sie den Festplattenspeicher füllen und Systemabstürze verursachen. Diese Anleitung behandelt wichtige Log-Speicherorte, logrotate-Konfiguration, journald-Größenverwaltung und das Auffinden großer Log-Dateien.

Wichtige Log-Speicherorte

System-Log-Dateien

hljs bash
# Hauptverzeichnis für System-Logs
ls -lh /var/log/

# Wichtige Log-Dateien:
# /var/log/syslog          — Allgemeine Systemmeldungen (Debian/Ubuntu)
# /var/log/messages        — Allgemeine Systemmeldungen (RHEL/CentOS)
# /var/log/auth.log        — Authentifizierungslogs (Debian/Ubuntu)
# /var/log/secure          — Authentifizierungslogs (RHEL/CentOS)
# /var/log/kern.log        — Kernel-Meldungen
# /var/log/cron            — Cron-Job-Logs
# /var/log/mail.log        — Mail-Server-Logs

Anwendungs-Log-Dateien

hljs bash
# Webserver-Logs
/var/log/nginx/access.log
/var/log/nginx/error.log
/var/log/apache2/access.log
/var/log/apache2/error.log

# Datenbank-Logs
/var/log/mysql/error.log
/var/log/postgresql/

Log-Dateien überwachen

hljs bash
# Echtzeit-Log-Überwachung
tail -f /var/log/syslog
tail -f /var/log/nginx/access.log

# Letzte 100 Zeilen
tail -n 100 /var/log/auth.log

# Nach bestimmtem Schlüsselwort suchen
grep "ERROR" /var/log/nginx/error.log
grep "Failed password" /var/log/auth.log

# In mehreren Dateien suchen
grep -r "error" /var/log/nginx/

Festplattenplatz-Analyse

Große Log-Dateien finden

hljs bash
# Größte Dateien unter /var/log finden
du -sh /var/log/* | sort -rh | head -20

# Große Dateien im gesamten System finden (100MB+)
find / -type f -size +100M -exec ls -lh {} \; 2>/dev/null

# Dateien größer als 50MB unter /var/log
find /var/log -type f -size +50M -exec ls -lh {} \;

# Festplattennutzung prüfen
df -h

# Verzeichnisgrößen anzeigen
du -sh /var/log/
du -sh /var/log/* | sort -rh

logrotate-Konfiguration

logrotate ist ein Tool, das Log-Dateien automatisch rotiert, komprimiert und löscht.

Wie logrotate funktioniert

hljs bash
# logrotate läuft standardmäßig täglich über cron
cat /etc/cron.daily/logrotate

# Manuell ausführen
sudo logrotate /etc/logrotate.conf

# Simulationsmodus (keine echten Operationen)
sudo logrotate --debug /etc/logrotate.conf

# Rotation erzwingen
sudo logrotate --force /etc/logrotate.d/nginx

Haupt-logrotate-Konfiguration

hljs bash
# Hauptkonfigurationsdatei
sudo nano /etc/logrotate.conf
hljs bash
# Standardeinstellungen
weekly          # Wöchentlich rotieren
rotate 4        # 4 alte Versionen behalten
create          # Neue Datei nach Rotation erstellen
compress        # Alte Logs komprimieren
delaycompress   # Zuletzt rotierten Log nicht komprimieren
include /etc/logrotate.d  # Anwendungskonfigurationen einschließen

Anwendungsspezifische logrotate-Konfiguration

hljs bash
# logrotate-Konfiguration für Nginx
sudo nano /etc/logrotate.d/nginx
hljs bash
/var/log/nginx/*.log {
    daily           # Täglich rotieren
    missingok       # Kein Fehler wenn Datei fehlt
    rotate 14       # 14 Tage Logs behalten
    compress        # Komprimieren
    delaycompress   # Neuesten nicht komprimieren
    notifempty      # Leere Dateien nicht rotieren
    create 0640 www-data adm
    sharedscripts
    postrotate
        if [ -f /var/run/nginx.pid ]; then
            kill -USR1 `cat /var/run/nginx.pid`
        fi
    endscript
}

Benutzerdefinierte Anwendung logrotate

hljs bash
sudo nano /etc/logrotate.d/myapp
hljs bash
/var/log/myapp/*.log {
    daily
    rotate 30
    compress
    delaycompress
    missingok
    notifempty
    create 0644 www-data www-data
    dateext
    dateformat -%Y%m%d
    postrotate
        systemctl reload myapp 2>/dev/null || true
    endscript
}

journald-Größenverwaltung

hljs bash
# Aktuelle Journal-Größe prüfen
journalctl --disk-usage

# Alte Logs bereinigen (älter als 2 Wochen)
sudo journalctl --vacuum-time=2weeks

# Mit Größenlimit bereinigen
sudo journalctl --vacuum-size=500M

# Bestimmte Anzahl Dateien behalten
sudo journalctl --vacuum-files=5

Dauerhafte journald-Konfiguration

hljs bash
# journald-Konfigurationsdatei bearbeiten
sudo nano /etc/systemd/journald.conf
hljs ini
[Journal]
# Maximale Festplattennutzung
SystemMaxUse=500M

# Minimaler freier Festplattenspeicher
SystemKeepFree=1G

# Maximale Dateigröße
SystemMaxFileSize=50M

# Log-Aufbewahrungszeitraum
MaxRetentionSec=2weeks

# Komprimierung
Compress=yes

# Dauerhafter Speicher
Storage=persistent
hljs bash
# Konfiguration anwenden
sudo systemctl restart systemd-journald

Log-Analyse-Grundlagen

hljs bash
# Nginx-Fehler-Logs analysieren
grep -c "error" /var/log/nginx/error.log
grep "error" /var/log/nginx/error.log | tail -20

# SSH-Brute-Force-Versuche erkennen
grep "Failed password" /var/log/auth.log | awk '{print $11}' | sort | uniq -c | sort -rn | head -10

# Top-anfragende IPs finden
awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -rn | head -10

# HTTP-Statuscodes zählen
awk '{print $9}' /var/log/nginx/access.log | sort | uniq -c | sort -rn

# Fehler aus systemd-Journal filtern
journalctl -p err --since "1 hour ago"

Notfall: Festplatte voll

hljs bash
# Schnelle Reaktion bei voller Festplatte

# 1. Festplattenstatus prüfen
df -h

# 2. Größte Dateien finden
du -sh /var/log/* | sort -rh | head -10

# 3. Alte Journal-Logs bereinigen
sudo journalctl --vacuum-time=3days

# 4. Unkomprimierte alte Logs komprimieren
find /var/log -name "*.log.*" ! -name "*.gz" -exec gzip {} \;

# 5. logrotate erzwingen
sudo logrotate --force /etc/logrotate.conf

# 6. Paket-Cache bereinigen
sudo apt clean  # Ubuntu/Debian
sudo dnf clean all  # RHEL/CentOS

Automatisieren Sie die Log-Verwaltung: Überprüfen Sie regelmäßig die logrotate-Konfiguration, setzen Sie journald-Größenlimits und richten Sie Alerts zur Überwachung der Festplattennutzung ein.

Fazit

Effektive Log-Verwaltung verhindert Probleme mit voller Festplatte und verbessert die Systemzuverlässigkeit. Mit automatischer logrotate-Rotation, journald-Größenlimits und regelmäßiger Log-Analyse können Sie Ihre REXE-Server gesund halten.