logrotate ne compresse pas / var / log / messages

11

Au fil du temps, j'ai remarqué quelques journaux /var/logtels que auth, kernet messagesdevenaient énormes. J'ai fait des logrotateentrées pour eux:

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

j'ai aussi l' compressoption activée:

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

Cela fonctionne très bien pour auth.log, kern.loget d'autres, ce qui signifie que chacun de ces journaux est compressé et tourné, avec les 5 derniers jours de journaux conservés. /var/log/messagesn'est cependant pas compressé, ce qui entraîne plus de 5 jours de journaux:

$ 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

Comme expliqué dans une autre logrotatequestion sur ServerFault , les anciens journaux ne sont (probablement) pas supprimés car les fins de fichier sont différentes pour chaque fichier. Cela semble être dû au fait que les fichiers ne sont pas compressés.

Que puis-je faire pour avoir /var/log/messagescompressé et tourné avec les 5 derniers jours de journaux conservés comme tous mes autres fichiers journaux? Qu'est-ce que je rate?

EDIT 1 : informations supplémentaires demandées dans les premières réponses du couple.

J'utilise Gentoo Linux. Mon /etc/logrotate.confdossier:

$ 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 contient mes fichiers de configuration personnalisés comme mentionné ci-dessus ainsi que les configurations pour mysql, rsync, etc. installées par ces packages.

Ma racine crontabest vide:

$ sudo crontab -l
no crontab for root

J'ai tout vérifié /etc/cron.{daily,hourly,monthly,weekly}pour tout ce qui concerne Syslog, et il y a un script qui tourne /var/log/sysloget /var/log/auth.log.

Ensuite, j'ai fait un /var/log/messages-seulement logrotatefichier de configuration comme suggéré par CarpeNoctem:

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

Ensuite, j'ai couru logrotatemanuellement:

$ 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

Selon le journal ci-dessus, logrotatecompressé le journal avec / bin / gzip, mais je ne vois pas de fichier de messages compressé dans /var/log. En outre, la globalisation des anciens fichiers pivotés a échoué.

EDIT 2 : ajout de la sortie de débogage de l' logrotateexécution après avoir ajouté un .gzsuffixe aux anciens /var/log/message-*fichiers.

Nous commençons avec:

$ 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

Exécutez ensuite logrotateavec notre fichier de configuration personnalisé:

$ 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

Cette fois, logrotateglob réussit et trouve le sixième fichier journal compressé, avec l'intention de le supprimer. Le fichier n'est pas réellement supprimé; Je suppose que c'est parce que nous fonctionnons en mode débogage.

Je suis curieux de savoir si l'activation de l' delaycompressoption pour vous /var/log/messagesaidera. Je l'ai activé et vérifierai les résultats le lendemain matin.

Mike Mazur
la source
Pouvez-vous publier votre logrotate.conf? Rien dans les extraits que vous avez partagés jusqu'à présent n'expliquerait le suffixe de date sur ces fichiers de messages. Logrotate ne prenait pas en charge les suffixes de date sur les fichiers journaux pivotés. Cela m'amène à croire que quelque chose d'autre crée entièrement ces fichiers. Vérifiez / etc / crontab, crontab de root et /etc/cron.daily pour voir si vous avez un autre script essayant de faire le même travail.
jmtd
en plus de cela, pouvez-vous nous dire quelle distribution de linux vous utilisez? Debian / Ubuntu a son propre script de rotation des journaux qui pourrait être en train de nettoyer vos trucs logrotate.
thepocketwade
Merci pour la réponse. J'utilise Gentoo Linux. Mes crontabs ne font aucune gestion de / var / log / messages. Veuillez consulter les nouvelles informations dans ma question pour plus de détails.
Mike Mazur

Réponses:

8

Ajout delaycompressà la section de configuration pour /var/log/messagesrésoudre le problème.

De 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.

Je suppose que sysklogdmon démon syslog ne peut pas être invité à fermer son fichier journal, ce qui est donc nécessaire.

Fait intéressant, la configuration d' origine que j'avais (sans la delaycompressdirective), est sorti tout droit de man logrotate(sauf que je changé weeklyà daily):

   # sample logrotate configuration file
   compress

   /var/log/messages {
       rotate 5
       weekly
       postrotate
           /usr/bin/killall -HUP syslogd
       endscript
   }
