Resumindo arquivos de log gigantescos

3

Eu tenho vários arquivos de log de 2 a 8 GB de um serviço que estou executando. Normalmente, esses arquivos de log são menores do que isso (mais da ordem de 50-250 MB).

Eu gostaria de analisá-los e resumi-los para descobrir o que está acontecendo.

Existe alguma ferramenta para ajudar a automatizar isso, ou pelo menos dar uma primeira passada? Estou pensando em usar head, awk, cut, grep, etc., mas isso não é muito automático.

    
por mskfisher 28.03.2011 / 15:11

3 respostas

3

Você já tentou o splunk? link

    
por 28.03.2011 / 16:57
3

Descobri que uma combinação de grep , cut , sort , uniq , head e tail é útil para uma inspeção de registro única e ad-hoc.

Inspecionar o topo do arquivo de log

Parece que cada linha começa com uma data / hora.

$ head porter10.log

03/10/2011 12:14:25 --------  (Port Control [Version 5.2 (Milestone 4)])  --------
03/10/2011 12:14:25 --------  LOG BEGINS  --------
03/10/2011 12:14:25 Common DLL [Version 5.2 (Milestone 4)] [Version Details: 5.2.4]
03/10/2011 12:14:25 Message DLL [Version 5.2 (Milestone 4)] [Version Details: 5.2.4]

Remover timestamp

Eu uso o comando cut , dizendo a ele para reter os campos 3 e acima e para usar um espaço como delimitador.

$ cut -f3- -d' ' porter10.log | head

--------  (Port Control [Version 5.2 (Milestone 4)])  --------
--------  LOG BEGINS  --------
Common DLL [Version 5.2 (Milestone 4)] [Version Details: 5.2.4]
Message DLL [Version 5.2 (Milestone 4)] [Version Details: 5.2.4]

Apare na parte imutável da linha

Eu tinha um palpite de que a maioria das linhas de saída excedentes teria um texto semelhante, então reduzi a saída para os primeiros 20 caracteres após o registro de data e hora.

$ cut -f3- -d' ' porter10.log | cut -b-20 | head
--------  (Port Cont
--------  LOG BEGINS
Common DLL [Version
Message DLL [Version
Protocol DLL [Versio

Classifique e encontre as maiores contagens

Eu classifiquei, contei e classifiquei as contagens para descobrir quais linhas ocorreram com mais frequência.

Parece que minha técnica ingênua de remoção de registro de data e hora recortou algumas informações úteis (sem registro de data e hora) em algumas linhas, deixando-me com alguns números em branco. No entanto, parece que todos eles ocorreram na mesma frequência e uma ordem de grandeza com mais freqüência do que qualquer outra coisa, então eu encontrei meus suspeitos.

O intervalo de 20 caracteres é um palpite, não uma regra dura e rápida. Você pode precisar executar este passo várias vezes para encontrar o ponto ideal que separa as linhas incomuns.

$ cut -f3- -d' ' porter10.log | cut -b-20 | sort | uniq -c | sort -n

  13827 Error (266) to Remot
  13842 Error decode for dev
  17070 Error Writing to Ret
  46506 **** Checkpoint ****
 181820 (65)
 181820 (67)
 181821 (111)
 181821 (1555)
 181821 (55)
 181821 (66)
 181821 (77)
 181980 (107)

Pesquise candidatos no contexto

Portanto, agora que tenho uma lista de possíveis candidatos, posso procurá-los no contexto usando a opção grep e a opção -C# de linhas de contexto:

$ grep -C3 '(1555)' porter10.log | head
03/10/2011 12:14:25.455 looking for DLC devices / start
Decoding tbl_pao_lite.cpp (107)
Decoding tbl_base.cpp (111)
Decoding dev_single.cpp (1555)
Decoding dev_dlcbase.cpp (77)
Decoding tbl_carrier.cpp (55)
Decoding tbl_route.cpp (66)
--
Decoding tbl_loadprofile.cpp (67)
Decoding tbl_pao_lite.cpp (107)

Abordagem de Monte Carlo - inspecione o meio do arquivo de log

Se a abordagem acima não funcionar, tente procurar em pontos diferentes no arquivo.

Parece que existem cerca de 1,6 milhões de linhas neste arquivo, então eu olhei para a linha 800k.
Isso confirmou os resultados da minha abordagem de classificação e contagem.

$ wc -l porter10.log
1638656 porter10.log

$ head -800000 porter10.log | tail
Decoding dev_dlcbase.cpp (77)
Decoding tbl_carrier.cpp (55)
Decoding tbl_route.cpp (66)
Decoding dev_carrier.cpp (65)

Sucesso!

Nesse caso, a saída deveu-se ao excesso de log de depuração que está sendo deixado em nossos arquivos de configuração.

Você precisará ajustar essa abordagem para se adequar ao seu arquivo de registro específico, mas as principais chaves são:

  1. Remover timestamps
  2. Recorte para uma quantia da linha que provavelmente será imutável
  3. Classifique e conte o que sobrou
  4. Pesquise os maiores infratores no contexto
por 06.04.2011 / 18:12
0

Se você quiser analisar seu arquivo enquanto está crescendo, você pode obter um resultado limpo com logtop :

IP mais solicitante:

tail -f /var/log/apache2/access.log | cut -d' ' -f1 | logtop

A maioria dos URLs solicitantes (Se o URL é o sétimo campo é o seu arquivo?)

tail -f /var/log/apache2/access.log | cut -d' ' -f7 | logtop
    
por 31.03.2012 / 21:30

Tags