logrotate non comprime / var / log / messaggi


11

Nel corso del tempo ho notato alcuni accessi /var/logcome auth, kerne messagesstavano diventando enormi. Ho fatto delle logrotateiscrizioni per loro:

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

inoltre ho l' compressopzione abilitata:

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

Questo funziona alla grande auth.log, kern.loge altri, il che significa che ognuno di quei registri è compresso e ruotato, con gli ultimi 5 giorni di registri conservati. /var/log/messagestuttavia non viene compresso, con conseguente più di 5 giorni di log:

$ 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

Come spiegato in un'altra logrotatedomanda su ServerFault , i vecchi registri (molto probabilmente) non vengono rimossi perché le terminazioni dei file sono diverse per ciascun file. Questo sembra essere perché i file non vengono compressi con gzip.

Cosa posso fare per mantenere /var/log/messagescompressi e ruotati con gli ultimi 5 giorni di registri conservati proprio come tutti gli altri miei file di registro? Cosa mi sto perdendo?

MODIFICA 1 : informazioni aggiuntive come richiesto nelle risposte della prima coppia.

Sto eseguendo Gentoo Linux. Il mio /etc/logrotate.conffile:

$ 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 contiene i miei file di configurazione personalizzati come menzionato sopra insieme alle configurazioni per mysql, rsync, ecc installate da quei pacchetti.

La mia radice crontabè vuota:

$ sudo crontab -l
no crontab for root

Ho controllato tutto /etc/cron.{daily,hourly,monthly,weekly}per tutto ciò che riguarda syslog, e c'è uno script che ruota /var/log/sysloge /var/log/auth.log.

Poi, ho fatto un /var/log/messages-solo logrotatefile di configurazione, come suggerito da 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
}

Quindi ho eseguito logrotatemanualmente:

$ 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

Secondo il registro sopra, logrotatecompresso il registro con / bin / gzip, ma non vedo un file di messaggi compressi in /var/log. Inoltre, il globbing per vecchi file ruotati non è riuscito.

EDIT 2 : aggiunta dell'output di debug della logrotatecorsa dopo aver aggiunto un .gzsuffisso ai vecchi /var/log/message-*file.

Iniziamo con:

$ 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

Quindi esegui logrotatecon il nostro file di configurazione personalizzato:

$ 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

Questa volta, logrotateil glob ha esito positivo e trova il sesto file di registro compresso, con l'intenzione di rimuoverlo. Il file non è stato effettivamente rimosso; Immagino sia perché stiamo eseguendo in modalità debug.

Sono curioso di sapere se abilitare l' delaycompressopzione per /var/log/messagesaiuterà. L'ho abilitato e controllerò i risultati la mattina successiva.


Puoi pubblicare il tuo logrotate.conf? Nulla negli estratti che hai condiviso finora spiegherebbe il suffisso della data su quei file di messaggi. Logrotate non è stato utilizzato per supportare i suffissi di data sui file di registro ruotati. Questo mi porta a credere che qualcos'altro sta creando interamente quei file. Controlla / etc / crontab, crontab di root e /etc/cron.daily per vedere se hai un altro script che prova a fare lo stesso lavoro.
jmtd,

oltre a questo, puoi dirci quale distribuzione di Linux stai eseguendo? Debian / Ubuntu ha il suo script di rotazione dei log che potrebbe confondere le tue cose logrotate.
thepocketwade,

Grazie per la risposta. Sto eseguendo Gentoo Linux. I miei crontab non eseguono alcuna gestione di / var / log / messaggi. Per ulteriori dettagli, consultare le nuove informazioni nella mia domanda.
Mike Mazur,

Risposte:


8

Aggiunta delaycompressalla sezione di configurazione per /var/log/messagesrisolvere il problema.

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

Immagino sysklogd, il mio demone syslog, non si possa dire di chiudere il suo file di log, e quindi questo è necessario.

È interessante notare che la configurazione originale che avevo (senza la delaycompressdirettiva), è venuta fuori da man logrotate(tranne che ho cambiato weeklyin daily):

   # sample logrotate configuration file
   compress

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

Sta dicendo l'opzione sconosciuta sconosciuta 'delalycompress' # logrotate -v /etc/logrotate.d/apc_rtbinfo.conf lettura del file di configurazione /etc/logrotate.d/apc_rtbinfo.conf lettura delle informazioni di configurazione per /mnt/log/frengo/apc_rtbinfo.log errore: /etc/logrotate.d/apc_rtbinfo.conf:7 opzione sconosciuta 'delalycompress' - ignorando la riga Gestione 1 log
Ashish Karpe,

# cat /etc/logrotate.d/apc_rtbinfo.conf /mnt/log/frengo/apc_rtbinfo.log {daily dailyok notifempty size 2000M compress delalycompress sharedscripts copytruncate rotate 3}
Ashish Karpe

1
ok ho avuto l'errore c'era un errore di battitura in "delalycompress"
Ashish Karpe,

Ma ora il problema è che log.1 è più di 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

È difficile dire solo con queste informazioni, ma posso dirti cosa mi ha salvato alcune volte.

Logrotate ha un'opzione di debug che stamperà un play-by-play di ogni passaggio necessario allo stdout. Quindi in questo caso potresti fare:

logrotate -d /etc/logrotate.conf

L'output ti dirà esattamente cosa sta succedendo. Inoltre, se si desidera restringere l'output di debug, è possibile farlo

logrotate -d /etc/logrotate.d/messages

Anche se potresti voler posizionare temporaneamente le principali opzioni logrotate.conf in quel blocco di file poiché la specifica diretta del file significa che non avrà mai letto le principali opzioni di configurazione. Specificare il singolo file significa anche che è possibile utilizzare l' -fopzione (force) in combinazione con l'opzione di debug per vedere una rotazione effettiva del file di messaggi in corso.


Ho provato a eseguire logrotate manualmente come mi hai suggerito, e mi dice che sta comprimendo i registri, ma non trovo alcun registro compresso da nessuna parte. Vedi la mia domanda sopra per i dettagli.
Mike Mazur,

1
rinominare i 5 file di messaggi più vecchi in modo che terminino con un .gz e vedere se logrotate rimuove quello più vecchio come dovrebbe. In tal caso, sappiamo che il globbing non sta funzionando a causa di gzip che non funziona correttamente. Ciò confermerà almeno che la mancanza di compressione è la causa della mancanza di rotazione.
CarpeNoctem,

Fatto, i dettagli sono stati aggiunti alla domanda sopra. Sono curioso di sapere se c'è qualche problema di contesa con il /var/log/messagesfile live e l' delaycompressopzione aiuterà.
Mike Mazur,

Un altro punto interessante che ho scoperto. Quando si abilita l'opzione -d, il comando logrotate non tocca i file di registro. Controlla il manuale per maggiori informazioni. -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

Prova a provare questa impostazione nel tuo logrotate.conf:

dateformat .%Y%m%d

e rinominare i file dei messaggi esistenti per utilizzare un punto anziché un trattino. Quindi riprovare a eseguire il logrotate.

Gli indizi di seguito mi hanno portato a credere che il trattino potrebbe causare il fallimento del glob se viene interpretato in qualche modo come un'opzione (dove - risolverebbe questo problema). Non ha senso, ma potrebbe essere possibile.

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

Non penso che questa sia la causa principale. Il formato della data corrente, con un trattino, funziona perfettamente per altri file di registro. La differenza tra questi file di registro e /var/log/messagesè che i /var/log/messagesfile ruotati non sono compressi.
Mike Mazur,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.