logrotate komprimiert / var / log / messages nicht

11

Im Laufe der Zeit bemerkte ich einige Protokolle in /var/logwie auth, kernund messageswurden riesige bekommen. Ich habe logrotateEinträge für sie gemacht:

$ cat /etc/logrotate.d/auth.log 
/var/log/kern.log {
    rotate 5
    daily
}
$ cat /etc/logrotate.d/kern.log 
/var/log/kern.log {
    rotate 5
    daily
}
$ cat /etc/logrotate.d/messages 
/var/log/messages {
    rotate 5
    daily
    postrotate
        /bin/killall -HUP syslogd
    endscript
}

Ich habe auch die compressOption aktiviert:

$ grep compress /etc/logrotate.conf 
# uncomment this if you want your log files compressed
compress

Dies funktioniert gut für auth.log, kern.logund andere, was bedeutet , dass jedes dieser Protokolle ist gzip und gedreht wird , mit den letzten 5 Tagen von Protokollen festgehalten. /var/log/messageswird jedoch nicht komprimiert, was zu mehr als 5 Tagen Protokollen führt:

$ ls /var/log/messages*
/var/log/messages           /var/log/messages-20100213
/var/log/messages-20100201  /var/log/messages-20100214
/var/log/messages-20100202  /var/log/messages-20100215
/var/log/messages-20100203  /var/log/messages-20100216
/var/log/messages-20100204  /var/log/messages-20100217
/var/log/messages-20100205  /var/log/messages-20100218
/var/log/messages-20100206  /var/log/messages-20100219
/var/log/messages-20100207  /var/log/messages-20100220
/var/log/messages-20100208  /var/log/messages-20100221
/var/log/messages-20100209  /var/log/messages-20100222
/var/log/messages-20100210  /var/log/messages-20100223
/var/log/messages-20100211  /var/log/messages-20100224
/var/log/messages-20100212

Wie in einer anderen logrotateFrage zu ServerFault erläutert , werden die alten Protokolle (höchstwahrscheinlich) nicht entfernt, da die Dateienden für jede Datei unterschiedlich sind. Dies scheint daran zu liegen, dass die Dateien nicht komprimiert werden.

Was kann ich tun, /var/log/messagesum die letzten 5 Tage der Protokolle wie alle meine anderen Protokolldateien zu komprimieren und zu drehen? Was vermisse ich?

EDIT 1 : Zusätzliche Informationen wie in den ersten paar Antworten angefordert.

Ich verwende Gentoo Linux. Meine /etc/logrotate.confDatei:

$ cat /etc/logrotate.conf 
# $Header: /var/cvsroot/gentoo-x86/app-admin/logrotate/files/logrotate.conf,v 1.3 2008/12/24 20:49:10 dang Exp $
#
# Logrotate default configuration file for Gentoo Linux
#
# See "man logrotate" for details
# rotate log files weekly
weekly
#daily
# keep 4 weeks worth of backlogs
rotate 4
# create new (empty) log files after rotating old ones
create
# use date as a suffix of the rotated file
dateext
# uncomment this if you want your log files compressed
compress
# packages can drop log rotation information into this directory
include /etc/logrotate.d
notifempty
nomail
noolddir
# no packages own lastlog or wtmp -- we'll rotate them here
/var/log/wtmp {
    monthly
    create 0664 root utmp
    rotate 1
}
/var/log/btmp {
    missingok
    monthly
    create 0600 root utmp
    rotate 1
}

/etc/logrotate.d Enthält meine benutzerdefinierten Konfigurationsdateien wie oben erwähnt sowie Konfigurationen für MySQL, Rsync usw., die von diesen Paketen installiert wurden.

Meine Wurzel crontabist leer:

$ sudo crontab -l
no crontab for root

Ich habe /etc/cron.{daily,hourly,monthly,weekly}alles auf Syslog überprüft , und es gibt ein Skript, das sich dreht /var/log/syslogund /var/log/auth.log.

Als nächstes habe ich eine /var/log/messageseinzige logrotateKonfigurationsdatei erstellt, wie von CarpeNoctem vorgeschlagen:

$ cat logrotate-messages 
weekly
rotate 4
create
dateext
compress
notifempty
nomail
noolddir
/var/log/messages {
    rotate 5
    daily
    postrotate
        /bin/killall -HUP syslogd
    endscript
}

Dann lief ich logrotatemanuell:

$ logrotate -d logrotate-messages -f
reading config file logrotate-messages
reading config info for /var/log/messages 

Handling 1 logs

rotating pattern: /var/log/messages  forced from command line (5 rotations)
empty log files are not rotated, old logs are removed
considering log /var/log/messages
  log needs rotating
