GoAccess : analyser le trafic réel sans Google Analytics

Si vous gérez un site web hébergé sur votre propre serveur (comme un VPS), il est essentiel de savoir exactement combien de visiteurs vous recevez chaque jour et à quelles heures. C’est crucial pour évaluer l’optimisation du site en comparant le trafic avec la charge sur le serveur. Ça permet aussi de prévoir quand votre hardware arrive à ses limites. De plus, si vous monétisez votre trafic, les statistiques sont indispensables. Et puis, c’est tout simplement intéressant de savoir qui visite votre site et ce qu’ils regardent.

La solution classique est évidemment Google Analytics. Par contre, avec l’utilisation massive des AdBlocks et des navigateurs sécurisés comme Brave, la différence peut être énorme. Dans mon cas, les chiffres varient presque d’un facteur dix ! Une des solutions est d’utiliser GoAccess : un analyseur de logs interactif pour serveurs web (Nginx/Apache) qui fonctionne en temps réel. Contrairement à Google Analytics, il travaille directement avec le fichier access.log sur le serveur.

GoAccess offre la possibilité de générer un rapport sous forme de page web, mais ce n’est pas l’idéal côté sécurité (on ne veut pas que n’importe qui puisse voir les adresses IP et les habitudes de navigation). Je vais donc vous montrer comment afficher toutes les infos directement dans la console.

Pour des raisons de sécurité, je ne vais pas afficher les statistiques complètes sur les captures d’écran. Notez aussi que tous les exemples sont basés sur une setup Nginx.

Alors, on se prépare un café ou un thé et on commence !

On suppose que vous avez déjà un serveur web LEMP fonctionnel et un accès SSH.

Installation et configuration de GeoIP

On commence par se connecter au serveur via SSH pour installer les outils nécessaires :

On met à jour les packages et on installe GoAccess

sudo apt update && sudo apt install goaccess -y

On crée un dossier pour la base de données des pays (pour voir d’où viennent les visiteurs)

mkdir -p ~/.geoip 
wget -P ~/.geoip https://git.io/GeoLite2-City.mmdb

Options d’utilisation principales

Dès que GoAccess est installé, on peut l’utiliser immédiatement puisqu’il récupère les infos directement du fichier access.log. Voici les différentes options :

Monitoring interactif (Real-time)

Cette commande ouvre un dashboard “live” directement dans le terminal. GoAccess lit le fichier access.log et affiche instantanément les statistiques.

goaccess /var/log/nginx/access.log --log-format=COMBINED --geoip-database=/root/.geoip/GeoLite2-City.mmdb

Note : Ici, on utilise $HOME pour que le chemin soit correct, peu importe votre utilisateur. Si vous êtes connecté en tant que root, cela correspondra à /root/.geoip/, et pour un utilisateur standard, ce sera

home/nom_user/.geoip/

 

Analyse des logs archivés

Nginx compresse les anciens logs en format .gz. Pour consulter les statistiques sur toute la période disponible (généralement 14 jours de rotation), on utilise la commande zcat :

zcat -f /var/log/nginx/access.log* | goaccess --log-format=COMBINED --geoip-database=/root//.geoip/GeoLite2-City.mmdb

 

Filtrer les bots et le “garbage”

Les statistiques incluant les bots ont tendance à être un peu trop « optimistes ». On va donc filtrer Googlebot, Bing et les autres pour voir le trafic réel des humains pour la journée d’hier.

Rapport du 04/Mar/2026 sans les bots (N’oubliez pas de changer la date pour la vôtre)

sudo grep "04/Mar/2026" /var/log/nginx/access.log.1 | grep -vE "Googlebot|Bingbot|YandexBot|Applebot|AhrefsBot|SemrushBot|DotBot|PetalBot|MJ12bot|crawler|spider|Lighthouse|UptimeRobot" | goaccess --log-format=COMBINED -

 

