
GoAccess é um analisador de logs web em tempo real e visualizador interativo que roda em um terminal em sistemas *nix ou através do seu navegador.
GoAccess é um analisador de logs web em tempo real, interativo e de código aberto, executado em um terminal em sistemas *nix ou diretamente no seu navegador. Projetado com administradores de sistemas, engenheiros DevOps e profissionais de segurança em mente, ele entrega estatísticas HTTP rápidas e acionáveis e relatórios visuais de servidor em tempo real. O GoAccess analisa seus logs de servidor web em tempo real e apresenta os dados diretamente no terminal ou através de um painel HTML ao vivo, facilitando o monitoramento de tráfego, a detecção de anomalias e a solução de problemas instantaneamente.
Mais informações em: https://goaccess.io.
O GoAccess analisa o arquivo de log web especificado e exibe os dados no terminal X. As funcionalidades incluem:
Completamente em Tempo Real
Todos os painéis e métricas são atualizados a cada 200 ms na saída do terminal e a cada segundo na saída HTML.
Configuração Mínima Necessária
Você pode simplesmente executá-lo contra seu arquivo de log de acesso, escolher o formato de log e deixar o GoAccess analisar o log de acesso e mostrar as estatísticas.
Rastreamento do Tempo de Resposta da Aplicação
Rastreia o tempo gasto para atender a requisição. Extremamente útil se você deseja rastrear páginas que estão desacelerando seu site.
Autenticação WebSocket:
O GoAccess oferece autenticação WebSocket aprimorada, suportando verificação JWT local e externa, com capacidade segura de renovação de token e integração perfeita com sistemas de autenticação externa.
Quase Todos os Formatos de Log Web
O GoAccess permite qualquer string de formato de log personalizado. Opções predefinidas incluem Apache, Nginx, Amazon S3, Elastic Load Balancing, CloudFront, etc.
Processamento Incremental de Log
Precisa de persistência de dados? O GoAccess tem a capacidade de processar logs incrementalmente através das opções de persistência em disco.
Apenas uma dependência
O GoAccess é escrito em C. Para executá-lo, você só precisa do ncurses como dependência. É isso. Ele ainda possui seu próprio servidor WebSocket — http://gwsocket.io/.
Visitantes
Determine a quantidade de hits, visitantes, largura de banda e métricas para as requisições mais lentas por hora ou data.
Métricas por Host Virtual
Tem vários Hosts Virtuais (Blocos de Servidor)? Possui um painel que exibe qual host virtual está consumindo mais recursos do servidor web.
ASN (Mapeamento de Número de Sistema Autônomo)
Ótimo para detectar padrões de tráfego malicioso e bloqueá-los adequadamente.
Esquema de Cores Personalizável
Adapte o GoAccess ao seu gosto/esquema de cores. Seja através do terminal ou simplesmente aplicando a folha de estilo na saída HTML.
Suporte para Grandes Conjuntos de Dados
O GoAccess possui a capacidade de analisar logs grandes devido às suas tabelas hash otimizadas em memória. Tem um uso de memória muito bom e um desempenho bastante bom. Esse armazenamento também oferece suporte para persistência em disco.
O GoAccess permite qualquer string de formato de log personalizado. Opções predefinidas incluem, mas não se limitam a:
O GoAccess foi projetado para ser um analisador de logs rápido, baseado em terminal. Sua ideia central é analisar e visualizar rapidamente as estatísticas do servidor web em tempo real sem precisar usar o navegador (ótimo se você deseja fazer uma análise rápida do seu log de acesso via SSH, ou se simplesmente ama trabalhar no terminal).
Ele também serve como uma ferramenta prática para monitoramento de segurança, facilitando a identificação de atividades suspeitas, padrões de tráfego incomuns, tentativas de força bruta, scanners, bots e requisições anômalas diretamente dos seus logs.
Embora a saída do terminal seja a saída padrão, ele tem a capacidade de gerar um relatório HTML completo, independente e em tempo real, bem como relatórios JSON e CSV.
Você pode vê-lo mais como uma ferramenta de comando de monitoramento do que qualquer outra coisa.
O GoAccess pode ser compilado e usado em sistemas *nix.
Baixe, extraia e compile o GoAccess com:
$ wget https://tar.goaccess.io/goaccess-1.10.2.tar.gz
$ tar -xzvf goaccess-1.10.2.tar.gz
$ cd goaccess-1.10.2/
$ ./configure --enable-utf8 --enable-geoip=mmdb --with-zlib
$ make
# make install
$ git clone https://github.com/allinurl/goaccess.git
$ cd goaccess
$ autoreconf -fiv
$ ./configure --enable-utf8 --enable-geoip=mmdb
$ make
# make install
A maneira mais fácil de instalar o GoAccess em GNU+Linux é usando o gerenciador de pacotes preferido da sua distribuição GNU+Linux. Observe que nem todas as distribuições terão a versão mais recente do GoAccess disponível.
# apt-get install goaccess
Nota: É provável que isso instale uma versão desatualizada do GoAccess. Para garantir que você está executando a versão estável mais recente do GoAccess, veja a opção alternativa abaixo.
$ wget -O - https://deb.goaccess.io/gnugpg.key | gpg --dearmor | sudo tee /usr/share/keyrings/goaccess.gpg >/dev/null
$ echo "deb [signed-by=/usr/share/keyrings/goaccess.gpg arch=$(dpkg --print-architecture)] https://deb.goaccess.io/ $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/goaccess.list
$ sudo apt-get update
$ sudo apt-get install goaccess
Nota:
.deb no repositório oficial também estão disponíveis via HTTPS. Talvez seja necessário instalar o apt-transport-https.# yum install goaccess
# pacman -S goaccess
# emerge net-analyzer/goaccess
# brew install goaccess
# cd /usr/ports/sysutils/goaccess/ && make install clean
# pkg install sysutils/goaccess
# cd /usr/ports/www/goaccess && make install clean
# pkg_add goaccess
# zypper ar -f obs://server:http http
# zypper in goaccess
# pkg install goaccess
# pkgin install goaccess
O GoAccess pode ser usado no Windows através do Cygwin. Veja os pacotes do Cygwin. Ou através do Subsistema GNU+Linux no Windows 10.
Uma imagem Docker foi atualizada, capaz de direcionar a saída de um log de acesso. Se você quiser apenas gerar um relatório, pode canalizar um log do ambiente externo para um processo baseado em Docker:
touch report.html
cat access.log | docker run --rm -i -v ./report.html:/report.html -e LANG=$LANG allinurl/goaccess -a -o report.html --log-format COMBINED -
OU em tempo real
tail -F access.log | docker run -p 7890:7890 --rm -i -e LANG=$LANG allinurl/goaccess -a -o report.html --log-format COMBINED --real-time-html -
Há também documentação sobre como usar o docker-compose.
Você também pode compilar o binário para sistemas baseados em Debian em um ambiente de contêiner isolado para evitar poluir seu sistema local com as bibliotecas de desenvolvimento:
$ curl -L "https://github.com/allinurl/goaccess/archive/refs/heads/master.tar.gz" | tar -xz && cd goaccess-master
$ docker build -t goaccess/build.debian-12 -f Dockerfile.debian-12 .
$ docker run -i --rm -v $PWD:/goaccess goaccess/build.debian-12 > goaccess
Você pode ler mais sobre o uso da imagem docker em DOCKER.md.
O GoAccess tem requisitos mínimos, é escrito em C e requer apenas ncurses. No entanto, abaixo está uma tabela de algumas dependências opcionais em algumas distros para compilar o GoAccess a partir do código fonte.
Nota: Talvez seja necessário instalar ferramentas de compilação como gcc, autoconf, gettext, autopoint etc. para compilar/construir software a partir do código fonte. Exemplo: base-devel, build-essential, "Development Tools".
O armazenamento em memória oferece melhor desempenho ao custo de limitar o tamanho do conjunto de dados à quantidade de memória física disponível. O GoAccess usa tabelas hash em memória. Tem um uso de memória muito bom e um desempenho bastante bom. Esse armazenamento também oferece suporte para persistência em disco.
Veja as opções que podem ser fornecidas ao comando ou especificadas no arquivo de configuração. Se especificado no arquivo de configuração, as opções longas devem ser usadas sem o prefixo --.
Nota: Canalizar dados para o GoAccess não solicitará uma caixa de diálogo de configuração de log/data/hora; você precisará defini-la previamente em seu arquivo de configuração ou na linha de comando.
Para gerar saída em um terminal e gerar um relatório interativo:
# goaccess access.log
Para gerar um relatório HTML:
# goaccess access.log -a > report.html
Para gerar um arquivo de relatório JSON:
# goaccess access.log -a -d -o report.json
Para gerar um relatório CSV para a saída padrão:
# goaccess access.log --no-csv-summary -o csv
O GoAccess também oferece grande flexibilidade para filtragem e análise em tempo real. Por exemplo, para diagnosticar rapidamente problemas monitorando logs desde que o goaccess foi iniciado:
# tail -f access.log | goaccess -
E ainda melhor, para filtrar enquanto mantém um pipe aberto para preservar a análise em tempo real, podemos usar tail -f e uma ferramenta de correspondência de padrões como grep, awk, sed, etc.:
# tail -f access.log | grep -i --line-buffered 'firefox' | goaccess --log-format=COMBINED -
ou para analisar desde o início do arquivo enquanto mantém o pipe aberto e aplica um filtro
# tail -f -n +0 access.log | grep -i --line-buffered 'firefox' | goaccess -o report.html --real-time-html -
Existem várias maneiras de analisar vários logs com o GoAccess. A mais simples é passar vários arquivos de log na linha de comando:
# goaccess access.log access.log.1
É possível até mesmo analisar arquivos de um pipe enquanto lê arquivos regulares:
# cat access.log.2 | goaccess access.log access.log.1 -
Nota: o traço simples é anexado à linha de comando para informar ao GoAccess que ele deve ler do pipe.
Agora, se quisermos adicionar mais flexibilidade ao GoAccess, podemos usar zcat --force para ler arquivos compactados e descompactados. Por exemplo, se quisermos processar todos os arquivos de log access.log*, podemos fazer:
# zcat --force access.log* | goaccess -
Nota: No Mac OS X, use gunzip -c em vez de zcat.
Use --jobs=<count> (ou -j) para habilitar a análise multi-thread. Exemplo:
# goaccess access.log -o report.html -j 4
E use --chunk-size=<256-32768> para ajustar o tamanho do chunk; o tamanho padrão do chunk é 1024. Exemplo:
# goaccess access.log -o report.html -j 4 --chunk-size=8192
O GoAccess tem a capacidade de gerar dados em tempo real no relatório HTML. Você pode até enviar o arquivo HTML por e-mail, pois ele é composto por um único arquivo sem dependências externas, que bacana!
O processo de geração de um relatório HTML em tempo real é muito semelhante ao processo de criação de um relatório estático. Apenas --real-time-html é necessário para torná-lo em tempo real.
# goaccess access.log -o /usr/share/nginx/html/your_site/report.html --real-time-html
Para visualizar o relatório, navegue até http://your_site/report.html.
Por padrão, o GoAccess usará o nome do host do relatório gerado. Opcionalmente, você pode especificar a URL à qual o navegador do cliente se conectará. Veja FAQ para um exemplo mais detalhado.
# goaccess access.log -o report.html --real-time-html --ws-url=goaccess.io
Por padrão, o GoAccess escuta na porta 7890. Para usar uma porta diferente de 7890, você pode especificá-la como (certifique-se de que a porta está aberta):
# goaccess access.log -o report.html --real-time-html --port=9870
E para vincular o servidor WebSocket a um endereço diferente de 0.0.0.0, você pode especificá-lo como:
# goaccess access.log -o report.html --real-time-html --addr=127.0.0.1
Nota: Para gerar dados em tempo real em uma conexão TLS/SSL, você precisa usar --ssl-cert=<cert.crt> e --ssl-key=<priv.key>.
Outro pipe útil seria filtrar datas do log web.
O seguinte obterá todas as requisições HTTP a partir de 05/Dec/2010 até o final do arquivo.
# sed -n '/05\/Dec\/2010/,$ p' access.log | goaccess -a -
ou usando datas relativas, como o dia de ontem ou amanhã:
# sed -n '/'$(date '+%d\/%b\/%Y' -d '1 week ago')'/,$ p' access.log | goaccess -a -
Se quisermos analisar apenas um determinado período de DATA a a DATA b, podemos fazer:
# sed -n '/5\/Nov\/2010/,/5\/Dec\/2010/ p' access.log | goaccess -a -
Se quisermos preservar apenas uma certa quantidade de dados e reciclar o armazenamento, podemos manter apenas um certo número de dias. Por exemplo, para manter e mostrar os últimos 5 dias:
# goaccess access.log --keep-last=5
Supondo que seu log contenha o campo de host virtual. Por exemplo:
vhost.io:80 8.8.4.4 - - [02/Mar/2016:08:14:04 -0600] "GET /shop HTTP/1.1" 200 615 "-" "Googlebot-Image/1.0"
E você gostaria de anexar o host virtual à requisição para ver a qual host virtual as URLs principais pertencem:
awk '$8=$1$8' access.log | goaccess -a -
Para fazer o mesmo, mas também usar filtragem e análise em tempo real:
tail -f access.log | unbuffer -p awk '$8=$1$8' | goaccess -a -
Para excluir uma lista de hosts virtuais, você pode fazer o seguinte:
# grep -v "`cat exclude_vhost_list_file`" vhost_access.log | goaccess -
Para analisar páginas específicas, ex.: visualizações de página, html, htm, php, etc., dentro de uma requisição:
# awk '$7~/\.html|\.htm|\.php/' access.log | goaccess -
Nota: $7 é o campo de requisição para o formato de log comum e combinado (sem Host Virtual). Se seu log incluir Host Virtual, provavelmente você desejará usar $8. É melhor verificar qual campo você está mirando, ex.:
# tail -10 access.log | awk '{print $8}'
Ou para analisar um código de status específico, ex.: 500 (Erro Interno do Servidor):
# awk '$9~/500/' access.log | goaccess -
Ou vários códigos de status, ex.: todos os 3xx e 5xx:
# tail -f -n +0 access.log | awk '$9~/3[0-9]{2}|5[0-9]{2}/' | goaccess -o out.html -
E para obter uma visão geral estimada de quantos bots (crawlers) estão atingindo seu servidor:
# tail -F -n +0 access.log | grep -i --line-buffered 'bot' | goaccess -
Além disso, vale a pena notar que, se quisermos executar o GoAccess com prioridade mais baixa, podemos executá-lo como:
# nice -n 19 goaccess -f access.log -a
e se você não quiser instalá-lo em seu servidor, ainda pode executá-lo a partir de sua máquina local!
# ssh -n root@server 'tail -f /var/log/apache2/access.log' | goaccess - --log-format=COMBINED
Nota: SSH requer -n para que o GoAccess possa ler do stdin. Além disso, certifique-se de usar chaves SSH para autenticação, pois não funcionará se uma senha for exigida.
Recebemos muitas perguntas e problemas que já foram respondidos anteriormente.
O GoAccess tem a capacidade de processar logs incrementalmente através de seu armazenamento interno e despejar seus dados em disco. Funciona da seguinte maneira:
--persist; em seguida, o mesmo conjunto de dados pode ser carregado com.--restore. Se novos dados forem passados (canalizados ou através de um arquivo de log), eles serão anexados ao conjunto de dados original.O GoAccess mantém o controle dos inodes de todos os arquivos processados (assumindo que os arquivos permanecerão na mesma partição). Além disso, extrai um trecho de dados do log junto com a última linha analisada de cada arquivo e o timestamp da última linha analisada. Ex.: inode:29627417|line:20012|ts:20171231235059
Primeiro, ele compara se o trecho corresponde ao log que está sendo analisado; se corresponder, assume que o log não mudou drasticamente, ou seja, não foi truncado. Se o inode não corresponder ao arquivo atual, ele analisa todas as linhas. Se o arquivo atual corresponder ao inode, ele lê as linhas restantes e atualiza a contagem de linhas analisadas e o timestamp. Como precaução extra, ele não analisará linhas de log com timestamp ≤ ao armazenado.
Dados canalizados funcionam com base no timestamp da última linha lida. Por exemplo, ele analisará e descartará todas as entradas recebidas até encontrar um timestamp >= ao armazenado.
// log de acesso do mês passado
# goaccess access.log.1 --persist
em seguida, carregue com
// anexar o log de acesso deste mês e preservar novos dados
# goaccess access.log --restore --persist
Para ler apenas dados persistidos (sem analisar novos dados)
# goaccess --restore
feedback. Sinta-se à vontade para usar o rastreador de problemas do GitHub e pull requests para discutir e enviar alterações de código.
Pode contribuir para as nossas traduções editando os ficheiros .po diretamente no GitHub ou usando a interface visual inlang.com
Aproveite!
Suporte Docker
Capacidade de construir a imagem Docker do GoAccess a partir do upstream. Você ainda pode configurá-lo totalmente usando mapeamento de volume e editando goaccess.conf. Veja a seção Docker abaixo.
Há também documentação sobre como usar o docker-compose.
| Distro | NCurses | GeoIP (opt) | GeoIP2 (opt) | OpenSSL (opt) |
|---|
| Ubuntu/Debian | libncurses-dev | libgeoip-dev | libmaxminddb-dev | libssl-dev |
| RHEL/CentOS | ncurses-devel | geoip-devel | libmaxminddb-devel | openssl-devel |
| Arch | ncurses | geoip | libmaxminddb | openssl |
| Gentoo | sys-libs/ncurses | dev-libs/geoip | dev-libs/libmaxminddb | dev-libs/openssl |
| Slackware | ncurses | GeoIP | libmaxminddb | openssl |