A pesquisa no arquivo iptables.log leva muito tempo

0

Eu usei o iptables para salvar informações sobre conexões modificando o arquivo /etc/syslog.conf para salvar informações em /var/log/iptables.log .

Então, a cada X horas, eu preciso extrair informações do arquivo de log. Mas o problema é que o arquivo será maior e a busca será mais lenta. Então eu usei:

sed -i '/string/d' iptables.log

Para excluir o que não preciso mais. Mas quando eu uso este comando, o iptables pára de salvar dados no arquivo iptables.log .

Então, o que há de errado? Como posso resolver este problema?

    
por Abid 14.10.2013 / 11:34

3 respostas

1

tente talvez um

cat iptables.log | sed -n "/PatternYouLookat/ p"

para que você não bloqueie o arquivo durante o sed

em arquivos grandes, o sed tem desempenho ruim, então tente primeiro ver o arquivo ou (o que eu faço) mantenha um marcador / índice para que você continue com esse arquivo e trate apenas a parte final do arquivo (mesmo com uma cópia temporária) se o tratamento for pesado).

você poderia usar o sed -u para funcionar como um fluxo e evitar algum problema de buffer no arquivo enorme

    
por 29.10.2013 / 19:03
0

Eu acho que você está usando o syslog. E estou supondo que o sed in-place edit cria um novo arquivo e remove o antigo.

O syslog é muito frágil se você rotacionar / recriar os arquivos de registro sem notificá-lo. O que você vê é exatamente o que acontece: o syslog não registra nada no arquivo, mesmo que exista. Isso porque o syslog ainda possui o antigo identificador de arquivos e grava no arquivo antigo (mesmo que você não possa mais vê-lo com o ls etc). Assim que o syslog fechar este arquivo, os dados desaparecem no nirvana.

Eu recomendo como devnull usar o logrotate. Se você não quiser, emita um recarregamento do syslog ou reinicie após a sua chamada sed. Isso deve fazer o truque.

    
por 18.10.2013 / 12:46
0

Use o logrotate. Normalmente você gira toda noite ou toda semana, mas pode mudar isso para o que precisar. O único problema é que isso pode significar que o iptables precisa reiniciar após a rotação, que é manipulado pelo logrotate. Não sei se isso é necessário, nem se isso (ou a frequência) é um problema para você ou sua aplicação.

O Logrotate cria um novo arquivo de log e renomeia os antigos. Você pode mantê-los todos ou excluí-los automaticamente após algum tempo. O (s) arquivo (s) girado (s) pode (m) ser alterado (s) sem problemas, porque eles não são mais usados para registro.

  • Digamos que você tenha um arquivo de log access.log .
  • Logrotate normalmente renomeia isso para access.log-20140729 .
  • Em vez de uma data, você pode usar um número: access.log.1 .
  • Você pode executar outro cronscript que altere access.log.1 usando sed.
  • Na próxima vez, esse arquivo é renomeado para access.log.2 , com todas as suas alterações.
  • O mais recente access.log é renomeado para access.log.1 , que pode ser alterado por sed.
  • Um novo access.log é criado, etc etc ...
por 29.07.2014 / 15:04