É possível filtrar linhas duplicadas do syslog?

3

No computador da minha mãe, ela está chegando aqui syslog / kern.log preenchido com linhas de um driver da Lexmark:

Sep 22 21:01:20 pamela-desktop kernel: [48657.676578] usb 1-3: usbfs: process 1490 (demond_nscan) did not claim interface 3 before use
Sep 22 21:01:20 pamela-desktop kernel: [48657.676585] usb 1-3: usbfs: process 1490 (demond_nscan) did not claim interface 3 before use
Sep 22 21:01:20 pamela-desktop kernel: [48657.676592] usb 1-3: usbfs: process 1490 (demond_nscan) did not claim interface 3 before use

Agora multiplique esses pelo número que você precisa para obter 161 GB.

Existe algo que eu possa fazer, além de escrever um script para filtrar linhas duplicadas de sys / kern.log e executá-las como uma tarefa cron?

    
por Wayne Werner 23.09.2012 / 04:44

2 respostas

6

O syslog automaticamente remove linhas duplicadas, mas aqui elas não são duplicadas porque o kernel insere um timestamp (em microssegundos desde a inicialização) antes de enviar para o syslog.

Esse registro de data e hora pode parecer redundante, pois o registro syslog também marca os logs, mas ele e sua granularidade podem ser úteis na depuração de problemas do kernel (porque os timestamps syslog são menos precisos e pode haver um atraso entre o evento real e o syslog.) e porque nos casos em que o syslog ou /var se foram, é bom ver os timestamps em dmesg output).

Você pode desativar esses timestamps do kmsg fazendo:

echo N | sudo tee /sys/module/printk/parameters/time

Ou torne-o permanente configurando seu gerenciador de partida para passar printk.time=N para a linha de comando do kernel do Linux.

    
por 23.09.2012 / 10:35
4
comentário é de phunehehe muito bem:

  1. Você deve corrigir o problema do driver primeiro.
  2. Se você não puder, seu problema são grandes arquivos de log, então corrija isso com logrotate .
  3. Se você ainda preferir filtrar essas linhas:

Baseado no seu outra pergunta , estou supondo que esta é uma máquina Ubuntu, caso em que provavelmente está executando rsyslog (ou você pode instalá-lo) . Experimente ps aux | grep syslog para ver.

O rsyslog permite que você filtre linhas com filtros baseados em propriedade . Por exemplo, os filtros podem ser correspondências literais ou regexes. Um exemplo dos documentos:

:msg, contains, "error" ~

O '~' indica que esta mensagem deve ser descartada. Então você poderia facilmente escrever um desses para suprimir completamente as mensagens do seu driver errante. Observe que isso não remove tecnicamente as duplicatas: não haverá qualquer linhas com esse erro registrado.

    
por 23.09.2012 / 07:11

Tags