GoAccess

GoAccess

Les journaux du serveur web transformés en statistiques HTTP

GoAccess est un analyseur de logs web open source écrit en C. Il lit les journaux d'accès que le serveur écrit déjà et en tire des statistiques HTTP : visiteurs, pages demandées, codes de réponse, referers, navigateurs, bande passante, temps de service. Le résultat s'affiche dans le terminal, rafraîchi toutes les 200 ms, ou dans un rapport HTML que son serveur WebSocket intégré met à jour chaque seconde ; il sort aussi en JSON et en CSV. Rien n'est ajouté au site mesuré : ni script de suivi dans les pages, ni cookie chez le visiteur.

Le comparatif des outils d'analytics web auto-hébergés range GoAccess à part : il lit les logs du serveur et ne pose aucun script sur les pages.

Tout format de log, avec ncurses pour seule dépendance

  • Formats de logs : formats prédéfinis Combined (Apache, Nginx) et Common (Apache), avec ou sans hôte virtuel, W3C (IIS), Squid, JSON de Caddy, variante CLF de Traefik, CloudFront, S3, Elastic Load Balancing, Application Load Balancer et Google Cloud Storage. Tout autre format se décrit avec --log-format, JSON compris.
  • Une seule dépendance obligatoire : ncurses. GeoIP et OpenSSL sont optionnels.
  • Rapport HTML en un seul fichier : sans ressource externe, il s'envoie tel quel en pièce jointe.
  • Robots classés à part : depuis la 1.12, les robots d'IA et le trafic du Fédivers (ActivityPub) ont chacun leur catégorie, distincte des moteurs de recherche.
  • Campagnes UTM : un panneau ventile le trafic par source, support, campagne, contenu et terme, lus dans l'URL demandée.
  • Gros volumes : analyse multi-thread (--jobs) et traitement incrémental (--persist, --restore).

Logs archivés, suivi en direct par SSH, scanners repérés

  • Reprendre l'historique des logs archivés, fichiers compressés compris (zcat --force access.log* | goaccess -)
  • Suivre un serveur en direct depuis son poste sans rien y installer, via ssh -n et tail -f
  • Repérer scanners, tentatives de force brute et robots qui accaparent la bande passante

Aucun événement côté navigateur, public d'administrateurs système

Les logs ne voient que les requêtes. GoAccess lit ce que le serveur consigne pour chaque requête : adresse IP, date, URL, statut, taille, referer, user agent, temps de service. Ce qui se passe dans le navigateur sans requête vers le serveur lui échappe. Matomo, qui importe aussi des logs, en dresse la liste sur sa page Log Analytics : résolution d'écran, titres de page, événements, cartes de chaleur, enregistrements de session, analyse de formulaires. Chez Umami, les événements passent par le script inséré dans la page, via un attribut data-umami-event ou un appel umami.track().

Un visiteur, c'est une IP, une date et un user agent. C'est la définition de la page de manuel, robots compris par défaut (--ignore-crawlers les retire). Sans cookie, deux personnes derrière la même adresse avec la même chaîne user agent ne comptent que pour un.

L'anonymisation ne touche que le rapport. --anonymize-ip remet à zéro le dernier octet des adresses IPv4 (192.168.20.100 devient 192.168.20.0), et --anonymize-level monte jusqu'à 24 bits. Le code source calcule l'empreinte des visiteurs sur l'adresse complète et ne la masque qu'en sortie : le décompte n'y perd rien. Les fichiers de logs gardent ce que le serveur y écrit ; la vie privée se règle donc d'abord dans la configuration des logs du serveur.

Pensé pour l'exploitation. Le README s'adresse aux administrateurs système, aux équipes DevOps et aux spécialistes de la sécurité, et décrit GoAccess avant tout comme un outil de supervision en ligne de commande. Il tourne sur les systèmes de type Unix, et sous Windows via Cygwin ou le sous-système Linux. Les données tiennent en mémoire, dans la limite de la RAM physique : la FAQ cite environ 400 millions de requêtes (74 Go de logs) analysées en 1 h 20 pour quelque 12 Go de RAM.

Le rapport en temps réel ouvre un port. Le serveur WebSocket écoute sur le port 7890 de toutes les interfaces, sauf réglage de --addr. Sous une Content Security Policy, la FAQ demande 'unsafe-inline' et 'unsafe-eval' en script-src pour afficher le rapport HTML.

Des versions régulières. La 1.12 est sortie le 16 septembre 2026, cinquième version de l'année. Le README prévient que le paquet Debian ou Ubuntu de la distribution risque d'être en retard et renvoie au dépôt apt du projet.