Question logrotate ne compresse pas / var / log / messages


Au fil du temps, j'ai remarqué des journaux /var/log tel que auth, kern et messages devenaient énormes. J'ai fait logrotate entré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
}

aussi j'ai le compress option 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.log et autres, c'est-à-dire que chacun de ces journaux est compressé et tourné, les journaux des 5 derniers jours étant conservés. /var/log/messages cependant est ne pas être compressé, résultant en 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 un autre logrotate question 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/messages compressé 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 comme demandé dans les deux premières réponses.

J'utilise Gentoo Linux. ma /etc/logrotate.conf fichier:

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

Ma racine crontab est vide:

$ sudo crontab -l
no crontab for root

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

Ensuite, j'ai fait un /var/log/messages-seulement logrotate Fichier de configuration 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
}

Puis j'ai couru logrotate manuellement:

$ 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, logrotate compressé le journal avec / bin / gzip, mais je ne vois pas de fichier de messages compressé dans /var/log. De plus, l'échouage pour les anciens fichiers pivotés.

EDIT 2: ajout de la sortie de débogage de logrotate courir après avoir ajouté un .gz suffixe à vieux /var/log/message-* des dossiers.

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

Puis courir logrotate avec 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, logrotate'glob réussit et trouve le sixième fichier journal compressé dans le but 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 permettre la delaycompress option pour /var/log/messages aidera. Je l'ai activé et je vérifierai les résultats le lendemain matin.


10
2018-02-24 12:03


origine


Pouvez-vous poster 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 me porte à croire que quelque chose d'autre est en train de créer ces fichiers. Vérifiez / etc / crontab, la crontab de la racine 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 de journal qui pourrait gâcher vos tâches de logrotate. - thepocketwade
Merci pour la réponse. J'utilise Gentoo Linux. Mes crontabs ne font aucune gestion de / var / log / messages. S'il vous plaît voir la nouvelle information dans ma question pour plus de détails. - Mike Mazur


Réponses:


Ajouter delaycompress à la section de configuration pour /var/log/messages résolu 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 sysklogd, mon démon syslog, ne peut pas être invité à fermer son fichier journal, ce qui est donc nécessaire.

Fait intéressant, la configuration originale que j’avais (sans le delaycompress directive), est sorti tout droit de man logrotate (sauf que j'ai changé weekly à daily):

   # sample logrotate configuration file
   compress

   /var/log/messages {
       rotate 5
       weekly
       postrotate
           /usr/bin/killall -HUP syslogd
       endscript
   }

7
2018-02-26 01:16



Il indique l'option inconnue inconnue 'delalycompress' # logrotate -v /etc/logrotate.d/apc_rtbinfo.conf, fichier de configuration lu /etc/logrotate.d/apc_rtbinfo.conf, donnant des informations de configuration pour /mnt/log/fr/frengo/apc_rtbinfo.log. error: /etc/logrotate.d/apc_rtbinfo.conf:7 option inconnue 'delalycompress' - Ignorer la ligne Traitement des journaux 1 - Ashish Karpe
# cat /etc/logrotate.d/apc_rtbinfo.conf /mnt/log/frengo/apc_rtbinfo.log {nom de la taille manquante journalière taille 2000M compresser delalycompresser les scripts de partage copier-tronquer la rotation 3} - Ashish Karpe
ok eu l'erreur il y avait une faute de frappe dans "delalycompress" - Ashish Karpe
Mais maintenant, le problème est que log.1 représente plus de 2 000 M $ 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


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

Logrotate a une option de débogage qui imprimera une lecture à la lecture de chaque étape nécessaire à la sortie standard. Donc, dans ce cas, vous pourriez faire:

logrotate -d /etc/logrotate.conf

La sortie vous dira ce qui se passe exactement. En outre, si vous voulez affiner la sortie de débogage, vous pouvez 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 spécifier directement le fichier signifie qu'il n'aura jamais lu les principales options de configuration. Spécifier le fichier individuel signifie également que vous pouvez utiliser le -f(force) en combinaison avec l'option de débogage pour avoir une vue de la rotation réelle du fichier de messages en cours.


5
2018-02-24 12:38



J'ai essayé d'exécuter logrotate manuellement, comme vous l'avez suggéré, et cela m'indique que les journaux sont compressés, mais je ne trouve aucun journal compressé. Voir ma question ci-dessus pour plus de détails. - Mike Mazur
renommez les 5 fichiers de messages les plus anciens pour 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 la suppression échoue en raison de la mauvaise exécution de gzip. Cela confirmera au moins que le manque de compression est à l'origine du manque de rotation. - CarpeNoctem
Fait, les détails ajoutés à la question ci-dessus. Je suis curieux de savoir s'il y a un problème de conflit avec le live /var/log/messagesfichier et le delaycompress l'option aidera. - Mike Mazur
Un autre point intéressant que j'ai découvert. Lorsque vous activez l'option -d, la commande logrotate ne touche 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


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. Ensuite, essayez à nouveau votre logrotate.

Les indices ci-dessous m'ont amené à croire que le tiret pourrait entraîner l'échec du glob s'il est interprété d'une manière ou d'une autre comme une option (où - cela résoudrait ce problème). 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

1
2018-02-24 14:04



Je ne pense pas que ce soit la cause première. Le format de date actuel, avec un tiret, fonctionne parfaitement pour les autres fichiers journaux. La différence entre ces fichiers journaux et /var/log/messages est-ce que la rotation /var/log/messages les fichiers ne sont pas compressés. - Mike Mazur