Logrotate
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
}
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