Voici la commande pour ne voir que les utilisateurs qui ont réellement reçu du contenu (code 200) pour la journée du 04/Mar/2026 :

sudo grep "04/Mar/2026" /var/log/nginx/access.log.1 | grep " 200 " | grep -vE "Googlebot|Bingbot|YandexBot|Applebot|AhrefsBot|SemrushBot|DotBot|PetalBot|MJ12bot|MegaIndex|crawler|spider|slurp|Lighthouse|UptimeRobot|GuzzleHttp|python-requests|Go-http-client|curl|Wget" | goaccess --log-format=COMBINED -

 

grep ” 200 “ : On filtre uniquement les requêtes réussies. Ça permet d’éliminer les erreurs 404 (souvent des bots qui cherchent des failles) et les redirections, pour ne garder que ceux qui ont vraiment chargé votre contenu.
grep -vE “…” : On retire le trafic inutile (garbage). C’est crucial parce que GoAccess compte par défaut les bots comme des visiteurs uniques, ce qui fausse complètement la réalité.
$(date +”%d/%b/%Y”) : Ce petit bout de code rend votre commande universelle — vous pouvez simplement la copier-coller et elle affichera toujours les données pour la journée en cours.

Statistiques de ceux qui ont réellement reçu du contenu (code 200) pour aujourd’hui

On utilise la commande date pour éviter d’avoir à taper la date manuellement chaque jour. Elle va insérer automatiquement la date actuelle au format jour/mois/année.

sudo grep "$(date +"%d/%b/%Y")" /var/log/nginx/access.log | grep " 200 " | grep -vE "Googlebot|Bingbot|YandexBot|Applebot|AhrefsBot|SemrushBot|DotBot|PetalBot|MJ12bot|MegaIndex|crawler|spider|slurp|Lighthouse|UptimeRobot|GuzzleHttp|python-requests|Go-http-client|curl|Wget" | goaccess --log-format=COMBINED -

 

Navigation dans l’interface (Raccourcis clavier)

Pour naviguer facilement, on peut utiliser ces raccourcis clavier :
TAB : Passer à la section suivante (le panneau suivant).
Les flèches : Faire défiler la liste à l’intérieur de la section choisie.
Enter : Afficher la section en plein écran (pratique pour voir tous les IP ou les pays).
0-9 : Aller rapidement à une section spécifique (1 – Visitors, 2 – URLs, 4 – 404s, 5 – IPs).
s : Trier les données dans le panneau actuel.
q : Quitter. Ça ferme le programme instantanément et libère la mémoire.

 

Comment lire les métriques

Unique Visitors : GoAccess montre le trafic HTTP réel, tandis que Google Analytics estime les utilisateurs.
Requested Files (URLs) : Portez attention à /feed/. Si vous voyez des centaines de hits, c’est que votre site est suivi activement via des lecteurs RSS.
Not Found URLs (404) : Si vous voyez des requêtes vers wp-login.php ou .env, ce sont des bots qui cherchent des failles. S’ils tombent sur une erreur 404, tout est correct.
Geo Location : Grâce à la base .mmdb, vous pourrez voir les drapeaux des pays de vos visiteurs dans le panneau détaillé.

Conseils de sécurité

Ne générez pas de rapports HTML sur le serveur pour éviter d’exposer des données sensibles sur le web (par exemple, à l’adresse monsite.com/report.html). Si jamais vous créez un fichier HTML par erreur, supprimez-le avec la commande : rm ~/nom_du_fichier.html. L’utilisation du mode console via SSH reste la meilleure protection.

Et voilà ! Vous savez maintenant tout sur le trafic de votre site !

Bonne chance!

Ce tutoriel vous a fait gagner du temps ?
Si vous souhaitez soutenir mon travail et l'hébergement du site, vous pouvez m'offrir un café. C'est grâce à votre soutien que je continue à partager ces guides !

Offrir un café