Você já tentou o splunk? link
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.
Você já tentou o splunk? link
Descobri que uma combinação de grep
, cut
, sort
, uniq
, head
e tail
é útil para uma inspeção de registro única e ad-hoc.
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]
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]
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
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)
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)
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)
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:
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
Tags logging