rotating log /var/log/messages, log->rotateCount is 5
dateext suffix '-20100224'
glob pattern '-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
glob finding old rotated logs failed
renaming /var/log/messages to /var/log/messages-20100224
creating new /var/log/messages mode = 0644 uid = 0 gid = 0
running postrotate script
running script with arg /var/log/messages : "
        /bin/killall -HUP syslogd
"
compressing log with: /bin/gzip
$ which gzip
/bin/gzip
$ file /bin/gzip
/bin/gzip: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.9, stripped

Laut obigem Protokoll wurde logrotatedas Protokoll mit / bin / gzip komprimiert, aber ich sehe keine komprimierte Nachrichtendatei in /var/log. Außerdem ist das Globbing für alte gedrehte Dateien fehlgeschlagen.

BEARBEITEN 2 : Hinzufügen der Debug-Ausgabe von logrotaterun nach dem Anhängen eines .gzSuffix an alte /var/log/message-*Dateien.

Wir beginnen mit:

$ ls /var/log/messages*
/var/log/messages              /var/log/messages-20100222.gz
/var/log/messages-20100219.gz  /var/log/messages-20100223.gz
/var/log/messages-20100220.gz  /var/log/messages-20100224.gz
/var/log/messages-20100221.gz

Führen Sie dann logrotateunsere benutzerdefinierte Konfigurationsdatei aus:

$ logrotate -d logrotate-messages -f
reading config file logrotate-messages
reading config info for /var/log/messages 

Handling 1 logs

rotating pattern: /var/log/messages  forced from command line (5 rotations)
empty log files are not rotated, old logs are removed
considering log /var/log/messages
  log needs rotating
rotating log /var/log/messages, log->rotateCount is 5
dateext suffix '-20100224'
glob pattern '-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
removing /var/log/messages-20100219.gz
removing old log /var/log/messages-20100219.gz
destination /var/log/messages-20100224.gz already exists, skipping rotation

Diesmal logrotateist glob erfolgreich und findet den sechsten Druck Logdatei, in der Absicht , es zu entfernen. Die Datei wird nicht entfernt. Ich denke, das liegt daran, dass wir im Debug-Modus laufen.

Ich bin gespannt, ob das Aktivieren der delaycompressOption für /var/log/messageshilfreich ist. Ich habe es aktiviert und werde die Ergebnisse am nächsten Morgen überprüfen.

Mike Mazur
quelle
Können Sie Ihre logrotate.conf posten? Nichts in den Auszügen, die Sie bisher geteilt haben, würde das Datumssuffix in diesen Nachrichtendateien erklären. Logrotate wurde nicht verwendet, um Datumssuffixe für gedrehte Protokolldateien zu unterstützen. Dies lässt mich glauben, dass etwas ganz anderes diese Dateien erstellt. Überprüfen Sie / etc / crontab, root's crontab und /etc/cron.daily, um festzustellen, ob ein anderes Skript versucht, denselben Job auszuführen.
Jmtd
Können Sie uns außerdem mitteilen, welche Linux-Distribution Sie verwenden? Debian / Ubuntu hat ein eigenes Protokollrotationsskript, das Ihre logrotate Sachen durcheinander bringen könnte.
Thepocketwade
Danke für die Antwort. Ich verwende Gentoo Linux. Meine Crontabs verwalten / var / log / messages nicht. Bitte beachten Sie die neuen Informationen in meiner Frage für Details.
Mike Mazur

Antworten:

8

Hinzufügen delaycompresszum Konfigurationsabschnitt zur /var/log/messagesBehebung des Problems.

Von man logrotate:

   delaycompress
          Postpone  compression of the previous log file to the next rota‐
          tion cycle.  This only has effect when used in combination  with
          compress.   It  can  be used when some program cannot be told to
          close its logfile and thus might continue writing to the  previ‐
          ous log file for some time.

Ich denke sysklogd, mein Syslog-Daemon kann nicht angewiesen werden, seine Protokolldatei zu schließen, und daher ist dies notwendig.

Interessanterweise ist die ursprüngliche Konfiguration hatte ich (ohne delaycompresskam Richtlinie), gerade aus man logrotate(außer ich geändert weeklyzu daily):

   # sample logrotate configuration file
   compress

   /var/log/messages {
       rotate 5
       weekly
       postrotate
           /usr/bin/killall -HUP syslogd
       endscript
   }
