Pesquisa de site

lnav - Observe e analise logs do Apache a partir de um terminal Linux


Há menos de duas semanas, o ataque do ransomware Wannacry comprometeu milhares de computadores, causando perdas consideráveis a grandes empresas e indivíduos. Isso, juntamente com outras vulnerabilidades generalizadas encontradas nos últimos anos (como o bug Shellshock), destacam a importância de manter o controle de seus sistemas de missão crítica.

Embora as vulnerabilidades geralmente tenham como alvo um sistema operacional ou componente de software específico, examinar o tráfego que entra e sai da sua rede pode ser uma ajuda significativa para proteger os ativos pelos quais você é responsável.

Leitura sugerida: 4 boas ferramentas de gerenciamento e monitoramento de log de código aberto para Linux

Como tenho certeza que você já sabe, os logs do sistema são o primeiro lugar onde devemos procurar essas informações. Para facilitar esta tarefa, neste artigo explicaremos como instalar e usar o lnav, um visualizador avançado de arquivos de log. Com o lnav você poderá observar diversos tipos de logs simultaneamente, navegar pelo arquivo através de teclas de atalho e gerar um histograma resumido de acessos e erros. Então continue lendo!

Instalando e iniciando lnav no Linux

Para instalar o lnav, use o sistema de gerenciamento de pacotes da sua distribuição.

aptitude install lnav          [Debian and derivatives]
yum install epel-release lnav  [CentOS 7 and similar]

Assim que a instalação for concluída, execute lnav seguido do caminho absoluto para o diretório onde estão localizados os logs a serem examinados. Como normalmente será /var/log, vamos fazer:

lnav /var/log/httpd

para inspecionar os logs do servidor web Apache em um CentOS 7:

Vamos examinar brevemente a saída mostrada na imagem anterior:

  • O canto superior direito mostra os arquivos que estão sendo inspecionados no momento (access_log-20170519 e access_log). Ao rolar para baixo ou para cima, você notará que os nomes dos arquivos podem mudar conforme você passa de um para outro.
  • As respostas 40x HTTP (por exemplo, Não encontradoou Proibido) são exibidas em negrito, enquanto as respostas 20x são mostradas em texto normal.
  • Os endereços IP aparecem em negrito verde.

Isso certamente parece bom, não é? Mas vamos nos aprofundar um pouco mais agora e veremos que o lnav fornece muito mais do que uma saída bem colorida.

Se você estiver curioso para saber por que os logs de erros não são mostrados, você encontrará a resposta posteriormente neste artigo. Então continue lendo!

Modificando a saída com opções e teclas de atalho

Antes de prosseguirmos, vamos listar algumas teclas de atalho que nos permitirão percorrer a saída do lnav e as visualizações disponíveis com mais facilidade:

  • e ou E para pular para a mensagem de erro seguinte/anterior.
  • w ou W para pular para a mensagem de aviso seguinte/anterior.
  • b ou Backspace para ir para a página anterior.
  • Espaço para passar para a próxima página.
  • g ou G para mover para a parte superior/inferior da visualização atual.

Quando os logs são girados, os arquivos antigos podem ser compactados (ou não), dependendo das configurações especificadas nos arquivos de configuração do logrotate. Para incluir arquivos compactados na saída, inicie o lnav da seguinte maneira:

lnav -r /var/log/httpd

Se você quiser dar uma olhada mais de perto na forma como o lnav funciona, você pode iniciar o programa com a opção -d seguida por um nome de arquivo onde as informações de depuração serão gravadas, assim:

lnav /var/log/httpd -d lnav.txt

Neste exemplo, as informações de depuração geradas quando o lnav é iniciado serão gravadas em um arquivo chamado lnav.txt dentro do diretório de trabalho atual.

As primeiras linhas desse arquivo são mostradas na imagem a seguir:

O texto destacado indica que o lnav carregou o arquivo de formatos padrão e, mais especificamente, o formato access_log para analisar o log de acesso do Apache. Além disso, lnav permite analisar cada linha de saída para que a saída fique mais fácil de visualizar e compreender.

Leitura sugerida: GoAccess (um Apache e Nginx em tempo real) Web Server Log Analyzer

Para usar este recurso, inicie o programa e escolha a linha que deseja analisar. A linha selecionada é sempre aquela que está no topo da janela. Em seguida, pressione p e você verá o seguinte resultado:

Para retornar ao modo normal, pressione p novamente.

Agora, se você quiser ver um resumo dos logs por data e hora, pressione i. Por exemplo, o texto destacado indica que na segunda-feira, 10 de abril, entre 22h e 23h, ocorreram 37 solicitações HTTP, das quais 14 resultaram em erros.

Depois de identificar um problema potencial com base no histograma mostrado acima, você pode pressionar i para sair da visualização e examiná-lo com mais detalhes usando o analisador conforme explicado anteriormente. Ou você também pode usar os recursos SQL integrados digitando um ponto e vírgula e escrevendo uma consulta padrão. Por exemplo, faça:

;.schema

para visualizar as tabelas disponíveis no esquema do banco de dados. Depois de identificar a tabela correta (access_log no nosso caso), vamos pressionar q e então usar a seguinte consulta para retornar todas as informações disponíveis sobre as solicitações provenientes de 195.154.230.31:

;SELECT * FROM access_log WHERE c_ip='195.154.230.31'

Observe que também poderíamos filtrar os resultados por log_time. A questão é: adicione um pouco de SQL e o céu é o limite para o que você pode fazer com o lnav.

Formatos de log padrão do Apache

Muitos formatos de log são carregados por padrão com lnav e, portanto, analisados sem nossa intervenção. Você pode ver a lista na seção Formatos de Log na documentação oficial.

Os formatos padrão são especificados em ~/.lnav/formats/default/default-formats.json.sample, e outros podem ser adicionados ~/.lnav/formats usando o ~/.lnav/formats extensão.json.

No entanto, a edição desses arquivos requer um certo grau de familiaridade com JSON (Javascript Object Notation) e com a biblioteca PCRE (Perl-Compatible Regular Expressions).

Então, por que o lnav não exibiu os arquivos de log de erros do Apache? A razão é que esses logs não correspondem a nenhuma expressão regular nos arquivos de formato existentes e, portanto, são tratados como arquivos de texto regulares (ou seja, arquivos sem um determinado formato de log).

Leitura sugerida: Como monitorar a carga do servidor Web Apache e as estatísticas da página

Conforme mencionado anteriormente, você pode criar seus próprios formatos assim que estiver pelo menos um pouco familiarizado com JSON e PCRE. Isso pode ser útil, por exemplo, se você tiver definido logs personalizados do Apache.

Resumo

Embora tenhamos usado o log de acesso do Apache para demonstrar como usar o lnav, lembre-se de que existem vários outros tipos de logs que podem ser visualizados e analisados usando esta ferramenta. Se a ferramenta não reconhecer um log específico, você poderá criar formatos adicionais e instalá-los seguindo as indicações fornecidas aqui.

Você tem alguma dúvida ou comentário sobre este artigo? Como sempre, sinta-se à vontade para nos informar usando o formulário abaixo. Estamos ansiosos para ouvir de você!