Kurzanleitung zu logrotate
Stand: 03. November 2004

Allgemeines

logrotate ist ein Werkzeug um Log-Dateien zu verwalten. Wenn Log-Dateien keine Beachtung geschenkt wird, so können sie wachsen und wachsen und wachsen ... Das Ende vom Lied ist dann eine volle Festplatte. Auch das Durchsuchen von großen Log-Dateien nimmt einige Zeit in Anspruch. Um dass zu Verhindern und Platz auf der Festplatte zu sparen, ist logrotate entwickelt worden. Mit logrotate kann man Log-Dateien ab einer bestimmten Größe und/oder täglich | wöchentlich | monatlich rotieren lassen.

Funktionsweise

logrotate wird üblicherweise über cron gestartet.logrotate schaut zunächst in die Konfiguratiosdatei /etc/logrotate.conf. In dieser Datei sind die globalen Einstellungen hinterlegt. Normalerweise gibt es in dieser Datei auch einen Eintrag, der logrotate anweißt, Konfigurationsdateien im Verzeichnis /etc/logrotate.d/ ebenfalls zu beachten. Anschließend wird die Datei /var/lib/logrotate.status gelesen. Dort sind Informationen hinterlegt, wann eine Datei zum letzten Mal bearbeitet wurde. Beim ersten Aufruf wird diese Datei angelegt und alle zu bearbeitenden Log-Dateien erhalten das aktuelle Datum als letzten Bearbeitungszeitpunkt. Das bedeutet, daß alle Versuche, eine Log-Datei zu rotieren, an diesem Tage fehlschlagen. Um die Funktion erstmalig zu testen, muß das Datum der einzelnen Log-Dateien in der Statusdatei /var/lib/logrotate.status geändert oder die Option -f benutzt werden.

Die verwendeten Dateien

Die Programmdatei logrotate

logrotate kann mit verschiedenen Optionen aufgerufen werden:
Aufruf: logrotate [-dv] [-f|--force] [-s|--state {Status-File}] {Konfigurationsdatei}
  • -d
    Im Debug-Modus werden keine Änderungen vorgenommen sondern nur ein Testlauf mit erweiterten Ausgaben durchgeführt.

  • -v
    Mit dieser Option wird logrotate veranlaßt, erweiterte Ausgaben zu erzeugen.

  • -f, --force
    Mit diesem Schalter wird logrotate gezwungen, die Logfiles rotieren zu lassen, auch wenn es nicht notwendig erscheint.

  • -s, --state {Status-File}
    Das Statusfile liegt normalerweise im Verzeichnis /var/lib/logrotate.status. Soll aber ein anderes Statusfile verwendet werden, so wird es hier angegeben. Damit kann eine Trennung für verschiedene Benutzer erreicht werden. Diese Trennung macht aber nur Sinn, wenn auch eine anders Konfigurationsdatei verwendet wird.

  • {Konfigurationsdatei}
    Wenn keine Konfigurationsdatei angegeben wurden, so wird als Standard /etc/logrotate.conf verwendet. Sollen verschiedene Konfigurationen benutzt werden, so muß der Pfad und der Dateiname zur alternativen Konfiguration angegeben werden.

Die Konfigurationsdatei /etc/logrotate.conf

Das ist die Konfigurationsdatei für die globalen Einstellungen. Diese Einstellungen können durch lokale Einstellungen jederzeit überschrieben werden.

Lokale Definitionen beziehen sich in der Regel auf bestimmte Log-Dateien während die globalen Definitionen für alle Dateien gelten. Der Aufbau dieser Definitionen wird zunächst an einer Beispielkonfiguration erläutert:



# see "man logrotate" for details
# Rotiere generell wöchentlich
weekly

# 4 Versionen werden pro Log-datei aufgehoben
rotate 4

# Erzeuge ein neues leeres Log-File nach dem rotieren.
create

# Komprimiere das rotierte Logfile
compress

# Verwende zum komprimieren und decomprimieren BZIP2.(ggf. Einkommentieren)
#compresscmd /usr/bin/bzip2
#uncompresscmd /usr/bin/bunzip2

