LNAV: O navegador de arquivos de log do sistema

Há muitas ferramentas para se auditar um sistema que vão desde os mais básicos comandos cat, grep, tail etc até sofisticadas baseadas em web, elasticsearch e coisas moderninhas assim incluindo até técnicas de machine learning e tudo mais, entre estes dois extremos temos algumas ferramentas legais incluindo o lnav, que tenho adotado faz uns meses com bastante sucesso no que preciso.

Em uma analogia tosca porém relativamente esclarecedora podemos dizer que o Lnav é uma “melhoria” da tática de usar “tail + grep” nos logs, assim como o top é uma “melhoria” do “ps + grep” para consultar processos.

O LNAV possui recursos bastante uteis para investigar o conteúdo dos seus arquivos de log, como por exemplo permite navegar no conteúdo enquanto o log ainda está sendo alimentado pelo sistema que o cria, permite aplicar filtros, realizar pesquisa e consultas SQL e mais.

Se você se interessou ele pode ser encontrado no seu site oficial onde está disponível para download na forma de código fonte ou de binário estático, que não precisa de nenhuma lib no seu sistema, garantindo 100% de funcionalidade em praticamente qualquer Linux 64bits (esta é a única limitação, não funciona em ambientes 32bits).

Instalando a ferramenta

A atual versão da ferramenta, no momento em que escrevo este texto é a 0.8.2 e como trata-se de uma ferramenta estaticamente compilada não faz muita diferença entre instalar o RPM, DEB ou ZIP disponível. então para atender não só aos Debian-users mas outros também vou listar aqui os comandos para instalação em todos os sistemas usando o pacote zip.

$ cd /tmp$ wget 'https://github.com/tstack/lnav/releases/download/v0.8.2/lnav-0.8.2-linux-64bit.zip'$ unzip lnav-0.8.2-linux-64bit.zip$ sudo cp lnav-0.8.2/lnav /usr/local/bin

Basicamente o que fiz foi baixar o pacote zip da versão atual dentro do diretório /tmp, descompactar o arquivo e copiar o unico arquivo executável (lnav) para dentro do diretório /usr/local/bin

Se preferir você pode baixar e descompactar o pacote como e onde desejar, até mesmo pelo seu ambiente gráfico, o importante é que o arquivo “lnav” seja copiado para dentro de um diretório que esteja declarado no PATH do seu ambiente, como /usr/local/bin/, /usr/bin, /bin etc.

Uma vez instalado, não há nada o que configurar basta invocar o comando pela linha de comandos indicando um arquivo, arquivos ou diretório a ser analisado, como nos exemplos abaixo.

Analisar apenas o /var/log/syslog

$ lnav /var/log/syslog

Analisar todo o histórico dos arquivos syslog (incluindo aqueles que foram rotacionados e estão compactados)

$ lnav /var/log/syslog*

Analisar todo o conteúdo do diretório de logs do apache

$ lnav /var/log/apache2

É importante notar que devido aos arquivos de log não seguirem a um padrão, é possível que ao monitorar um diretório de logs muito distintos talvez você não consiga olhar todos os arquivos ao mesmo tempo.

Navegando nos seus logs

Uma vez que o seu log esteja sendo visualizado você pode usar o seu teclado para navegar em seu conteúdo. Sugiro consultar a ajuda para conhecer todas elas (pressionando “?”) mas o básico são as que seguem:

  • HOME – início do arquivo
  • END – fim do arquivo
  • PG UP/DWN – avança/volta uma página na tela
  • <<setas direcionais>> – funcionam como se espera
  • d/D – Move para a mensagem exatamente no dia seguinte/anterior, nesta mesma hora
  • e/E – Move para mensagem de erro seguinte/anterior
  • w/W – Move para mensagem de alerta (warning) seguinte/anterior
  • n/N – Move para a ocorrência seguinte/anterior da sua pesquisa
  • q – Fecha o lnav voltando para linah de comandos do seu ambiente
  • CTRL-R – Reinicia a sessão ao estado original. Quando você sai da visualização de um log com determinado filtro, ao voltar o filtro ainda está aplicado, para ver todo o conteúdo do log você precisa reiniciar a sessão.
  • : – Entra no modo de comandos
  • ; – Entra no modo SQL

Pesquisando no seu log

Seguindo o padrão de inúmeras ferramentas de sistema, como vi, top etc, para fazer pesquisas você deve teclar “/” seguido de uma expressão.

Exemplo. Para procurar uma ocorrência para expressão “resolver” no log aberto digite:

/resolver

Depois use as teclas n/N para navegar entre todas as ocorrências desta palavra.

Filtrando mensagens

Digamos que ao invés de pesquisar, eu queira que em meio as milhares de linhas do log eu possa ver apenas aquelas relacionadas a um determinado termo. Basta usar os comandos “filter-in”, “filter-out” e “delete-filter” como necessário.

Exemplo. Ver todas as mensagens relacionadas ao processo “ntpd”

:filter-in ntpd

Obs: Não é possível executar o “filter-in” duas vezes seguidas, sendo que apenas o filtro aplicado da primeira vez estará valendo, então se você aplicou um filtro e acha que ele poderia ser melhor, você deve primeiramente removê-lo e depois aplicar um novo filtro.

Exemplo. Digamos que ao aplicar o filtro “ntpd” eu percebi que de fato o que eu precisava era ver as mensagens que tivessem “ntpd” e “pool”.

Como dito, dois “filter-in” seguidos não funcionam, então não adiantaria eu colocar agora um “:filter-in pool”. O correto então seria remover o filtro atual e aplicar um filtro que contenha tudo o que preciso. como segue:

:delete-filter ntpd
:filter-in: .*ntpd.*pool.*

Uma outra forma de remover o filtro sem precisar recorrer ao “delete-filter” é usar a combinação de teclas “CTRL-R” para reiniciar as configurações do ambiente.

Exemplo 2. Ver tudo exceto as mensagens que fizerem menção ao processo ntpd.

:filter-out ntpd

Isso fará com que todas as mensagens contendo “ntpd” sejam ocultas da sua tela. Fica ainda a observação de que ao contrário do “filter-in”, o “filter-out” pode ser usado inúmeras vezes seguidas para remover novos itens.

Então se quiser remover também as mensagens relacionadas ao ureadahead e ao systemd bastaria executar o filter-out outras duas vezes:

:filter-out ureadahead
:filter-out systemd

Este texto aborda apenas o básico do que se pode fazer. Consulte a sua ajuda (teclando ?) e o site oficial. Certamente dentro de pouco tempo o lnav se tornará indispensável no seu ferramental diário.

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *