Protokolldrehung und -komprimierung mit logrotate | INTROSERV
EUR
european

EUR

usa

USD

German De
Ex. VAT Ex. VAT 0%

Protokolldrehung und -komprimierung mit logrotate

  • Stufe: Mittelstufe
  • Geschätzte Zeit: ~20 Minuten
  • Ziel: Konfigurieren Sie logrotate, um Anwendungsprotokolldateien automatisch zu komprimieren und zu rotieren, um eine Erschöpfung des Speicherplatzes zu verhindern.

Einführung

Protokolle sind ein kritischer Bestandteil der Verwaltung jeder Produktionsanwendung: Ohne sie wäre es sehr schwierig, zuverlässig zu verstehen, was schiefgelaufen ist und was dagegen zu tun ist. Eine stark frequentierte Anwendung kann Tausende von Einträgen pro Minute generieren, und alle werden typischerweise in Dateien gespeichert. Wir müssen alte Protokolle rechtzeitig komprimieren und löschen, um zu vermeiden, dass der Speicherplatz ausgeht. In diesem Tutorial werden wir logrotate auf einem Linux-Server konfigurieren.

Was ist logrotate?

logrotate ist ein Linux-Dienstprogramm, das entwickelt wurde, um die Verwaltung von Systemen zu vereinfachen, die eine große Anzahl von Protokolldateien erzeugen. Es ermöglicht, dass Protokolle automatisch komprimiert, rotiert und gelöscht werden. Es wird typischerweise täglich, wöchentlich oder monatlich über cron oder einen systemd-Timer ausgeführt.

Voraussetzungen

Bevor Sie beginnen, stellen Sie sicher, dass die folgenden Bedingungen erfüllt sind:

  • Betriebssystem: Ubuntu 20.04/22.04/24.04 LTS, Debian 11/12 oder CentOS/RHEL 7+
  • logrotate: Version 3.x (Überprüfung in Schritt 1)
  • Zugriff: sudo- oder Root-Zugriff auf den Server
  • Erforderliches Wissen: sicherer Umgang mit der Linux-Befehlszeile und grundlegende Dateibearbeitung

Schritt 1: Überprüfung der logrotate-Installation

Um die Installation zu überprüfen, führen Sie einfach aus:

logrotate --version

Erwartete Ausgabe:

logrotate 3.19.0 Standard-Mail-Befehl: /usr/bin/mail Standard-Komprimierungsbefehl: /bin/gzip Standard-Dekomprimierungsbefehl: /bin/gunzip Standard-Komprimierungserweiterung: .gz Standard-Statusdateipfad: /var/lib/logrotate/status

Wenn der Befehl nicht gefunden wird – logrotate ist nicht installiert. Installieren Sie es:

Debian/Ubuntu:

sudo apt install logrotate

CentOS/RHEL:

sudo yum install logrotate

Schritt 2: Verständnis der Konfigurationsstruktur

Die Hauptkonfiguration befindet sich unter /etc/logrotate.conf – wir werden sie vorerst unverändert lassen. Unsere Regeln für spezifische Dienste werden in /etc/logrotate.d/ abgelegt – für jeden Dienst sollte dort eine separate Datei abgelegt werden.

Bevor Sie etwas hinzufügen, überprüfen Sie, ob bereits eine Konfiguration für Ihren Dienst vorhanden ist:

ls /etc/logrotate.d/

Für beliebte Dienste wie nginx oder Apache sind Konfigurationen normalerweise bereits vorhanden. Wenn nginx oder apache2 bereits vorhanden ist – öffnen Sie diese Datei und passen Sie die Rotationsanzahl und die Komprimierungseinstellungen an Ihre Bedürfnisse an, anstatt ein Duplikat zu erstellen.

Schritt 3: Hinzufügen einer Dienstkonfiguration

