10 pontos por GN⁺ 2025-04-23 | 1 comentários | Compartilhar no WhatsApp
  • Coleta e análise de logs remotos apenas com conexões SSH, sem servidor central, em um visualizador TUI de logs multi-host rápido e eficiente em recursos
  • Visualização com histograma de linha do tempo e filtragem por tempo facilita entender o fluxo dos logs
  • Usa combinações básicas de awk, tail e head para oferecer alto desempenho e implantação simples
  • As consultas de log são processadas remotamente sem download local, minimizando o uso de rede e otimizando o tratamento de grandes volumes de logs
  • O padrão é simples, mas há extensibilidade por meio de vários arquivos de configuração, SSH config e interação pela UI

Introdução ao Nerdlog

  • Nerdlog é um visualizador de logs com interface de texto que funciona sem servidor central
  • Ele permite analisar logs como o Graylog/Kibana, mas é uma ferramenta alternativa leve, sem a carga de instalação e manutenção
    • A motivação inicial do desenvolvimento começou com a frustração em relação ao Splunk, que era lento e ineficiente
  • É otimizado para filtrar e visualizar simultaneamente logs de vários servidores remotos
  • Foi projetado principalmente para processar logs de sistema (/var/log/messages, /var/log/syslog), mas também suporta outros formatos
  • Consegue processar rapidamente logs grandes, de mais de 1 GB
  • O objetivo principal é maximizar a velocidade e a eficiência na consulta de logs em múltiplos nós

Características de design

  • Funciona sem servidor central, criando uma conexão SSH para cada nó e mantendo-a em espera
  • Sem baixar o log inteiro, envia por consulta no máximo 250 mensagens de log e apenas os dados do histograma
  • Mescla todas as respostas para oferecer uma visão unificada
  • Usa compressão Gzip na transmissão para reduzir o custo de rede

Estado e histórico do projeto

  • Foi criado em 2022 em um hackathon pessoal como substituto do Splunk lento e, em 2025, foi lançado como open source
  • Foi implementado rapidamente, então há código espaguete e falta cobertura de testes
  • O uso real foi testado apenas em ambiente Linux
  • Está em fase de prova de conceito, mas já é rápido e estável o suficiente para uso prático

Resumo de uso

  • Ao executar o app, aparece um campo para inserção da consulta
  • Um logstream representa arquivos de log contínuos em servidores acessíveis via ssh
  • É possível especificar porta SSH ou caminho do arquivo de log, ou usar ssh config e arquivos de configuração separados
  • Select field expression permite definir em estilo SQL os campos que serão exibidos na UI

Exemplo:

myuser@myserver.com  
myuser@myserver.com:1234:/some/other/logfile  

Exemplo de arquivo de configuração (~/.config/nerdlog/logstreams.yaml):

log_streams:  
  myhost-01:  
    hostname: actualhost1.com  
    port: 1234  
    user: myuser  
    log_files:  
      - /some/custom/logfile  

Estrutura da UI

  • Filtro de entrada de padrão Awk: suporta /foo/, ( /bar/ || /baz/ ) && !/qux/ etc.
  • Botão Edit: abre a janela de entrada da consulta completa
  • Botão Menu: oferece funções como voltar, avançar e copiar consulta
  • Histograma: visualiza a densidade de logs por faixa de tempo e permite selecionar o intervalo de tempo
  • Tabela de logs: os logs mais recentes ficam na parte inferior, e é possível ver campos detalhados com rolagem horizontal à direita
  • Barra de status:
    • Verde: número de logstreams conectados e em espera
    • Laranja: número de logstreams sendo consultados no momento
    • Vermelho: número de logstreams em processo de conexão
    • Números à direita: total de logs correspondentes / número de logs atualmente carregados / posição do cursor
  • Linha de comando: acessada com a tecla :, permitindo inserir comandos no estilo Vim

