GoAccess é um analisador de log da web em tempo real de código aberto e visualizador interativo que roda em um terminal em sistemas *nix ou por meio de seu navegador . Ele fornece estatísticas HTTP rápidas e valiosas para administradores de sistema que exigem um relatório visual do servidor em tempo real. Mais informações em: https://goaccess.io.
GoAccess analisa o arquivo de log da web especificado e envia os dados para o terminal X. Os recursos incluem:
Totalmente em tempo real
Todos os painéis e métricas são cronometrados para serem 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 em 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.
Acompanhe o tempo de resposta do aplicativo
Acompanhe o tempo necessário para atender a solicitação. Extremamente útil se você deseja rastrear páginas que estão deixando seu site lento.
Quase todos os formatos de log da web
GoAccess permite qualquer string de formato de log personalizado. As opções predefinidas incluem Apache, Nginx, Amazon S3, Elastic Load Balancing, CloudFront, etc.
Processamento de log incremental
Precisa de persistência de dados? GoAccess tem a capacidade de processar logs de forma incremental por meio das opções de persistência em disco.
Apenas uma dependência
GoAccess é escrito em C. Para executá-lo, você só precisa de ncurses como dependência. É isso. Ele ainda possui seu próprio servidor Web Socket – http://gwsocket.io/.
Visitantes
Determine a quantidade de acessos, visitantes, largura de banda e métricas para solicitações de execução mais lenta por hora ou data.
Métricas por Host Virtual
Possui vários hosts virtuais (blocos de servidor)? Possui um painel que exibe qual host virtual está consumindo a maior parte dos recursos do servidor web.
ASN (mapeamento de número de sistema autônomo)
Ótimo para detectar padrões de tráfego maliciosos e bloqueá-los adequadamente.
Esquema de cores personalizável
Personalize o GoAccess de acordo com seus próprios gostos/esquemas de cores. Através do terminal ou simplesmente aplicando a folha de estilo na saída HTML.
Suporte para grandes conjuntos de dados
GoAccess apresenta a capacidade de analisar logs grandes devido às suas tabelas hash otimizadas na memória. Tem um uso de memória muito bom e um desempenho muito bom. Este armazenamento também oferece suporte para persistência em disco.
Suporte Docker
Capacidade de construir a imagem Docker do GoAccess a partir do upstream. Você ainda pode configurá-lo totalmente usando o mapeamento de volume e editando goaccess.conf
. Consulte a seção Docker abaixo.
GoAccess permite qualquer string de formato de log personalizado. As opções predefinidas incluem, mas não se limitam a:
GoAccess foi projetado para ser um analisador de log rápido baseado em terminal. Sua ideia central é analisar e visualizar rapidamente as estatísticas do servidor web em tempo real sem a necessidade de usar seu navegador ( ótimo se você deseja fazer uma análise rápida do seu log de acesso via SSH, ou se simplesmente adora trabalhar no terminal ).
Embora a saída do terminal seja a saída padrão, ela tem a capacidade de gerar um relatório HTML
completo, independente e em tempo real, bem como um relatório JSON
e CSV
.
Você pode vê-lo mais como uma ferramenta de comando de monitor do que qualquer outra coisa.
GoAccess pode ser compilado e usado em sistemas *nix.
Baixe, extraia e compile o GoAccess com:
$ wget https://tar.goaccess.io/goaccess-1.9.3.tar.gz
$ tar -xzvf goaccess-1.9.3.tar.gz
$ cd goaccess-1.9.3/
$ ./configure --enable-utf8 --enable-geoip=mmdb
$ make
# make install
$ git clone https://github.com/allinurl/goaccess.git
$ cd goaccess
$ autoreconf -fiv
$ ./configure --enable-utf8 --enable-geoip=mmdb
$ make
# make install
É mais fácil instalar o GoAccess no 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
Observação: é provável que isso instale uma versão desatualizada do GoAccess. Para ter certeza de que você está executando a versão estável mais recente do GoAccess, consulte 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
Observação :
.deb
no repositório oficial também estão disponíveis através de HTTPS. Pode ser necessário instalar 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
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.
GoAccess possui requisitos mínimos, está escrito em C e requer apenas ncurses. No entanto, abaixo está uma tabela de algumas dependências opcionais em algumas distros para construir o GoAccess a partir do código-fonte.
Distribuição | NCurses | GeoIP (opcional) | GeoIP2 (opcional) | OpenSSL (opcional) |
---|---|---|---|---|
Ubuntu/Debian | libncurses-dev | libgeoip-dev | libmaxminddb-dev | libssl-dev |
RHEL/CentOS | ncurses-devel | geoip-devel | libmaxminddb-devel | openssl-devel |
Arco | maldições | geoip | libmaxminddb | abressl |
Gentoo | sys-libs/ncurses | dev-libs/geoip | dev-libs/libmaxminddb | dev-libs/openssl |
Slackware | maldições | GeoIP | libmaxminddb | abressl |
Nota : Pode ser necessário instalar ferramentas de construção como gcc
, autoconf
, gettext
, autopoint
etc. para compilar/construir software a partir do código-fonte. por exemplo, base-devel
, build-essential
, "Development Tools"
.
Foi atualizada uma imagem Docker, capaz de direcionar a saída de um log de acesso. Se quiser apenas gerar um relatório, você 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 -
Você também pode construir o binário para sistemas baseados em Debian em um ambiente de contêiner isolado para evitar sobrecarregar 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 como usar a imagem docker em DOCKER.md.
O armazenamento na memória oferece melhor desempenho ao custo de limitar o tamanho do conjunto de dados à quantidade de memória física disponível. GoAccess usa tabelas hash na memória. Tem um uso de memória muito bom e um desempenho muito bom. Este armazenamento também oferece suporte para persistência em disco.
Veja opções que podem ser fornecidas ao comando ou especificadas no arquivo de configuração. Se especificado no arquivo de configuração, opções longas precisam ser usadas sem acrescentar --
.
Nota : A transferência de dados para o GoAccess não exibirá uma caixa de diálogo de configuração de log/data/hora; você precisará defini-los previamente em seu arquivo de configuração ou na linha de comando.
Para enviar para 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 stdout:
# goaccess access.log --no-csv-summary -o csv
GoAccess também permite grande flexibilidade para filtragem e análise em tempo real. Por exemplo, para diagnosticar problemas rapidamente monitorando logs desde que o goaccess foi iniciado:
# tail -f access.log | goaccess -
E melhor ainda, para filtrar enquanto mantém um pipe aberto para preservar a análise em tempo real, podemos usar tail -f
e uma ferramenta de padrão correspondente, como grep
, awk
, sed
, etc.:
# tail -f access.log | grep -i --line-buffered 'firefox' | goaccess --log-format=COMBINED -
ou 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 GoAccess. O mais simples é passar vários arquivos de log para a linha de comando:
# goaccess access.log access.log.1
É até possível analisar arquivos de um pipe enquanto lê arquivos normais:
# cat access.log.2 | goaccess access.log access.log.1 -
Nota : o traço único é anexado à linha de comando para que o GoAccess saiba que ele deve ler o canal.
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=
(ou -j
) para ativar a análise multithread. Por exemplo:
# goaccess access.log -o report.html -j 4
E use --chunk-size=<256-32768>
para ajustar o tamanho do bloco, o tamanho padrão do bloco é 1024. Por exemplo:
# goaccess access.log -o report.html -j 4 --chunk-size=8192
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 de um único arquivo sem dependências externas de arquivo, que legal!
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, você pode navegar 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á. Consulte 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 esteja 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 por meio de uma conexão TLS/SSL, você precisa usar --ssl-cert=
e --ssl-key=
.
Outro canal útil seria filtrar datas do log da web
A seguir obteremos todas as solicitaçõ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 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 tempo 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 à solicitação para ver a qual host virtual pertencem os URLs principais:
awk '$8=$1$8' access.log | goaccess -a -
Para fazer o mesmo, mas também use 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, por exemplo, visualizações de páginas, html
, htm
, php
, etc. dentro de uma solicitação:
# awk '$7~/.html|.htm|.php/' access.log | goaccess -
Observe que $7
é o campo de solicitação para o formato de log comum e combinado (sem Host Virtual). Se o seu log incluir Host Virtual, você provavelmente desejará usar $8
. É melhor verificar em qual campo você está atirando, por exemplo:
# tail -10 access.log | awk '{print $8}'
Ou para analisar um código de status específico, por exemplo, 500 (Erro interno do servidor):
# awk '$9~/500/' access.log | goaccess -
Ou vários códigos de status, por exemplo, todos 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 (rastreadores) estão atingindo seu servidor:
# tail -F -n +0 access.log | grep -i --line-buffered 'bot' | goaccess -
Além disso, vale ressaltar que se quisermos executar o GoAccess com prioridade mais baixa, podemos executá-lo como:
# nice -n 19 goaccess -f access.log -a
e se não quiser instalá-lo em seu servidor, você ainda pode executá-lo em sua máquina local!
# ssh -n root@server 'tail -f /var/log/apache2/access.log' | goaccess -
Nota: SSH requer -n
para que GoAccess possa ler stdin. Além disso, certifique-se de usar chaves SSH para autenticação, pois elas não funcionarão se uma senha longa for necessária.
Recebemos muitas perguntas e questões que foram respondidas anteriormente.
GoAccess tem a capacidade de processar logs de forma incremental por meio de seu armazenamento interno e despejar seus dados em disco. Funciona da seguinte maneira:
--persist
e, em seguida, o mesmo conjunto de dados pode ser carregado.--restore
. Se novos dados forem transmitidos (canalizados ou por meio de um arquivo de log), eles serão anexados ao conjunto de dados original. GoAccess rastreia 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 carimbo de data / hora da última linha analisada . por exemplo, inode:29627417|line:20012|ts:20171231235059
Primeiro, ele compara se o snippet corresponde ao log que está sendo analisado; se corresponder, assume que o log não mudou drasticamente, por exemplo, não foi truncado. Se o inode não corresponder ao arquivo atual, ele analisará todas as linhas. Se o arquivo atual corresponder ao inode, ele lê as linhas restantes e atualiza a contagem de linhas analisadas e o carimbo de data/hora. Como precaução extra, ele não analisará linhas de log com carimbo de data/hora ≤ aquele armazenado.
Os dados canalizados funcionam com base no carimbo de data/hora da última linha lida. Por exemplo, ele irá analisar e descartar todas as entradas recebidas até encontrar um carimbo de data/hora >= daquele armazenado.
// last month access log
# goaccess access.log.1 --persist
então, carregue-o com
// append this month access log, and preserve new data
# goaccess access.log --restore --persist
Para ler apenas dados persistentes (sem analisar novos dados)
# goaccess --restore
Qualquer ajuda no GoAccess é bem-vinda. A maneira mais útil é experimentar e dar feedback. Sinta-se à vontade para usar o rastreador de problemas do GitHub e receber solicitações para discutir e enviar alterações de código.
Você pode contribuir com nossas traduções editando os arquivos .po diretamente no GitHub ou usando a interface visual inlang.com
Aproveitar!