O que é o lnav?
O lnav, the Logfile Navigator, é um visualizador de logs para o terminal que junta arquivos de log de várias fontes em uma única visão ordenada por timestamp. Aponte para alguns arquivos, um diretório ou um arquivo compactado e ele descobre os formatos sozinho (syslog, o journal do systemd, logs de acesso do Apache e do nginx, JSON lines e muitos outros), intercala as mensagens pelo horário, colore erros e avisos para que se destaquem e continua acompanhando os arquivos conforme crescem. A partir daí você filtra, pesquisa, pula de um erro para outro e, quando uma pergunta exige mais que uma busca, consulta as mensagens com SQL. Ele abre logs remotos por ssh tão facilmente quanto os locais. O lnav é escrito em C++ por Tim Stack, sob licença BSD-2-Clause.
apt upgrade.
⚡ Principais recursos do lnav
🔀 Uma linha do tempo única
Abra juntos o syslog, o log de um aplicativo e o de um servidor web, e o lnav intercala as linhas pelo timestamp: você lê o que aconteceu no sistema inteiro na ordem em que aconteceu.
🔍 Detecção automática de formato
syslog, o JSON do journald, logs de acesso do Apache e do nginx, JSON lines, logfmt e dezenas de outros são reconhecidos sem configuração; níveis, timestamps e campos são interpretados, e erros e avisos ficam destacados.
🗄️ SQL sobre os seus logs
Cada formato reconhecido é uma tabela. Aperte ; e rode consultas SELECT sobre as mensagens: conte erros por host, ache as requisições mais lentas, agrupe códigos de status, com os resultados na mesma janela.
🌐 Logs remotos por ssh
lnav user@host:/var/log/syslog abre um log em outra máquina usando a sua configuração e as suas chaves ssh de sempre, sem instalar nenhum agente no servidor.
📦 Arquivos compactados
Logs rotacionados em .gz e .bz2 abrem direto, assim como arquivos .zip e .tar, então um pacote de suporte pode ser lido sem descompactar antes.
👀 Acompanhar, filtrar e pesquisar
Os arquivos são acompanhados enquanto crescem, filtros escondem ou mantêm linhas por padrão, buscas destacam cada ocorrência e uma única tecla pula para o próximo erro ou aviso, para que nada importante passe batido.
apt upgrade mantém você na versão mais recente.
📦 Instalação a partir do deb.griffo.io
Passo 1: Adicionar o repositório
sudo install -d -m 0755 /etc/apt/keyrings
curl -fsSL https://deb.griffo.io/EA0F721D231FDD3A0A17B9AC7808B4DD62C41256.asc | sudo gpg --dearmor --yes -o /etc/apt/keyrings/deb.griffo.io.gpg
echo "deb [signed-by=/etc/apt/keyrings/deb.griffo.io.gpg] https://deb.griffo.io/apt $(. /etc/os-release; echo ${DEBIAN_CODENAME:-${UBUNTU_CODENAME:-$VERSION_CODENAME}}) main" | sudo tee /etc/apt/sources.list.d/deb.griffo.io.list > /dev/null
sudo apt updateinstall -d -m 0755 /etc/apt/keyrings
curl -fsSL https://deb.griffo.io/EA0F721D231FDD3A0A17B9AC7808B4DD62C41256.asc | gpg --dearmor --yes -o /etc/apt/keyrings/deb.griffo.io.gpg
echo "deb [signed-by=/etc/apt/keyrings/deb.griffo.io.gpg] https://deb.griffo.io/apt $(. /etc/os-release; echo ${DEBIAN_CODENAME:-${UBUNTU_CODENAME:-$VERSION_CODENAME}}) main" | tee /etc/apt/sources.list.d/deb.griffo.io.list > /dev/null
apt updatesudo apt install extrepo
sudo extrepo enable griffo
sudo apt update🆓 Existe um espelho grátis para sempre. deb-free.griffo.io distribui pacotes grátis para sempre — sem conta, sem assinatura, no máximo 2 meses atrás do upstream, correções de segurança imediatas. Hoje ele traz cliamp, Ghostty, lazydocker, Oh My Posh, Uncloud e Zed; lnav não está entre elas, então o repositório acima é a única forma de instalar hoje — peça e ela pode ser adicionada.
🧩 Sobre a opção extrepo. extrepo é a ferramenta do próprio Debian para repositórios externos: ela escreve o arquivo de sources e instala a chave de assinatura para você, conferindo a chave contra metadados assinados antes de usá-la. Este repositório está registrado nela como griffo, e o espelho gratuito para sempre como griffo-free, então no Debian (bookworm, trixie, forky e sid) os comandos acima são toda a configuração.
O extrepo configura apenas o arquivo de sources e a chave: as credenciais de uma assinatura continuam indo em /etc/apt/auth.conf.d/deb.griffo.io.conf. O Ubuntu não é coberto, porque o extrepo publica metadados só para as suítes do Debian: lá, use os comandos com sudo ou como root.
Passo 2: Instalar o lnav
# Instalar a versão mais recente do lnav (substitui o lnav mais antigo da distribuição)
sudo apt install lnav
# Verificar a instalação
dpkg -s lnav | grep Version# Instalar a versão mais recente do lnav (substitui o lnav mais antigo da distribuição)
apt install lnav
# Verificar a instalação
dpkg -s lnav | grep VersionPasso 3: Primeira execução
# Os logs em /var/log podem ser lidos pelo root e pelo grupo adm
sudo lnav /var/log
# Sem rsyslog (o padrão do Debian)? Leia o journal do systemd como JSON
journalctl -o json | lnav
# Os seus próprios logs não precisam de sudo; o formato é detectado
lnav ~/app/logs/
# Aperte ? dentro do lnav para a ajuda embutida, q para sair# Os logs em /var/log podem ser lidos pelo root e pelo grupo adm
lnav /var/log
# Sem rsyslog (o padrão do Debian)? Leia o journal do systemd como JSON
journalctl -o json | lnav
# Os seus próprios logs não precisam de sudo; o formato é detectado
lnav ~/app/logs/
# Aperte ? dentro do lnav para a ajuda embutida, q para sair🎯 Exemplos básicos de uso
Lendo e acompanhando logs:
# Logs rotacionados e compactados abrem direto, assim como arquivos
lnav /var/log/nginx/access.log.2.gz support-bundle.tar.gz
# Várias fontes, juntas em uma linha do tempo por timestamp
lnav /var/log/nginx/ ~/app/logs/app.log
# Um log em outra máquina, pela sua configuração ssh de sempre
lnav user@host:/var/log/syslogFiltros e SQL:
# Dentro do lnav: e / E pulam para o erro seguinte / anterior, w / W para os avisos
# :filter-in error manter só as linhas que casam
# :filter-out healthcheck esconder as linhas que casam
# ;SELECT c_ip, count(*) AS hits FROM access_log GROUP BY c_ip ORDER BY hits DESC
# A mesma consulta sem a interface, para scripts
lnav -n -c ';SELECT sc_status, count(*) FROM access_log GROUP BY sc_status' /var/log/nginx/access.logMantendo em dia:
# O lnav é atualizado junto com o resto do sistema
sudo apt update && sudo apt upgrade
# Qual versão está instalada e qual é a mais recente disponível
apt policy lnav
# Remover
sudo apt remove lnav# O lnav é atualizado junto com o resto do sistema
apt update && apt upgrade
# Qual versão está instalada e qual é a mais recente disponível
apt policy lnav
# Remover
apt remove lnav🔧 Integrações
O lnav lê tudo que produz texto: arquivos, pipes e outras máquinas:
- ssh: caminhos remotos como
user@host:/var/log/syslogpassam pela sua configuração e pelas suas chaves ssh; o pacote recomenda oopenssh-clientpara isso - Journal do systemd: mande
journalctl -o json(com-fpara acompanhar) para o lnav e todo campo do journal fica pesquisável e consultável - Contêineres:
docker logs -f app 2>&1 | lnavoukubectl logs -f pod | lnavdão à saída dos contêineres o mesmo destaque e o mesmo SQL - Área de transferência: marque linhas e aperte
cpara copiá-las; o pacote sugerewl-clipboardouxclippara Wayland e X11 - Formatos próprios: descreva um formato de log interno num arquivo JSON e instale com
lnav -i myformat.json; a partir daí ele ganha detecção, destaque e a sua própria tabela SQL - Scripts e CI:
lnav -n -croda comandos e consultas sem interface, então o mesmo SQL que responde uma pergunta de forma interativa pode rodar num cron ou num pipeline - Documentação: a página man vem com o pacote (
man lnav), e o manual completo está em docs.lnav.org
🚀 Por que escolher o deb.griffo.io?
- Debian oficial: traz o lnav 0.12.4 no trixie e o 0.11.1 no Bookworm, cada um congelado por toda a vida da sua versão
- Downloads do upstream: um zip com um binário estático na página de releases do GitHub, copiado na mão para o seu PATH, sem a página man, e a ser baixado de novo a cada versão
- Compilar do código-fonte: uma toolchain C++ mais os pacotes de desenvolvimento de SQLite, PCRE2, ncurses, libarchive e libcurl, e uma compilação longa
- deb.griffo.io: versão mais recente com atualizações automáticas
- ✅ O mesmo nome de pacote do Debian: o pacote se chama
lnav, exatamente como no arquivo do Debian, então este repositório atualiza o lnav padrão no lugar comapt upgradee umapt removedepois não deixa nada para trás - ✅ O build estático oficial: o binário estático musl do próprio upstream, sem nenhuma dependência em tempo de execução e com o mesmo comportamento em todas as versões
- ✅ Pacote completo: o binário
lnave a sua página man, comopenssh-clientrecomendado para logs remotos ewl-clipboardouxclipsugeridos para copiar linhas - ✅ Atualizações automáticas: os pacotes são atualizados poucas horas após cada lançamento upstream
- ✅ Duas arquiteturas: amd64 e arm64 em todas as versões, então o mesmo lnav roda em servidores, notebooks e placas ARM como o Raspberry Pi
- ✅ Multi-distribuição: funciona no Bookworm, Trixie, Forky e Sid
- ✅ Manutenção simples: atualizações com os comandos apt de sempre
📦 Repositório de build do pacote
Os pacotes Debian são construídos e mantidos automaticamente neste repositório do GitHub:
- 🪵 lnav-debian - Builds dos últimos lançamentos
🔗 Pacotes relacionados
Também disponíveis no deb.griffo.io:
- lazydocker - Uma interface de terminal para o Docker, para achar o contêiner cujos logs você precisa
- k9s - Uma interface de terminal para clusters Kubernetes e seus pods
- ripgrep - Busca recursiva rápida, para pesquisar uma árvore inteira de logs de uma vez
- bottom - Um monitor do sistema para o terminal, para o que os logs não contam
- fzf - Um buscador fuzzy para escolher o log a abrir