redireciona a saída e a rotação de log

2

Eu preciso de um pouco de ajuda com script / comando / cronjob ..

Eu preciso redirecionar a saída do comando tcpdump para o logfile e manter 1 arquivo de log para cada dia. Eu sei que eu poderia usar a sintaxe de registro do tcpdump, mas também estou usando awk -F para filtrar a saída. Meu comando se parece com isso e funciona sozinho funciona bem.

tcpdump -ieth0 -p "tcp[tcpflags] & (tcp-syn) !=0" | awk -F 'Flags' '{print $1}' > /var/log/tcpdump.log

Como posso fazer isso para girar o arquivo para cada dia? Existe alguma maneira de fazer com o shell script (meu conhecimento de script de shell é muito limitado).

    
por pawel 27.01.2017 / 14:46

3 respostas

3

Se você não é bom em scripts de shell, eu não tentaria escrever sua própria rotação de log. Não parece que você tenha alguma necessidade aqui que não seria tratada melhor usando logrotate do que rolando o seu próprio. Você pode fazer um arquivo de configuração simples

# /etc/logrotate.d/tcpdump
"/var/log/tcpdump.log" {
       daily
       rotate 30
       compress

       prerotate
            killall your_dump_script
       endscript

       postrotate
            your_dump_script &
       endscript
 }

Isto irá:

  • gire seu arquivo daily
  • mantenha 30 de cópias desde que você não queira ocupar seu disco
  • compress usando o gzip para economizar espaço em disco. Você pode usar zless ou zgrep para visualizá-los.
  • mate your_dump_script antes de rodar e reinicie-o depois. Sinta-se à vontade para renomear isso para algo mais a seu gosto.

Se você colocá-lo em /etc/logrotate.d , ele deve ser escolhido por suas tarefas agendadas internas, mas se você quiser executá-lo manualmente para verificar se ele funciona:

logrotate /etc/logrotate.d/tcpdump

Ou coloque a configuração em um local diferente e execute-a a partir do seu script. De qualquer forma, você está escrevendo menos código e as coisas tendem a funcionar de maneira mais confiável.

    
por 27.01.2017 / 15:17
0

Eu escrevi um logrotee neste final de semana. Eu provavelmente não o faria se eu tivesse lido a grande resposta do @JdeBP sobre multilog .

Eu me concentrei em ser leve e ser capaz de bzip2 seus pedaços de saída como:

verbosecommand | logrotee \
  --compress "bzip2 {}" --compress-suffix .bz2 \
  /var/log/verbosecommand.log

Ainda há muito a ser feito e testado.

    
por 11.07.2017 / 18:53
0

Você pode aproveitar rotatelogs ( documentos aqui ): tudo o que você precisa fazer é canalize a saída através dele, forneça poucas opções e ele cuidará do resto. Por exemplo:

tcpdump ... | rotatelogs /var/log/tcpdump.log

irá girar automaticamente o arquivo de saída quando os critérios especificados (tamanho do arquivo, intervalo de tempo) forem atendidos.

    
por 27.06.2018 / 17:13