GoAccess
Analisador de logs web em tempo real que roda no seu terminal ou gera um painel HTML autossuficiente em um único arquivo
O GoAccess é um analisador de logs de código aberto com licença MIT, escrito em C, que lê o log de acesso do seu servidor web e mostra o que o servidor realmente entregou: como painel interativo no terminal, ou como um único arquivo HTML autossuficiente que você poderia mandar por e-mail. Ele interpreta logs de Apache, Nginx, Caddy, CloudFront, S3, Elastic Load Balancing, Traefik e IIS de fábrica, além de qualquer formato personalizado que você descrever, e precisa apenas do ncurses para rodar. Tinha 20.890 estrelas no GitHub em 2 de setembro de 2026. Para quem está construindo, ele responde muito bem a uma pergunta específica: o que foi pedido, o que o seu servidor respondeu e quanto tempo levou, incluindo as requisições que nunca executaram o seu JavaScript.
O que o GoAccess é de fato
O GoAccess (github.com/allinurl/goaccess) é mantido desde 2013 e escrito em C, o que aparece logo na primeira impressão: uma única dependência obrigatória, o ncurses, e inicialização instantânea. Aponte para um log — `goaccess access.log` — e você tem um painel interativo no terminal. Acrescente `-o report.html --real-time-html` e ele escreve um único arquivo HTML sem dependências externas, depois envia atualizações ao vivo para ele por um servidor WebSocket que já vem embutido, na porta 7890 por padrão.
- Ele lê o formato de log que você já tem Apache common e combined, Nginx, o formato JSON estruturado do Caddy, Traefik, Squid, W3C do IIS, Amazon CloudFront, S3, Elastic Load Balancing e Google Cloud Storage já vêm predefinidos. Qualquer outro você descreve com uma string de formato personalizada.
- Ele roda onde o log está, ou onde você está Ele interpreta arquivos, conjuntos de arquivos rotacionados e compactados canalizados por `zcat --force`, ou a entrada padrão. Ou seja, você pode não instalar nada no servidor e rodar `ssh -n you@server 'tail -f /var/log/nginx/access.log' | goaccess -` do seu notebook.
- Ele guarda histórico sem banco de dados `--persist` grava o conjunto de dados em disco e `--restore` carrega de volta, acrescentando o que for novo. Ele registra o inode de cada arquivo e o horário da última linha lida, então rodar de novo não conta em dobro, e `--keep-last=5` recicla o que tiver mais de cinco dias.
- Ele agrupa o tráfego como quem opera pensa Painéis de requisições, erros 404, arquivos estáticos, banda, tempo de resposta, referenciadores e hosts virtuais, além de geografia e ASN com a base opcional da MaxMind, que é o painel que deixa uma única rede barulhenta evidente.
- Ele continua em desenvolvimento ativo A última tag é a v1.11, de 15 de julho de 2026, e os commits dos últimos dias de agosto de 2026 são trabalho de produto normal: uma categoria dedicada a rastreadores de IA, o tráfego do Fediverso separado dos rastreadores, exclusão de tráfego por ASN, relatórios de campanha UTM no lugar do antigo painel de frases-chave, e uma métrica de requisições por segundo ao vivo.
A licença é uma MIT simples, declarada no arquivo COPYING do repositório e não deixada a cargo de um selo. São 449 issues abertas, o que para um projeto em C de treze anos que interpreta todo formato de log já inventado soa mais como evidência de uso do que de abandono: boa parte são dúvidas de formato de log, data e hora, e o README aponta direto para as várias centenas já fechadas.
Quanto custa operar
O custo real não é CPU, é acesso. Você precisa conseguir ler o log de acesso, o que já elimina a maioria das plataformas gerenciadas onde você nunca vê um. Você precisa conhecer o seu formato de log, e é aí que o tempo realmente vai: uma divergência entre o formato de data do seu log e a configuração regional em que o GoAccess está rodando é o motivo mais comum de a primeira execução não mostrar nada. E você precisa decidir sobre persistência logo de cara, porque sem `--persist` o seu relatório é tão antigo quanto o arquivo que você entregou, e a rotação de logs está apagando o seu histórico num cronograma que outra pessoa definiu.
Em troca você tem uma ferramenta sem conta, sem tag, sem amostragem e sem mensalidade, respondendo poucos segundos depois de a requisição acontecer. Ela não é analytics de produto, e nem tenta ser: não faz ideia de quem é um usuário, no que ele clicou, ou se voltou na semana seguinte. É a camada de baixo, e as duas respondem perguntas diferentes o bastante para que a maioria dos times que usa uma acabe usando as duas.
Onde o log para de dizer a verdade
Um analisador de logs é exatamente tão verdadeiro quanto o log, e o jeito mais rápido de fazer o seu log parar de descrever o seu tráfego é colocar um CDN na frente. Fizemos isso no agentceres.com em agosto de 2026 e o efeito na origem não foi sutil: o cache de páginas que o nosso processo de origem mantinha caiu de 1,33 GB para 0,31 GB, porque a maior parte das requisições simplesmente parou de chegar. Cada um desses acessos servidos na borda é uma visita real que o log de origem nunca vai conter.
- Um CDN na frente. Respostas em cache são servidas na borda, então o seu log de origem guarda os misses. Consulte os logs do próprio CDN para ter o quadro inteiro, ou saiba que você está medindo cache miss e diga isso.
- Rotação de logs. O padrão na maioria dos sistemas guarda uma ou duas semanas. Tudo que você não persistiu some, e some sem erro nenhum.
- Um proxy ou balanceador de carga. Sem o cabeçalho forwarded-for configurado, toda requisição parece vir de um único endereço interno e os seus painéis de geografia e ASN viram enfeite.
- Arquivos estáticos e health checks. Um acesso não é uma visualização de página. Filtre até as requisições que você realmente quer dizer antes de citar um número para alguém.
Também aprendemos o valor de ler a fonte crua no sentido contrário. Três horas do nosso próprio log de origem tinham 1.438 requisições espalhadas por 558 URLs distintas — 2,58 acessos por URL — e cerca de três quartos disso era tráfego de datacenter com user agents falsificados ou vazios. Nada dessa proporção aparecia no nosso analytics de JavaScript, porque quase nada desse tráfego executa JavaScript, e isso encerrou uma discussão de semanas sobre por que um cache de duas horas rendia tão pouco num site de conteúdo de cauda longa. A versão completa desse argumento está na nossa página sobre quanto do seu tráfego é bot.
Onde ele entra quando você está tentando crescer
O uso para crescimento é mais estreito que o alcance total da ferramenta e vale nomear com precisão. Primeiro, a realidade do rastreamento: quais páginas o Googlebot e os rastreadores de IA de fato buscaram, com que frequência e com qual status — um 404 no seu log costuma ser um link que alguém publicou para uma página que você moveu. Segundo, o painel de referenciadores, que pega links de entrada antes de qualquer ferramenta de backlinks perceber. Terceiro, o tempo de resposta por requisição, porque uma página lenta só para visitantes reais é invisível num teste sintético. O fato de o projeto ter adicionado uma categoria dedicada a rastreadores de IA e separado o tráfego do Fediverso no fim de agosto de 2026 é um sinal razoável de que o primeiro item virou pergunta de muita gente.
Nada disso é o trabalho de crescimento em si, e esse é o limite honesto de qualquer ferramenta de medição: um log diz o que aconteceu e nunca o que fazer a respeito. Publicar a página que o rastreador veio buscar, escrever a abordagem que conquista aquele referenciador, corrigir o 404 que estava calado custando um link: tudo isso ainda precisa de alguém para fazer. É para isso que existe a AgentCeres — a AI Growth Officer em agentceres.com —: um time de especialistas que redige o trabalho, com uma pessoa aprovando tudo que sai. Se você está antes disso e a pergunta é simplesmente por que ninguém chega, comece por por que o seu site não recebe tráfego.
FAQ
- O GoAccess substitui o Google Analytics ou o Plausible?
- Não, e tratar como substituto é o caminho para a decepção. Uma ferramenta baseada em tag acompanha uma pessoa ao longo de uma sessão e consegue dizer no que ela clicou e se voltou. O GoAccess lê o que foi pedido ao seu servidor e o que ele respondeu, sem nenhuma noção de usuário. A sobreposição é mais ou menos a contagem de páginas vistas, e até essa vai divergir, porque um log conta requisições que nunca executaram JavaScript e uma tag conta sessões que a sua origem talvez nunca tenha visto.
- Dá para usar se meu app está numa plataforma sem acesso aos logs?
- Normalmente não de forma direta, e essa é a primeira coisa a verificar antes de investir tempo. Se você não consegue ler um log de acesso, o equivalente é a exportação de logs do seu CDN, se ele tiver, ou o log de requisições da própria plataforma. Alguns serviços permitem despejar logs num arquivo que você pode canalizar, e isso funciona bem: o GoAccess lê a entrada padrão sem problema e não se importa de onde vieram as linhas, desde que você informe o formato.
- Rodar isso vai deixar um servidor movimentado mais lento?
- Ele lê o arquivo de log em vez de ficar no caminho da requisição, então não consegue atrasar uma resposta do jeito que um agente dentro do processo consegue. Com um histórico grande, o único custo real é a própria leitura, e as sugestões do README dão conta: rode com prioridade baixa usando `nice`, use `--jobs` para leitura multithread e aumente o `--chunk-size` acima do padrão. A outra opção é não rodar no servidor e canalizar o log para a sua máquina via SSH.
- Como guardo mais de uma semana de histórico?
- Persistindo. Rode uma vez com `--persist` para gravar o conjunto de dados em disco, e depois `--restore --persist` em cada execução seguinte para carregar o que você tinha e acrescentar as linhas novas. Como ele guarda o inode de cada arquivo e o horário da última linha lida, rodar de novo sobre um log rotacionado não vai contar em dobro. Acrescente `--keep-last` se você prefere uma janela móvel em vez de tudo para sempre.
You built it. Now grow it.
AgentCeres is a managed AI marketing team — specialists draft the SEO, social, and outreach that fill your links, you approve what ships. 14-day free trial, from $39/month.