
GoAccess est un analyseur de logs web en temps réel et un visualiseur interactif qui s'exécute dans un terminal sur les systèmes *nix ou via votre navigateur.
GoAccess est un analyseur de journaux web open source, temps réel et visualiseur interactif qui s'exécute dans un terminal sur les systèmes *nix ou directement dans votre navigateur. Conçu pour les administrateurs système, les ingénieurs DevOps et les professionnels de la sécurité, il fournit rapidement des statistiques HTTP exploitables et des rapports visuels de serveur à la volée. GoAccess analyse vos journaux de serveur web en temps réel et présente les données directement dans le terminal ou via un tableau de bord HTML en direct, facilitant la surveillance du trafic, la détection des anomalies et le dépannage instantané des problèmes.
Plus d'informations sur : https://goaccess.io.
GoAccess analyse le fichier de journal web spécifié et affiche les données dans le terminal X. Les fonctionnalités incluent :
Entièrement en temps réel
Tous les panneaux et métriques sont mis à jour toutes les 200 ms sur la sortie terminal et toutes les secondes sur la sortie HTML.
Configuration minimale requise
Vous pouvez simplement l’exécuter sur votre fichier de journal d’accès, choisir le format de journal et laisser GoAccess analyser le journal d’accès et vous montrer les statistiques.
Suivi du temps de réponse des applications
Suivez le temps nécessaire pour servir la requête. Extrêmement utile si vous souhaitez suivre les pages qui ralentissent votre site.
Authentification WebSocket :
GoAccess offre une authentification WebSocket améliorée, prenant en charge la vérification JWT locale et externe, avec des capacités de renouvellement sécurisé des jetons et une intégration transparente avec les systèmes d’authentification externes.
Presque tous les formats de journaux web
GoAccess permet toute chaîne de format de journal personnalisée. Les options prédéfinies incluent Apache, Nginx, Amazon S3, Elastic Load Balancing, CloudFront, etc.
Traitement incrémental des journaux
Besoin de persistance des données ? GoAccess a la capacité de traiter les journaux de manière incrémentielle via les options de persistance sur disque.
Une seule dépendance
GoAccess est écrit en C. Pour l’exécuter, vous n’avez besoin que de ncurses comme dépendance. C’est tout. Il intègre même son propre serveur WebSocket — http://gwsocket.io/.
Visiteurs
Déterminez le nombre de hits, de visiteurs, de bande passante et les métriques pour les requêtes les plus lentes par heure ou par date.
Métriques par hôte virtuel
Vous avez plusieurs hôtes virtuels (blocs de serveur) ? Il dispose d’un panneau qui affiche quel hôte virtuel consomme le plus de ressources du serveur web.
ASN (mappage des numéros de système autonome)
Idéal pour détecter les modèles de trafic malveillants et les bloquer en conséquence.
Personnalisable par schéma de couleurs
Adaptez GoAccess à vos goûts/couleurs. Soit via le terminal, soit en appliquant simplement la feuille de style sur la sortie HTML.
Prise en charge des grands ensembles de données
GoAccess offre la capacité d’analyser de gros journaux grâce à ses tables de hachage optimisées en mémoire. Il a une très bonne utilisation de la mémoire et de bonnes performances. Ce stockage prend également en charge la persistance sur disque.
GoAccess permet toute chaîne de format de journal personnalisée. Les options prédéfinies incluent, sans s’y limiter :
GoAccess a été conçu pour être un analyseur de journaux rapide, basé sur terminal. Son idée centrale est d’analyser et de visualiser rapidement les statistiques du serveur web en temps réel sans avoir besoin d’utiliser votre navigateur (idéal si vous voulez faire une analyse rapide de votre journal d’accès via SSH, ou si vous aimez simplement travailler dans le terminal).
Il sert également d’outil pratique pour la surveillance de la sécurité, facilitant la détection d’activités suspectes, de modèles de trafic inhabituels, de tentatives de force brute, de scanners, de robots et de requêtes anormales directement à partir de vos journaux.
Bien que la sortie terminal soit la sortie par défaut, il a la capacité de générer un rapport HTML complet, autonome et en temps réel, ainsi qu’un rapport JSON et CSV.
Vous pouvez le considérer davantage comme une commande de surveillance que comme autre chose.
GoAccess peut être compilé et utilisé sur les systèmes *nix.
Téléchargez, extrayez et compilez GoAccess avec :
$ 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
Il est plus simple d’installer GoAccess sur GNU+Linux en utilisant le gestionnaire de paquets préféré de votre distribution GNU+Linux. Veuillez noter que toutes les distributions n’auront pas la dernière version de GoAccess.
# apt-get install goaccess
Remarque : Il est probable que cela installe une version obsolète de GoAccess. Pour vous assurer d’exécuter la dernière version stable de GoAccess, voir l’option alternative ci-dessous.
$ 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
Remarque :
.deb dans le référentiel officiel sont également disponibles via HTTPS. Vous pouvez avoir besoin d’installer 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 peut être utilisé sous Windows via Cygwin. Voir les paquets de Cygwin. Ou via le sous-système GNU+Linux sous Windows 10.
Une image Docker a été mise à jour, capable de diriger la sortie d’un journal d’accès. Si vous voulez seulement produire un rapport, vous pouvez rediriger un journal depuis l’environnement externe vers un processus basé sur 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 en temps réel
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 -
Il existe également une documentation sur l’utilisation de docker-compose.
Vous pouvez également construire le binaire pour les systèmes basés sur Debian dans un environnement conteneurisé isolé pour éviter d’encombrer votre système local avec les bibliothèques de développement :
$ 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
Vous pouvez en savoir plus sur l’utilisation de l’image Docker dans DOCKER.md.
GoAccess a des exigences minimales, il est écrit en C et nécessite seulement ncurses. Cependant, voici un tableau de quelques dépendances optionnelles dans certaines distributions pour construire GoAccess à partir des sources.
Remarque : Vous pouvez avoir besoin d’installer des outils de construction comme gcc, autoconf,
gettext, autopoint etc. pour compiler/construire des logiciels à partir des sources. par exemple,
base-devel, build-essential, "Development Tools".
Le stockage en mémoire offre de meilleures performances au prix de limiter la taille de l’ensemble de données à la quantité de mémoire physique disponible. GoAccess utilise des tables de hachage en mémoire. Il a une très bonne utilisation de la mémoire et de bonnes performances. Ce stockage prend également en charge la persistance sur disque.
Voir les options qui peuvent être fournies à la commande ou spécifiées dans le fichier de configuration. Si spécifié dans le fichier de configuration, les options longues doivent être utilisées sans préfixer --.
Remarque : Rediriger des données dans GoAccess ne provoquera pas de boîte de dialogue de configuration du journal/date/heure, vous devrez le définir au préalable dans votre fichier de configuration ou en ligne de commande.
Pour afficher dans un terminal et générer un rapport interactif :
# goaccess access.log
Pour générer un rapport HTML :
# goaccess access.log -a > report.html
Pour générer un fichier de rapport JSON :
# goaccess access.log -a -d -o report.json
Pour générer un rapport CSV vers stdout :
# goaccess access.log --no-csv-summary -o csv
GoAccess offre également une grande flexibilité pour le filtrage et l’analyse en temps réel. Par exemple, pour diagnostiquer rapidement des problèmes en surveillant les journaux depuis le lancement de goaccess :
# tail -f access.log | goaccess -
Et encore mieux, pour filtrer tout en maintenant un tube ouvert pour préserver l’analyse en temps réel, nous pouvons utiliser tail -f et un outil de correspondance de motifs tel que grep, awk, sed, etc. :
# tail -f access.log | grep -i --line-buffered 'firefox' | goaccess --log-format=COMBINED -
ou pour analyser depuis le début du fichier tout en maintenant le tube ouvert et en appliquant un filtre
# tail -f -n +0 access.log | grep -i --line-buffered 'firefox' | goaccess -o report.html --real-time-html -
Il existe plusieurs façons d’analyser plusieurs journaux avec GoAccess. La plus simple est de passer plusieurs fichiers de journal à la ligne de commande :
# goaccess access.log access.log.1
Il est même possible d’analyser des fichiers depuis un tube tout en lisant des fichiers ordinaires :
# cat access.log.2 | goaccess access.log access.log.1 -
Remarque : le tiret unique est ajouté à la ligne de commande pour indiquer à GoAccess qu’il doit lire depuis le tube.
Maintenant, si nous voulons ajouter plus de flexibilité à GoAccess, nous pouvons utiliser zcat --force pour lire les fichiers compressés et non compressés. Par exemple, si nous voulons traiter tous les fichiers de journal access.log*, nous pouvons faire :
# zcat --force access.log* | goaccess -
Remarque : Sur Mac OS X, utilisez gunzip -c au lieu de zcat.
Utilisez --jobs=<count> (ou -j) pour activer l’analyse multi-thread. Par exemple :
# goaccess access.log -o report.html -j 4
Et utilisez --chunk-size=<256-32768> pour ajuster la taille des blocs, la taille de bloc par défaut est 1024. Par exemple :
# goaccess access.log -o report.html -j 4 --chunk-size=8192
GoAccess a la capacité de produire des données en temps réel dans le rapport HTML. Vous pouvez même envoyer le fichier HTML par email car il est composé d’un seul fichier sans dépendances de fichiers externes, n’est-ce pas génial !
Le processus de génération d’un rapport HTML en temps réel est très similaire au processus de création d’un rapport statique. Seule l’option --real-time-html est nécessaire pour le rendre en temps réel.
# goaccess access.log -o /usr/share/nginx/html/votre_site/report.html --real-time-html
Pour visualiser le rapport, vous pouvez naviguer vers http://votre_site/report.html.
Par défaut, GoAccess utilisera le nom d’hôte du rapport généré. Optionnellement, vous pouvez spécifier l’URL à laquelle le navigateur du client se connectera. Voir FAQ pour un exemple plus détaillé.
# goaccess access.log -o report.html --real-time-html --ws-url=goaccess.io
Par défaut, GoAccess écoute sur le port 7890. Pour utiliser un port autre que 7890, vous pouvez le spécifier comme (assurez-vous que le port est ouvert) :
# goaccess access.log -o report.html --real-time-html --port=9870
Et pour lier le serveur WebSocket à une adresse différente de 0.0.0.0, vous pouvez le spécifier comme :
# goaccess access.log -o report.html --real-time-html --addr=127.0.0.1
Remarque : Pour produire des données en temps réel sur une connexion TLS/SSL, vous devez utiliser --ssl-cert=<cert.crt> et --ssl-key=<priv.key>.
Un autre tube utile serait de filtrer les dates du journal web
Ce qui suit obtiendra toutes les requêtes HTTP commençant le 05/Dec/2010 jusqu’à la fin du fichier.
# sed -n '/05\/Dec\/2010/,$ p' access.log | goaccess -a -
ou en utilisant des dates relatives comme le jour d’hier ou de demain :
# sed -n '/'$(date '+%d\/%b\/%Y' -d '1 week ago')'/,$ p' access.log | goaccess -a -
Si nous voulons analyser seulement une certaine période de DATE a à DATE b, nous pouvons faire :
# sed -n '/5\/Nov\/2010/,/5\/Dec\/2010/ p' access.log | goaccess -a -
Si nous voulons conserver seulement une certaine quantité de données et recycler le stockage, nous pouvons garder seulement un certain nombre de jours. Par exemple, pour conserver & afficher les 5 derniers jours :
# goaccess access.log --keep-last=5
En supposant que votre journal contienne le champ de l’hôte virtuel. Par exemple :
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"
Et vous souhaitez ajouter l’hôte virtuel à la requête afin de voir à quel hôte virtuel appartiennent les URLs principales :
awk '$8=$1$8' access.log | goaccess -a -
Pour faire la même chose, mais aussi utiliser le filtrage et l’analyse en temps réel :
tail -f access.log | unbuffer -p awk '$8=$1$8' | goaccess -a -
Pour exclure une liste d’hôtes virtuels, vous pouvez faire ce qui suit :
# grep -v "`cat exclude_vhost_list_file`" vhost_access.log | goaccess -
Pour analyser des pages spécifiques, par exemple, les pages vues, html, htm, php, etc. dans une requête :
# awk '$7~/\.html|\.htm|\.php/' access.log | goaccess -
Remarque : $7 est le champ de la requête pour le format de journal common et combined (sans hôte virtuel). Si votre journal inclut un hôte virtuel, vous voudrez probablement utiliser $8 à la place. Il est préférable de vérifier quel champ vous ciblez, par exemple :
# tail -10 access.log | awk '{print $8}'
Ou pour analyser un code d’état spécifique, par exemple, 500 (Erreur interne du serveur) :
# awk '$9~/500/' access.log | goaccess -
Ou plusieurs codes d’état, par exemple, tous les 3xx et 5xx :
# tail -f -n +0 access.log | awk '$9~/3[0-9]{2}|5[0-9]{2}/' | goaccess -o out.html -
Et pour obtenir un aperçu estimé du nombre de robots (crawlers) qui frappent votre serveur :
# tail -F -n +0 access.log | grep -i --line-buffered 'bot' | goaccess -
Aussi, il est utile de souligner que si nous voulons exécuter GoAccess à une priorité inférieure, nous pouvons le faire comme :
# nice -n 19 goaccess -f access.log -a
et si vous ne voulez pas l’installer sur votre serveur, vous pouvez toujours l’exécuter depuis votre machine locale !
# ssh -n root@server 'tail -f /var/log/apache2/access.log' | goaccess - --log-format=COMBINED
Remarque : SSH nécessite -n pour que GoAccess puisse lire depuis stdin. Assurez-vous également d’utiliser des clés SSH pour l’authentification car cela ne fonctionnera pas si une phrase de passe est nécessaire.
Nous recevons beaucoup de questions et de problèmes qui ont déjà été résolus précédemment.
GoAccess a la capacité de traiter les journaux de manière incrémentielle via son stockage interne et de vider ses données sur le disque. Cela fonctionne de la manière suivante :
--persist, puis le même ensemble de données peut être chargé avec.--restore. Si de nouvelles données sont passées (par tube ou via un fichier journal), il les ajoutera à l’ensemble de données original.GoAccess garde une trace des inodes de tous les fichiers traités (en supposant que les fichiers resteront sur la même partition), en plus, il extrait un extrait des données du journal ainsi que la dernière ligne analysée de chaque fichier et l’horodatage de la dernière ligne analysée. par exemple, inode:29627417|line:20012|ts:20171231235059
D’abord, il compare si l’extrait correspond au journal en cours d’analyse, si c’est le cas, il suppose que le journal n’a pas changé radicalement, par exemple, n’a pas été tronqué. Si l’inode ne correspond pas au fichier actuel, il analyse toutes les lignes. Si le fichier actuel correspond à l’inode, il lit alors les lignes restantes et met à jour le nombre de lignes analysées et l’horodatage. Par précaution supplémentaire, il n’analysera pas les lignes du journal avec un horodatage ≤ à celui stocké.
Les données en tube fonctionnent en fonction de l’horodatage de la dernière ligne lue. Par exemple, il analysera et ignorera toutes les entrées entrantes jusqu’à ce qu’il trouve un horodatage ≥ à celui stocké.
// journal d’accès du mois dernier
# goaccess access.log.1 --persist
puis, chargez-le avec
// ajoutez le journal d’accès de ce mois-ci, et conservez les nouvelles données
# goaccess access.log --restore --persist
Pour lire uniquement les données persistées (sans analyser de nouvelles données)
# goaccess --restore
Vous pouvez contribuer à nos traductions en modifiant les fichiers .po directement sur GitHub ou en utilisant l'interface visuelle inlang.com
Profitez-en !
Prise en charge Docker
Possibilité de construire l’image Docker de GoAccess depuis l’amont. Vous pouvez toujours le configurer entièrement en utilisant le mappage de volumes et en éditant goaccess.conf. Voir la section Docker ci-dessous. Il existe également une documentation sur l’utilisation de docker-compose.
| Distribution | 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 |