Mike Mazur
la source
Il dit l'option inconnue inconnue 'delalycompress' # logrotate -v /etc/logrotate.d/apc_rtbinfo.conf lecture du fichier de configuration /etc/logrotate.d/apc_rtbinfo.conf lecture des informations de configuration pour /mnt/log/frengo/apc_rtbinfo.log erreur: /etc/logrotate.d/apc_rtbinfo.conf:7 option inconnue 'delalycompress' - ignorer la ligne Gestion des journaux 1
Ashish Karpe
# cat /etc/logrotate.d/apc_rtbinfo.conf /mnt/log/frengo/apc_rtbinfo.log {quotidien missingok notifempty taille 2000M compress delalycompress sharedscripts copytruncate rotation 3}
Ashish Karpe
1
ok eu l'erreur il y avait une faute de frappe dans "delalycompress"
Ashish Karpe
Mais maintenant, le problème est que log.1 est plus de 2000M # du -sh /mnt/log/frengo/apc_rtbinfo.log* 0 /mnt/log/frengo/apc_rtbinfo.log 4.7G /mnt/log/frengo/apc_rtbinfo.log .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.log.2. gz 80M /mnt/log/frengo/apc_rtbinfo.log.3 80M /mnt/log/frengo/apc_rtbinfo.log.4
Ashish Karpe
5

C'est difficile à dire avec juste ces informations, mais je peux vous dire ce qui m'a sauvé plusieurs fois.

Logrotate a une option de débogage qui imprimera un play-by-play de chaque étape qu'il faut pour stdout. Donc, dans ce cas, vous pourriez faire:

logrotate -d /etc/logrotate.conf

La sortie vous dira ce qui se passe exactement. De plus, si vous souhaitez réduire la sortie de débogage, vous pouvez le faire

logrotate -d /etc/logrotate.d/messages

Bien que vous souhaitiez peut-être placer temporairement les principales options logrotate.conf dans ce bloc de fichiers, car la spécification directe du fichier signifie qu'il n'aura jamais lu les principales options de configuration. La spécification du fichier individuel signifie également que vous pouvez utiliser l' -foption (forcer) en combinaison avec l'option de débogage pour obtenir un aperçu de la rotation réelle du fichier de messages en cours.

Carpe Noctem
la source
J'ai essayé d'exécuter logrotate manuellement, comme vous l'avez suggéré, et il me dit qu'il compresse les journaux, mais je ne trouve aucun journal compressé nulle part. Voir ma question ci-dessus pour plus de détails.
Mike Mazur
1
renommez les 5 fichiers de messages les plus anciens afin qu'ils se terminent par un .gz et voyez si logrotate supprime le plus ancien comme il se doit. Si c'est le cas, nous savons que le globbing échoue car gzip ne fonctionne pas correctement. Cela confirmera au moins que le manque de compression est à blâmer pour le manque de rotation.
CarpeNoctem
Terminé, des détails ont été ajoutés à la question ci-dessus. Je suis curieux de savoir s'il y a un problème de contention avec le /var/log/messagesfichier en direct et l' delaycompressoption vous aidera.
Mike Mazur
Un autre point intéressant que j'ai découvert. Lorsque vous activez l'option -d, la commande logrotate ne toucherait pas les fichiers journaux. Consultez le manuel pour plus d'informations. -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

Pensez à essayer ce paramètre dans votre logrotate.conf:

dateformat .%Y%m%d

et renommez vos fichiers de messages existants pour utiliser un point au lieu d'un tiret. Essayez à nouveau votre logrotate.

Les indices ci-dessous m'ont amené à croire que le tiret peut entraîner l'échec du glob s'il est interprété d'une manière ou d'une autre (où - corrigerait cela). Cela n'a pas de sens, mais cela pourrait être possible.

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
En pause jusqu'à nouvel ordre.
la source
Je ne pense pas que ce soit la cause profonde. Le format de date actuel, avec un tiret, fonctionne très bien pour les autres fichiers journaux. La différence entre ces fichiers journaux et /var/log/messagesest que les /var/log/messagesfichiers pivotés ne sont pas compressés.
Mike Mazur