O Linux coleta apenas os logs modificados todos os dias

1

Linux coleta os logs modificados todos os dias

Eu quero coletar os arquivos de log do diretório /var/log/ todos os dias.

Meu script irá compactar todos os arquivos no diretório e armazená-lo separadamente. Mas o problema é que estou recebendo todos os arquivos de log compactados todos os dias e o tamanho continua aumentando.

Então, como compactar somente os arquivos modificados (somente conteúdo modificado) todos os dias.

Como obter conteúdo modificado de um arquivo após um determinado ponto de tempo. Ou seja, pela primeira vez, podemos coletar registros inteiros.

No dia seguinte em diante, devemos coletar apenas os registros do dia atual.

No dia seguinte ....

....

    
por Ram 19.04.2014 / 08:37

2 respostas

2

Uma maneira fácil de fazer isso, se atender às suas necessidades, seria ter um arquivo de log específico que seja rotacionado todos os dias. Primeiro você adiciona a /etc/(r)syslog.conf , provavelmente perto do topo, caso haja alguma regra que descarte algo depois de registrá-lo:

*.*           -/var/log/daily.log

Isso receberá todas as mensagens ; ou seja, tudo o que estiver em qualquer outro log será neste.

Você só precisa de um script que possa ser executado via cron. Você poderia usar logrotate para isso, mas não há muito sentido nesse caso.

#!/bin/sh

gzip /var/log/daily.log
# Do whatever with the gzipped file
touch /var/log/daily.log
kill -s HUP 'pidof syslogd'   # see below

Esta última etapa é necessária para reiniciar o syslogd, portanto, ele reabre o novo /var/log/daily.log - caso contrário, você não verá nada depois disso. Se você estiver usando o rsyslog, use pidof rsyslogd . Teste tentando pidof , o que acontecer primeiro.

Finalmente, em /etc/crontab :

0 0  * * *  root   /path/to/rotationscript

Fará isso à meia-noite todos os dias.

    
por 19.04.2014 / 10:33
1

Você já pensou em usar o logrotate ?

O Logrotate é um utilitário para girar arquivos de log em intervalos programados. Depois de instalá-lo, você o configuraria com seções semelhantes a esta:

/var/log/*.log /var/log/auth /var/log/messages {
 daily
 rotate 5
 copytruncate
 compress
 dateext
}

Quando você o instalou, seu gerenciador de pacotes já deveria tê-lo adicionado a /etc/cron.daily , então você não precisa fazer mais nada.

Com isso, você terminará com registros como /var/log/auth.20140420.gz . Se você quiser reuni-los, tudo o que você precisa fazer é procurar os arquivos .gz .

Notas importantes:

No meu exemplo, eu deliberadamente não fiz /var/log/* , mesmo que em sua pergunta original você queira rotacionar todos os registros em /var/log . Isso ocorre porque existem coisas em /var/log , como utmp e wtmp , que não são arquivos de log normais e não devem ser alternadas.

Existem 2 métodos de rotação de logs. Você pode renomear o log e, em seguida, informar o programa gravando o log para reabrir o arquivo de log ou copiar o conteúdo do arquivo de log para o novo nome e, em seguida, truncar o original. O método de movimentação é melhor, mas alguns aplicativos não têm uma maneira de notificá-los para reabri-los, de modo que a cópia / truncamento seja mais segura.
A opção copytruncate é a que controla esse comportamento. Se você quiser usar o método move, remova-o e coloque a seção postrotate (veja a página man).

    
por 20.04.2014 / 09:23

Tags