von Thomas
Erstellt am 10.11.2021
Logrotate wird benötigt, um Log Dateien auf Linux System automatisch verarbeiten zulassen. Dabei erledigt logrotate z.B. die Aufgabe, dass eine Log Datei einmal in der Woche komprimiert und anschließend neu erzeugt wird. Das hat den Vorteil, dass ein Log nicht mehrere Gigabyte groß wird. Das Zugriffslog von einem nginx Webserver kann bei einer kleinen Webseite am Tag schnell mehrere Megabyte erreichen. Wird die Log Datei nicht automatisch verarbeitet bzw. komprimiert, kann die Größe über Monate hinweg paar Gigabyte erreichen. Der von der Log Datei verbrauchte Speicherplatz kann für andere Anwendungen genutzt werden - und seinen wir mal ehrlich, wer brauch noch Logeinträge die mehrere Monate alt sind? In diesem Tutorial möchte ich euch die Bedienung von logrotate näher bringen, welches bei Linux Betriebssystemen standardmäßig verwendet wird, um Log Dateien zu verarbeiten.
Logrotate sollte in allen üblichen Linuxsystemen mit dem dazugehörigem Packetmanager installiert werden können. Beispiel unter Debain (wobei gerade unter Debian logrotate vorinstalliert sein sollte):
apt-get install logrotate
Logrotate wird in der Regel in der Datei /etc/logroate.conf konfiguriert. Die Datei wird standardmäßig bei der Installation angelegt und muss nicht groß verändert werden. Die Kommentierungen in der Datei selbst, beschreiben die Konfigurationen sehr gut, sodass ich nicht weiter drauf eingehen möchte. In dem Verzeichnis /etc/logrotate.d finden sich Dateien (z. B. nginx, fail2ban, etc.), die für die Rotation von Log Dateien einzelner Dienste verantwortlich sind. Sie werden über den Eintrag include /etc/logrotate.d in der logroate.conf Datei geladen. Im Folgendem möchte ich euch die Konfiguration für nginx näher erläutern, wobei die Handhabung für andere Beispiele exemplarisch ist. Konfigurationen in diesen Dateien überschreiben die default Werte aus der /etc/logroatet.conf Datei, sofern sie angegeben sind.
/var/log/nginx/*log { daily missingok rotate 3 notifempty dateext dateformat -%Y-%m-%d create 640 http log compress sharedscripts postrotate test ! -r /run/nginx.pid || kill -USR1 `cat /run/nginx.pid` endscript }
Es gibt noch zahlreiche weitere Funktionen die konfiguriert werden können. Am besten sieht man sich dazu direkt die man Page von logrotate an. Die Option delaycompress ist dabei auch sehr interessant. Der Parameter ist dafür verantwortlich, dass eine Komprimierung im nächsten Rotationszyklus erledigt wird.
Um einen Testlauf von logroate ausführen zu lassen, kann folgende Systax verwendet werden:
/usr/sbin/logrotate /etc/logrotate.conf --debug
Dabei sorgt der Parameter --debug dafür, dass ein detailiertes Ablauf eingeblendet ist aber nichts final durchgeführt wird. Dadurch kann die Konfiguration gut getestet werden. Soll logrotate ohne Testlauf ausgeführt werden, kann --debug weggelassen werden.
Da nicht jeden Tag das Kommando manuell angestoßen wird, kann logroate automatisch ausgeführt werden. Bei Debian Derivaten sollte das automatisch nach der Installation der Fall sein. Mit
systemctl status logroate
kann der Status von dem Service geprüft werden. Unter anderen Derivaten, wie z. B. Arch Linux ist logroate nicht vorkonfiguriert. Mittels
systemctl enable logroate
wird unter Arch Linux eine Timer Datei erzeugt, die unter /etc/systemd/system/timers.target.wants zu finden sein sollte. Es muss nur ein logroate.service unter /etc/systemd/system konfiguriert werden und der Service funktioniert. Exemplarisch könnte die Service Datei wie folgt aussehen:
[Unit] Description=Automatic logrotate After=network-online.target [Service] Type=simple ExecStart=/usr/bin/logrotate /etc/logrotate.conf TimeoutStopSec=180 KillMode=process KillSignal=SIGINT [Install] WantedBy=multi-user.target