Logrotate Konfigurations Datei

Im folgenden die wichtigsten Dateien damit Logrotate richtig funktioniert.

/usr/sbin/logrotate
Das Logrotate Kommando selbst.
/etc/cron.daily/logrotate
Das Shell Script das täglich ausgeführt wird.
/etc/logrotate.conf
Die Logrotate Konfigurationsdatei für alle Log Files.
/etc/logrotate.d/
Verzeichnis in dem die Packete ihre Log Rotation Konfigs ablegen. Wird von logrotate.conf eingebunden.


/etc/cron.daily/logrotate

#!/bin/sh

test -x /usr/sbin/logrotate || exit 0
/usr/sbin/logrotate /etc/logrotate.conf

/etc/logrotate.conf

# see "man logrotate" for details
# rotate log files weekly
weekly

# keep 4 weeks worth of backlogs
rotate 4

# create new (empty) log files after rotating old ones
create

# uncomment this if you want your log files compressed
compress

# packages drop log rotation information into this directory
include /etc/logrotate.d

# no packages own wtmp, or btmp -- we'll rotate them here
/var/log/wtmp {
    missingok
    monthly
    create 0664 root utmp
    rotate 1
}

/var/log/btmp {
    missingok
    monthly
    create 0660 root utmp
    rotate 1
}

# system-specific logs may be configured here

/etc/logrotate.d/

drwxr-xr-x  2 root root 4096 Jul  2 15:50 ./
drwxr-xr-x 98 root root 4096 Jul  2 13:08 ../
-rw-r--r--  1 root root  787 Jul  2 15:50 apache2
-rw-r--r--  1 root root  173 Apr 13  2015 apt
-rw-r--r--  1 root root   79 Nov  8  2014 aptitude
-rw-r--r--  1 root root  232 Apr 10  2015 dpkg
-rw-r--r--  1 root root  146 Feb 17  2015 exim4-base
-rw-r--r--  1 root root  126 Feb 17  2015 exim4-paniclog
-rw-r-----  1 root root  176 Mär 12  2016 iptables
-rw-r--r--  1 root root  847 Jan 27  2016 mysql-server
-rw-r--r--  1 root root  515 Okt  2  2014 rsyslog
-rw-r--r--  1 root root  235 Jun 15  2015 unattended-upgrades

Logrotate size Optionen

Logfiles werden rotiert, wenn sie die angebene Größe in Bytes überschreiten. (100000 bedeutet 100000 Bytes, 100k bedeutet 100 KiloBytes und 10M bedeutet 10 MegaBytes). Wie man eine Logdatei nur min. alle 5KB rotieren lässt wird in folgenden Beispiel gezeigt.

/etc/logrotate.d/log.test

/tmp/log/dummy.log {
        size 5k
        create 770 user gruppe
        rotate 3
}

Diese Konfiguration hat 3 Optionen:

size 5k
Logrotate wird diese Datei nur rotieren wenn die Größe gleich oder größer als 5KB ist.
create 770 user gruppe
Erstelle die neue Datei und zwar mit den Berechtigungen 770, für den Benutzer:user und der Gruppe:gruppe
rotate 3
Diese Option bestimmt die Anzahl der verfügbar gehaltenen rotierten Dateien. Es werden nur die letzten 3 Logfiles + die aktuelle aufgehoben.

Die Logdatei vor dem Logrotate:

-rw-r-----  1 root root  17K Jul  2 17:58 dummy.log

Lässt man nun Logrotate mit der Option -v laufen (-v = Verbose, alternativ kann auch -d = Debug - führt nur einen theoretischen Test durch oder -s = Ausgabe in eine Statusdatei verwendet werden) ergibt dies folgendes:

$ logrotate -v  /etc/logrotate.d/log.test
reading config file /etc/logrotate.d/log.conf

Handling 1 logs

rotating pattern: /tmp/log/dummy.log  5120 bytes (3 rotations)
empty log files are rotated, old logs are removed
considering log /tmp/log/dummy.log
  log needs rotating
rotating log /tmp/log/dummy.log, log->rotateCount is 3
dateext suffix '-20170703'
glob pattern '-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
renaming /tmp/log/dummy.log to /tmp/log/dummy.log.1
creating new /tmp/log/dummy.log mode = 0770 uid = 10xx gid = 10xx
$ ls -lah
-rwxrwx---  1 user gruppe    0 Jul  2 18:05 dummy.log*
-rw-r-----  1 root root    17K Jul  2 17:58 dummy.log.1

Wenn Logrotate hier mehrmals gelaufen ist wird nach 3 Rotationen und mehr folgender Zustand der Dateien erreicht und gehalten:

  • dummy.log
  • dummy.log.1
  • dummy.log.2
  • dummy.log.3

Man sollte beachten das das Log weiterhin in die Datei dummy.log.1 geschrieben wird, wendet man nicht Methoden wie beim Apache mit verbundenen Reload des Services an.

Logrotate copytruncate Option

