Im Laufe der Zeit bemerkte ich einige Protokolle in /var/log
wie auth
, kern
und messages
wurden riesige bekommen. Ich habe logrotate
Einträ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 compress
Option aktiviert:
$ grep compress /etc/logrotate.conf
# uncomment this if you want your log files compressed
compress
Dies funktioniert gut für auth.log
, kern.log
und andere, was bedeutet , dass jedes dieser Protokolle ist gzip und gedreht wird , mit den letzten 5 Tagen von Protokollen festgehalten. /var/log/messages
wird 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 logrotate
Frage 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/messages
um 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.conf
Datei:
$ 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 crontab
ist 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/syslog
und /var/log/auth.log
.
Als nächstes habe ich eine /var/log/messages
einzige logrotate
Konfigurationsdatei 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 logrotate
manuell:
$ 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 logrotate
das 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 logrotate
run nach dem Anhängen eines .gz
Suffix 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 logrotate
unsere 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 logrotate
ist 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 delaycompress
Option für /var/log/messages
hilfreich ist. Ich habe es aktiviert und werde die Ergebnisse am nächsten Morgen überprüfen.
Antworten:
Hinzufügen
delaycompress
zum Konfigurationsabschnitt zur/var/log/messages
Behebung des Problems.Von
man logrotate
: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
delaycompress
kam Richtlinie), gerade ausman logrotate
(außer ich geändertweekly
zudaily
):quelle
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:
Die Ausgabe zeigt Ihnen, was genau los ist. Wenn Sie die Debug-Ausgabe eingrenzen möchten, können Sie dies auch tun
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
-f
Option (erzwingen) in Kombination mit der Debug-Option verwenden, um einen Überblick über die tatsächliche Rotation der Nachrichtendatei zu erhalten.quelle
/var/log/messages
Datei gibt und diedelaycompress
Option hilft.-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.
Versuchen Sie diese Einstellung in Ihrer logrotate.conf:
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.
quelle
/var/log/messages
besteht darin, dass die gedrehten/var/log/messages
Dateien nicht komprimiert werden.