Mike Mazur
quelle
Es heißt unbekannte unbekannte Option 'delalycompress' # logrotate -v /etc/logrotate.d/apc_rtbinfo.conf beim Lesen der Konfigurationsdatei /etc/logrotate.d/apc_rtbinfo.conf beim Lesen der Konfigurationsinformationen für /mnt/log/frengo/apc_rtbinfo.log Fehler: /etc/logrotate.d/apc_rtbinfo.conf:7 unbekannte Option 'delalycompress' - Zeile ignorieren Behandlung von 1 Protokollen
Ashish Karpe
# cat /etc/logrotate.d/apc_rtbinfo.conf /mnt/log/frengo/apc_rtbinfo.log {tägliche fehlende notifempty Größe 2000M komprimieren delalycompress Sharedscripts copytruncate drehen 3}
Ashish Karpe
1
ok bekam den Fehler, dass es einen Tippfehler in "delalycompress" gab
Ashish Karpe
Das Problem ist jedoch, dass log.1 mehr als 2000 MB beträgt .1 80M /mnt/log/frengo/apc_rtbinfo.log.2 0 /mnt/log/frengo/apc_rtbinfo.log-20151222 679M /mnt/log/frengo/apc_rtbinfo.log-20151225.gz 681M / mnt / log / frengo /apc_rtbinfo.log-20151226.gz 691M /mnt/log/frengo/apc_rtbinfo.log-20151227.gz 0 /mnt/log/frengo/apc_rtbinfo.log-20151228 70M /mnt/log/frengo/apc_rtbinfo.log2. gz 80M /mnt/log/frengo/apc_rtbinfo.log.3 80M /mnt/log/frengo/apc_rtbinfo.log.4
Ashish Karpe
5

Es ist schwer mit nur diesen Informationen zu sagen, aber ich kann Ihnen sagen, was mich ein paar Mal gerettet hat.

Logrotate verfügt über eine Debug-Option, mit der ein Play-by-Play für jeden Schritt gedruckt wird, der zum Standardisieren erforderlich ist. In diesem Fall könnten Sie also Folgendes tun:

logrotate -d /etc/logrotate.conf

Die Ausgabe zeigt Ihnen, was genau los ist. Wenn Sie die Debug-Ausgabe eingrenzen möchten, können Sie dies auch tun

logrotate -d /etc/logrotate.d/messages

Möglicherweise möchten Sie die Hauptoptionen logrotate.conf vorübergehend in diesem Dateiblock platzieren, da die direkte Angabe der Datei bedeutet, dass die Hauptkonfigurationsoptionen nie gelesen wurden. Wenn Sie die einzelne Datei angeben, können Sie auch die -fOption (erzwingen) in Kombination mit der Debug-Option verwenden, um einen Überblick über die tatsächliche Rotation der Nachrichtendatei zu erhalten.

Carpe Noctem
quelle
Ich habe versucht, logrotate manuell auszuführen, wie Sie vorgeschlagen haben, und es sagt mir, dass es die Protokolle komprimiert, aber ich finde nirgendwo komprimierte Protokolle. Siehe meine Frage oben für Details.
Mike Mazur
1
Benennen Sie die 5 ältesten Nachrichtendateien so um, dass sie mit einer .gz enden, und prüfen Sie, ob logrotate die älteste entfernt, wie es sollte. Wenn dies der Fall ist, wissen wir, dass das Globbing fehlschlägt, weil gzip nicht richtig ausgeführt wird. Dies wird zumindest bestätigen, dass der Mangel an Kompression für den Mangel an Rotation verantwortlich ist.
CarpeNoctem
Fertig, Details zur obigen Frage hinzugefügt. Ich bin gespannt, ob es ein Konfliktproblem mit der Live- /var/log/messagesDatei gibt und die delaycompressOption hilft.
Mike Mazur
Ein weiterer interessanter Punkt, den ich herausgefunden habe. Wenn Sie die Option -d aktivieren, berührt der Befehl logrotate die Protokolldateien nicht. Weitere Informationen finden Sie im Handbuch. -d, --debug Turns on debug mode and implies -v. In debug mode, no changes will be made to the logs or to the logrotate state file.
CBR
1

Versuchen Sie diese Einstellung in Ihrer logrotate.conf:

dateformat .%Y%m%d

und benennen Sie Ihre vorhandenen Nachrichtendateien um, um einen Punkt anstelle eines Bindestrichs zu verwenden. Versuchen Sie es dann erneut mit Ihrem Logrotate.

Die folgenden Hinweise ließen mich glauben, dass der Bindestrich dazu führen könnte, dass der Glob ausfällt, wenn er irgendwie als Option interpretiert wird (wo - würde dies beheben). Es macht keinen Sinn, aber es könnte möglich sein.

dateext suffix '-20100224'
glob pattern '-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
glob finding old rotated logs failed
Bis auf weiteres angehalten.
quelle
Ich denke nicht, dass dies die Grundursache ist. Das aktuelle Datumsformat mit einem Bindestrich funktioniert für andere Protokolldateien einwandfrei. Der Unterschied zwischen diesen Protokolldateien und /var/log/messagesbesteht darin, dass die gedrehten /var/log/messagesDateien nicht komprimiert werden.
Mike Mazur