# RPM Pakete legen i.d.R. Informationen für das Rotieren von Log-dateien hier ab.
# Mit der include - Anweisung, berücksichtigt logrotate Definitionen in dem entsprechenden Verzeichnis
include /etc/logrotate.d

# In diesem Abschnitt wird das Rotieren der Log-datei wtmp im Verzeichnis /var/log
# definiert. Diese Datei wird monatlich (monthly) rotiert, nur eine Version (rotate 1) wird aufgehoben
# und das rotierte Logfile wird dem Benutzer root und der Gruppe utmp gehören, sowie die
# Dateirechte 644 erhalten (create 0664 root utmp)
/var/log/wtmp {
monthly
create 0664 root utmp
rotate 1
}

# system-specific logs may be also be configured here.



Die oben aufgeführte Definition für die Log-Datei /var/log/wtmp kann auch in einer seperaten Datei im include - Verzeichnis (hier /etc/logrotate.d/) abgelegt werden. Der Name dieser Datei könnte wtmp lauten (was Sinn macht), aber auch meier, mueller oder schultze wäre möglich.

Der Aufbau dieser Datei würde dann so aussehen:

/var/log/wtmp {
monthly
create 0664 root utmp
rotate 1
}


Durch die Verwendung des include - Verzeichnis (hier /etc/logrotate.d/) habe ich die Möglichkeit, für jede Applikation oder Log-Datei eine eigene Konfiguration mit sprechendem Dateinamen zu hinterlegen. Dadurch bleibt die Konfiguration übersichtlich.

Die einzelnen Konfigurationsparameter.

compress Rotierte Logfiles werden gepackt.
compresscmd Bestimmt das Betriebssystemkommando, mit dem die rotierten Logfiles gepackt werden sollen. Als Standard wird gzip verwendet.
uncompresscmd Bestimmt das Betriebssystemkommando, mit dem die rotierten Logfiles wieder ausgepackt werden sollen. Als Standard wird gunzip verwendet.
compressext Definiert die Dateinamenserweiterung der komprimierten Dateien. Als Standard wird die Dateinamenserweiterung des verwendeten Komprimierungsprogrammes verwendet.
compressoption Optionale Parameter für das Komprimierungsprogramm.
copytruncate 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.
create {Modus} {Benutzer} {Gruppe} Direkt nach dem rotieren der Log-Datei werden die Dateiattribute entsprechend den Vorgaben gesetzt.
daily Die Logfiles werden täglich gesichert.
dateext Archivierte Version erhalten einen Datumsstempel anstatt einer laufenden Nummer.
delaycompress Mit dieser Option wird die zuletzt rotierte version nicht sofort komprimiert, sondern immer erst im nächsten Rotationszyklus.
extension {ext} Die rotierten Logfiles erhalten die entsprechende Dateinamenserweiterung. An diese Erweiterung wird aber noch ggf. die Erweiterung des Komprimierungsprogrammes angehängt.
ifempty Rotiert das Logfile auch dann, wenn es leer ist. (Standardeinstellung)
include {datei_oder_verzeichnis} Bindet die angegebene Konfigurationsdatei ein. Handelt es sich dabei um ein Verzeichnis, so werden alle in diesem Verzeichnis vorhandenen Dateien eingelesen.
mail {Adresse} Soll ein Logfile gelöscht werden, weil es die älteste Version ist (siehe bei rotate), so wird diese Datei zur angegebenen e-Mail Adresse versendet.
mailfirst Dieser Parameter macht nur in Verbindung mit dem Parameter mail Sinn. An Stelle der zu löschenden Datei, wird die gerade erstellte Datei verschickt.
maillast Dieser Parameter macht nur in Verbindung mit dem Parameter mail Sinn. An Stelle der gerade erstellte Datei wird die zu löschende Datei verschickt. (Standardeinstellung)
maxage {Anzahl} Löscht rotierte Logdateien nach der entsprechenden Anzahl von Tagen.
missingok Wenn das Logfile nicht vorhanden ist, dann wird keine Fehlermeldung erzeugt und mit der Verarbeitung fortgefahren.
monthly Monatliches rotieren der Logdateien.
nocompress Die rotierten Logdateien werden nicht komprimiert.
nocopytruncate Das entsprechende Logfile wird nach dem Kopieren nicht abgeschnitten. Die Option copytruncate wird damit überschrieben!
nocreate Neue Logdateien werden nach dem Verschieben nicht wieder erstellt. Die Option create wird damit überschrieben!
nodelaycompress Rotierte Logdateien werden sofort komprimiert. Die Option delaycompress wird damit überschrieben!
nomail Es werden keine Logfiles als e-Mail versandt.
nomissingok Wenn das Logfile nicht vorhanden ist, dann wird eine Fehlermeldung erzeugt. (Standardeinstellung)
noolddir Die rotierten Logdateien werden normalerweise in dem gleichen Verzeichnis abgelegt.
nosharedscripts Startet Scripte unter den Optionen prerotate und postrotate für jede angegebene Logdatei. (Dieses ist die Standardeinstellung und überschreibt die Option sharedscript.
notifempty Ein leeres Logfile wird nicht rotiert. Die Option ifempty wird damit überschrieben!
olddir {Verzeichnis} Alle rotierten Dateien werden in dem angegebenen Verzeichnis abgelegt. Es muß sich aber auf der gleichen Festplatte befinden.
postrotate / endscript Die Betriebssystemkommandos zwischen postrotate und endscript werden nach dem Rotieren des Logfiles ausgeführt. Die beiden Parameter müssen in einer eigenen Zeile stehen.
prerotate / endscript Die Betriebssystemkommandos zwischen prerotate und endscript werden vor dem Rotieren des Logfiles ausgeführt. Die beiden Parameter müssen in einer eigenen Zeile stehen.
rotate {Anzahl} Diese Option bestimmt die Anzahl der verfügbar gehaltenen rotierten Dateien.
size {Größe} 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)
sharedscript 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.
weekly Wöchentliches rotieren der Logdateien.


Beispielkonfiguration mit nachfolgender Erläuterung

/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

# uncomment these to switch compression to bzip2
#compresscmd /usr/bin/bzip2
#uncompresscmd /usr/bin/bunzip2

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




In /etc/logrotate.conf wird global definiert, daß...
  1. ... Logfiles wöchentlich rotiert werden.
  2. ... 4 Version verfügbar gehalten werden.
  3. ... eine neues Logfile nach dem verschieben erstellt wird.
  4. ... die rotierten Dateien komprimiert werden.
  5. ... Konfigurationsdateien im Verzeichnis /etc/logrotate.d/ ebenfalls berücksichtigt werden.


Im Verzeichnis /etc/logrotate.d liegt die Datei httpd mit folgendem Inhalt:

/etc/logrotate.d/httpd

"/var/log/httpd/access.log" /var/log/httpd/error.log {
rotate 5
mail www@my.org
size=100k
sharedscripts
postrotate
/sbin/killall -HUP httpd
endscript
}



In dieser Datei wird nun konfiguriert, daß ...
  1. ... die beiden Dateie /var/log/httpd/access.log und /var/log/httpd/error.log rotiert werden sollen.
  2. ... 5 Versionen verfügbar gehalten werden.
  3. ... die älteste rotierte Datei vor dem Löschen an www@my.org gemailt wird.
  4. ... die Logdateien auch dann rotiert werden, wenn sie größer als 100 KiloBytes sind.
  5. ... die Prozeduren von postrotate nur einmal ausgeführt werden.
  6. ... nach dem Rotieren der Datei der Prozess httpd reinitialisiert wird. (/sbin/killall -HUP httpd)


Schlußwort

Im wesentlichen Handelt es sich bei diesem Dokument um eine Übersetzung der MAN-Pages zu logrotate und soll als Einführung in das Thema dienen. Ich erhebe keinen Anspruch auf Vollständigkeit und bin bei Datenverlust nicht dafür verantwortlich. Die Nutzung dieses Dokumentes geschieht auf eigene Gefahr.

© Michael Engemann