Angenommen, es gibt eine benutzerdefinierte Anwendung und ihre Protokolle befinden sich unter /opt/myapp/*.log.

Erstellen und öffnen Sie die Datei:

sudo nano /etc/logrotate.d/myapp

Fügen Sie das Folgende ein:

/opt/myapp/*.log { daily missingok rotate 14 compress delaycompress notifempty create 0640 www-data adm sharedscripts postrotate systemctl reload myapp > /dev/null 2>&1 || true endscript }

Diese Konfiguration weist logrotate an:

  1. daily – Protokolle täglich rotieren; Sie können auch weekly oder monthly angeben.
  2. missingok – keinen Fehler auslösen, wenn die Protokolldatei fehlt.
  3. rotate 14 – 14 rotierte Kopien vor dem Löschen aufbewahren.
  4. compress – rotierte Protokolle mit gzip komprimieren.
  5. delaycompress – die neueste Rotation nicht komprimieren; nützlich, wenn die Anwendung die Datei noch geöffnet hält.
  6. notifempty – Rotation überspringen, wenn die Protokolldatei leer ist.
  7. create 0640 www-data adm – eine neue leere Protokolldatei mit den angegebenen Berechtigungen, Eigentümer und Gruppe erstellen. Der Eigentümer sollte dem Benutzer entsprechen, unter dem die Anwendung läuft (in Debian-basierten Systemen oft www-data, in RHEL-basierten Systemen normalerweise apache oder nginx).
  8. sharedscripts – das postrotate-Skript einmal ausführen, auch wenn mehrere Dateien übereinstimmen.
  9. postrotate – der Anwendung signalisieren, ihre Datei-Handles nach der Rotation erneut zu öffnen.

Info

Wenn das Verzeichnis /opt/myapp/ oder die Protokolldateien zum Zeitpunkt des ersten Laufs noch nicht existieren, ist das kein Problem. Die missingok-Direktive wird logrotate veranlassen, die Datei stillschweigend zu überspringen, ohne einen Fehler auszulösen. Die Protokollrotation beginnt automatisch, sobald die Anwendung die Protokolle erstellt.

Schritt 4: Testen der Konfiguration

4.1 Trockentest

Nach dem Schreiben der Konfiguration sollte sie überprüft werden. Das -d-Flag führt logrotate im Debug-Modus aus – es wird nichts tatsächlich geändert:

sudo logrotate -d /etc/logrotate.d/myapp

Info

Der -d-Modus gibt Diagnoseinformationen aus, ändert jedoch keine Dateien.

4.2 Erzwungener echter Lauf

Wenn der Trockentest korrekt aussieht – erzwingen Sie eine tatsächliche Rotation mit dem -f-Flag:

sudo logrotate -f /etc/logrotate.d/myapp

Info

Wichtig: Das -f-Flag löst eine tatsächliche Rotation aus. Führen Sie es nur aus, nachdem der Testlauf korrekt aussieht.

Schritt 5: Überprüfung des Ergebnisses

Nach den ersten paar Rotationen überprüfen Sie das Protokollverzeichnis:

ls -lh /opt/myapp/

Erwartete Ausgabe:

insgesamt 28K -rw-r----- 1 www-data adm 0 Jan 17 12:00 app.log -rw-r----- 1 www-data adm 12K Jan 17 11:59 app.log.1 -rw-r----- 1 www-data adm 11K Jan 16 12:00 app.log.2.gz -rw-r----- 1 www-data adm 9K Jan 15 12:00 app.log.3.gz

Die neueste Rotation (app.log.1) bleibt aufgrund von delaycompress unkomprimiert. Alles Ältere ist gezippt. Genau das wollten wir.

Schritt 6: Überprüfung des automatischen Zeitplans

logrotate läuft automatisch – über cron oder einen systemd-Timer, abhängig von der Distribution.

Cron-basierte Systeme

cat /etc/cron.daily/logrotate

Wenn die Datei existiert – das ist die Datei, die logrotate täglich ausführt.

Systemd-basierte Systeme

Auf neueren Systemen kann logrotate über einen systemd-Timer anstelle von cron ausgeführt werden.

Überprüfen Sie:

systemctl list-timers | grep logrotate

Sie sollten einen Timer mit den letzten und nächsten Ausführungszeiten sehen, etwa so:

Do 2026-01-18 00:00:00 UTC 23h übrig Mi 2026-01-17 00:00:11 UTC 47 min vor logrotate.timer

Wenn der logrotate.timer in der Ausgabe fehlt – ist der Timer deaktiviert. Aktivieren Sie ihn:

sudo systemctl enable logrotate.timer

sudo systemctl start logrotate.timer

Statusdatei

Sie können überprüfen, wann logrotate zuletzt durch seine eigene Statusdatei ausgeführt wurde:

cat /var/lib/logrotate/status

Dies ist die eigene Rotationshistorie von logrotate. Nach dem ersten echten Lauf sehen Sie jede Protokolldatei mit dem Datum ihrer letzten Rotation:

"/opt/myapp/app.log" 2026-1-17 "/var/log/nginx/access.log" 2026-1-17

Wenn ein Protokoll nicht wie erwartet rotiert – ist dies der erste Ort, an dem Sie nachsehen sollten.

Rollback

Um alles rückgängig zu machen, löschen Sie einfach die Konfigurationsdatei aus /etc/logrotate.d/:

sudo rm /etc/logrotate.d/myapp

Dies wird die Protokollverarbeitung für Ihre Anwendung stoppen. Bereits rotierte Dateien werden nicht gelöscht.

Um logrotate vollständig zu entfernen:

Debian/Ubuntu:

sudo apt remove logrotate

CentOS/RHEL:

sudo yum remove logrotate

Info

Wichtig: Das Entfernen von logrotate deaktiviert die Protokollrotation für das gesamte System, einschließlich nginx, rsyslog und anderer Dienste, die darauf angewiesen sind.

Fazit

Das ist alles. Eine gut geschriebene Datei in /etc/logrotate.d/, überprüft mit -d – und es ist erledigt. Protokolle bleiben sauber, die Festplatte bleibt gesund, und Sie müssen nicht mehr darüber nachdenken.

Dokumentversion: 1.2
Zuletzt aktualisiert: März 2026
Besitzer: Technisches Dokumentationsteam

VAT

  • Other

    Ex. VAT

    0%
  • austria

    Austria

    20%
  • Belgium

    Belgium

    21%
  • Bulgaria

    Bulgaria

    20%
  • Croatia

    Croatia

    25%
  • Cyprus

    Cyprus

    19%
  • Czech Republic

    Czech Republic

    21%
  • Denmark

    Denmark

    25%
  • Estonia

    Estonia

    22%
  • France

    France

    20%
  • Finland

    Finland

    24%
  • Germany

    Germany

    19%
  • Greece

    Greece

    24%
  • Hungary

    Hungary

    27%
  • Ireland

    Ireland

    23%
  • Italy

    Italy

    22%
  • Latvia

    Latvia

    21%
  • Lithuania

    Lithuania

    21%
  • Luxembourg

    Luxembourg

    17%
  • Malta

    Malta

    18%
  • Netherlands

    Netherlands

    21%
  • Poland

    Poland

    23%
  • Portugal

    Portugal

    23%
  • Romania

    Romania

    19%
  • Slovakia

    Slovakia

    20%
  • Slovenia

    Slovenia

    22%
  • Spain

    Spain

    21%
  • Sweden

    Sweden

    25%
  • USA

    USA

    0%
european
states
  • germany
  • Español
  • Italiano
  • Poland
  • Русский
  • Slovenski
  • Türkçe
  • ukraine
  • kingdom
  • French
  • Hrvatska
  • Other
  • Austria
  • Belgium
  • Bulgaria
  • Croatia
  • Cyprus
  • Czech Republic
  • Denmark
  • Estonia
  • Finland
  • France
  • Germany
  • Greece
  • Hungary
  • Ireland
  • Italy
  • Latvia
  • Lithuania
  • Luxembourg
  • Malta
  • Netherlands
  • Poland
  • Portugal
  • Romania
  • Slovakia
  • Slovenia
  • Spain
  • Sweden
  • USA