Como navegar

  • Teclas gerais: Tab, Shift+Tab, Enter, Esc, PgUp, PgDn etc.
  • Teclas no estilo Vim: h, j, k, l, g, G, Ctrl+U, Ctrl+D, i, a etc.
  • Dentro dos campos de entrada, use Up, Down, Ctrl+P, Ctrl+N para navegar pelo histórico
  • Ctrl+K, Ctrl+J: percorrem todo o histórico de consultas

Principais comandos

  • :xc ou :xclip: copia o estado atual da consulta para a área de transferência como string de comando
    nerdlog --lstreams 'localhost' --time -3h --pattern '/something/'  
    
  • :back, :fwd: move para a consulta anterior/seguinte como em um navegador
  • :edit: abre a janela de edição da consulta
  • :write [filename]: salva os logs atualmente carregados em um arquivo
  • :reconnect, :disconnect: reconecta / desconecta logstreams
  • :set opção=valor: altera configurações (suporta numlines, timezone etc.)
  • :q: encerra o programa

Requisitos

  • É necessário ter acesso SSH aos hosts remotos
  • O SSH agent deve estar em execução localmente
  • Os hosts precisam ter gawk instalado, e mawk não é suportado
  • Serviços de registro de logs do sistema, como rsyslog, devem estar em execução para que /var/log/syslog possa ser usado
  • Para mais detalhes, consulte Requisitos e limitações

Encerrando

  • Nerdlog é uma ferramenta eficiente para visualizar logs remotos de forma rápida e visual, sem necessidade de instalação
  • Não exige configurações complexas e permite análise em tempo real economizando recursos de rede
  • É uma ferramenta de análise de logs especialmente ideal para usuários de Vim ou para quem prefere ferramentas de CLI

1 comentários

 
GN⁺ 2025-04-23
Comentários no Hacker News
  • Belo trabalho. A TUI é realmente limpa e gostei do histograma no topo. Vou brincar com isso hoje
  • O que aprendi hoje: padrões do awk são mais do que simples expressões regulares e podem ser combinados com operadores booleanos. Já usei awk um pouco, mas não sabia disso
  • Projeto muito legal. Gosto especialmente do histograma da linha do tempo e da simplicidade do design remote-first e da abordagem TUI
    • Tive dificuldades parecidas ao lidar com logs de vários hosts e, como resultado, acabei criando uma ferramenta chamada Logdy
    • O Logdy é baseado na web e foca em tailing em tempo real, busca em logs estruturados e filtragem rápida em várias fontes. Não requer um servidor central
    • Não estou tentando fazer uma comparação direta, mas se você estiver explorando esse espaço, pode ser útil como uma abordagem complementar ou para cenários diferentes
    • Ainda preciso trabalhar para adicionar recursos de consulta em vários hosts
    • De qualquer forma, parabéns ao nerdlog. É sempre bom ver uma ferramenta enxuta que não exige rodar vários serviços
  • Na landing page, o journalctl é mencionado uma vez, o que dá a entender que os logs precisam ser armazenados em texto puro no syslog antigo
    • Não quero armazenar logs em texto puro e usar soluções antigas como logrotate
    • O próprio journald tem recursos embutidos para receber logs de hosts remotos e pesquisá-los (usando --merge)
  • Com certeza vou brincar com isso mais tarde. Arquivos de log compactados com gzip não são suportados, o que pessoalmente reduz bastante os casos de uso para mim
    • Parece que isso foi bem considerado, já que foi mencionado como uma limitação que as pessoas provavelmente notariam. Fico curioso se há planos de oferecer suporte no futuro
  • Parece bom. Se você quiser mais usuários, talvez consiga ajuda da comunidade para empacotar isso nas principais distribuições Linux
  • Muito bom. Adicionei à minha pequena lista de visualizadores de log https://github.com/dloss/klp#alternative-tools
  • Bom. Eu precisava disso alguns anos atrás. Não há arquivo de licença?
  • Parece bom. Gostaria de saber se existe uma forma de usar data/hora no formato RFC 3339 sem alterar o código-fonte
    • Fico curioso se funciona com runit (Void Linux)
  • Excelente. Eu estava procurando algo assim
  • Fico curioso se dá para ver logs do AWS CloudWatch