corta fatia de arquivo com base na hora em que as linhas são escritas

2

Eu tenho um processo em execução sempre com o arquivo de log pode chegar a até 5 giga, às vezes eu tenho que tomar parte deste log com base no intervalo de tempo (geralmente eu usei dd). existe algum comando no linux para pegar a fatia do log baseado no intervalo de tempo?

PS: não há registro de data e hora na maioria das linhas desse log.

    
por Charles nakhel 10.05.2014 / 12:11

1 resposta

1

Se não houver um comando que permita fazer (como sugerido por Wiese), por que você não cria um índice externo do seu arquivo?

Apenas a ideia: você pode fazer um script que seja executado para sempre (ou quase veja as notas abaixo) e forneça os intervalos de tempo para criar o índice.

PIDofThisInstance=$$
# ... you code for the header, checks... 
while true  ; do
  # This is the core of your cycle
    sync   # Maybe
    CurrentSize='ls -s $MyFile  | awk '{print $1} ' '
    CurrentTime='date +"%Y%m%d%H%M%S"'
    echo $CurrentTime $CurrentSize >> $Log_Of_My_Log_File
    sleep $TimeToSleep
  # if (exit-condition)
  # then
  #    break           #Exit from the infinite loop.
  # fi
done 

Depois que você pode fazer outro script que, dada a data / hora inicial / final, responde a você com os tamanhos inicial / final. A partir desses números, você pode cortar seu arquivo.

Você disse que é um arquivo enorme. Então eu não sugiro que você faça com linenumbers e talvez head MyFile.log -n xxx | tail -n yyy . Será longo. Melhor trabalhar com tamanho.

Notas:

  • Se este for um log com uma saída formatada (mesmo que seja desconhecido por você), é sempre possível que exista alguma ferramenta de análise da empresa / programador desenvolvedor. É possível que sairá mesmo depois de anos. IMHO melhor não toque nesse formato e crie um arquivo separado.
  • Escreva no seu parâmetro de script como PID atual (no caso de você precisar matar pelas mãos), o nome do arquivo (objeto do logging), caso saiba o PID do programa que gera o log ...
  • O ciclo pode ser para sempre ou final se você tiver uma condição como: o PID do programa que gera o log não existe mais, o arquivo não existe mais, o tamanho real é menor do que o antigo (você move o arquivo ou reinicia o log para reiniciar a indexação).
  • Se você mantiver na memória o $ LastSize, pode decidir evitar imprimir linhas no "log do log" quando não for necessário, ou parar após um longo tempo sem atividade (ou modificar dinamicamente o intervalo de tempo. .)
por 11.05.2014 / 11:25