Diese Option schneidet das originale Logfile ab, nach dem es kopiert wurde. Normalerweise wird das alte Logfile umbenannt und ein neues erstellt. Da es aber Applikationen gibt, die nicht dazu gezwungen werden können, ihr Logfile zu schließen, wurde diese alternative Möglichkeit geschaffen. Es kann bei diesem Vorgehen passieren, das einige Daten verloren gehen könnten. Außerdem hat die create - Direktive keine Wirkung mehr.

/tmp/log/dummy.log {
        size 5k
        copytruncate
        rotate 3
}

Logrotate compress Option

Komprimiert das Logfile mit gzip als Standard.

/tmp/log/dummy.log {
        size 5k
        compress
        rotate 3
}

Logrotate compresscmd & compressext Option

/tmp/log/dummy.log {
        size 5k
        compress
		compresscmd /bin/bzip2
		compressext .bz2
        rotate 3
}

Folgende Komprimierungsoptionen wurden angegeben:

compress
Besagt das das rotierte Log komprimiert wird.
compresscmd
Bestimmt das Betriebssystemkommando, mit dem die rotierten Logfiles gepackt werden sollen. Als Standard wird gzip verwendet.
compressext
Definiert die Dateinamenserweiterung der komprimierten Dateien. Als Standard wird die Dateinamenserweiterung des verwendeten Komprimierungsprogrammes verwendet.

Logrotate dateext Option

Archivierte Version erhalten einen Datumsstempel anstatt einer laufenden Nummer.

/tmp/log/dummy.log {
        size 5k
		dateext
        compress
		compresscmd /bin/bzip2
		compressext .bz2
        rotate 3
}

Die Ausgabe ist wie folgt:

-rw-r-----  1 root root    0 Jul  2 23:17 dummy.log
-rw-r-----  1 root root 2,0K Jul  2 18:10 dummy.log-20170702.bz2

Dies funktioniert allerdings nur einmal am Tag da es die komprimierte Datei schon gibt. In Zusammenhang mit einer Größe von 5K eher eine schlechte Wahl.

Logrotate monthly, daily, weekly Option

Um Logdateien monatlich rotieren zu lassen.

/tmp/log/dummy.log {
		monthly
		dateext
		compress
		compresscmd /bin/bzip2
		compressext .bz2
		rotate 3
}

Um Logdateien wöchentlich rotieren zu lassen.

/tmp/log/dummy.log {
		weekly
		dateext
		compress
		compresscmd /bin/bzip2
		compressext .bz2
		rotate 3
}

Um Logdateien täglich rotieren zu lassen.

/tmp/log/dummy.log {
		daily
		dateext
		compress
		compresscmd /bin/bzip2
		compressext .bz2
		rotate 3
}

Logrotate postrotate, prerotate Option

prerotate
Die Betriebssystemkommandos zwischen prerotate und endscript werden vor dem Rotieren des Logfiles ausgeführt.
postrotate
Die Betriebssystemkommandos zwischen postrotate und endscript werden nach dem Rotieren des Logfiles ausgeführt.

Besonders nützlich, möchte man wie im Beispiel, die Konfig des Apache neu einlesen. Damit schreibt der Apache in die neu erstellten Logdateien.

/tmp/log/dummy.log {
		daily
		dateext
		compress
		compresscmd /bin/bzip2
		compressext .bz2
		rotate 3
		prerotate
			if [ -d /etc/logrotate.d/irgendeinscript ]; then \
				run-parts /etc/logrotate.d/irgendeinscript; \
			fi; \
		endscript	
		postrotate
			if /etc/init.d/apache2 status > /dev/null ; then \
				/etc/init.d/apache2 reload > /dev/null; \
			fi; 
		endscript
}

Logrotate sharedscripts Option

Normalerweiser werden die unter prerotate und postrotate definierten Prozeduren für jede einzelne Logdatei ausgeführt. Mit dieser Option werden diese Prozeduren aber nur einmal ausgeführt. Als Beispiel werden alle Dateien mit der Endung .log im Ordner /var/log/apache2/ durchlaufen und nur einmal zum Ende der reload des Apache ausgeführt.

/var/log/apache2/*.log {
		daily
		dateext
		compress
		compresscmd /bin/bzip2
		compressext .bz2
		rotate 3
		sharedscripts
		postrotate
                if /etc/init.d/apache2 status > /dev/null ; then \
                    /etc/init.d/apache2 reload > /dev/null; \
                fi; 
    endscript
}

Logrotate maxage Option

Löscht rotierte Logdateien nach der entsprechenden Anzahl von Tagen.

/tmp/log/dummy.log {
		daily
		dateext
        compress
		compresscmd /bin/bzip2
		compressext .bz2
        rotate 3
		maxage 30
}

Logrotate missingok Option

Wenn das Logfile nicht vorhanden ist, dann wird keine Fehlermeldung erzeugt und mit der Verarbeitung fortgefahren.

/tmp/log/dummy.log {
		daily
		dateext
        compress
		compresscmd /bin/bzip2
		compressext .bz2
        rotate 3
		missingok
}

Logrotate weitere Optionen

Weitere Optionen zu z.B. olddir, notifempty, mail, mailfirst, maillast und und und..... kann man sich auch in der MAN Page anzeigen lassen.

$ man logrotate