Pular para o conteúdo
Todos os conceitos

Análise de logs

Um log é um diário do sistema, uma linha por evento, que você filtra e conta.

Quase todo programa que roda num servidor escreve um log: um arquivo de texto com uma linha por evento (um login, um acesso a uma página, uma conexão). Investigar um incidente é, na maior parte do tempo, ler esses registros e responder perguntas simples: quem, de onde, quando, quantas vezes.

Você raramente lê o log inteiro. O trabalho é filtrar (ficar só com as linhas que interessam) e contar (ver o que mais se repete). Quatro comandos de terminal resolvem a maioria dos casos:

  • grep palavra arquivo: mostra só as linhas que contêm palavra.
  • awk '{print $5}' arquivo: imprime a quinta coluna de cada linha.
  • sort: ordena as linhas.
  • uniq -c: junta linhas iguais e conta quantas vezes cada uma aparece.

O combinado mais útil é grep ... | awk ... | sort | uniq -c | sort -rn: filtra, pega um campo, agrupa e ordena do mais frequente para o menos frequente. O valor que aparece no topo costuma ser a pista.

grep Failed auth.log | awk '{print $11}' | sort | uniq -c | sort -rn auth.log Failed … 203.0.113.45 Accepted … 192.0.2.10 Failed … 203.0.113.45 Failed … 198.51.100.7 Failed … 203.0.113.45 Accepted … 192.0.2.10 filtra, pega um campo 203.0.113.45 203.0.113.45 198.51.100.7 203.0.113.45 agrupa, conta e ordena 3 203.0.113.45 1 198.51.100.7 no topo: a pista
O grep fica só com as linhas Failed, o awk tira o endereço de cada uma, e sort, uniq -c e sort -rn contam e ordenam: o endereço que mais se repete fica no topo.

Aparece nestes desafios