Analyser le trafic de votre serveur web avec GoAccess : Le guide du dev paresseux

Vous en avez marre de Google Analytics qui espionne vos visiteurs ? Vous voulez des vraies stats sans JavaScript qui plombe vos pages ? GoAccess est là pour vous sauver ! Cet outil open-source analyse directement vos logs Apache/Nginx et vous balance des statistiques de fou directement dans votre terminal (ou en HTML si vous préférez).

🔍 Qu’est-ce que GoAccess ?

GoAccess est un analyseur de logs web ultra-rapide qui transforme vos fichiers de logs en rapports visuels interactifs. C’est l’outil parfait pour les devs qui aiment avoir le contrôle total de leurs données.

✅ Pourquoi GoAccess va vous plaire ?

  • 🔒 Zero tracking : Vos données restent chez vous
  • ⚡ Performance brutale : Parse des millions de lignes en quelques secondes
  • 💰 Gratuit : Open-source, pas de vendor lock-in
  • 📊 Complet : Visiteurs, pages, OS, navigateurs, géoloc, tout y est
  • 🔄 Temps réel : Monitoring live de votre trafic
  • 🤓 Hackable : Configuration ultra-flexible

🚀 Installation sur Ubuntu

Installation express pour les pressés :

# Mise à jour du système
sudo apt update

# Installation de GoAccess et des outils nécessaires
sudo apt install goaccess gzip

# Vérification de l'installation
goaccess --version
zcat --version

Pour avoir la dernière version avec toutes les features de hipster :

# Ajout du dépôt officiel
echo "deb http://deb.goaccess.io/ $(lsb_release -cs) main" | sudo tee -a /etc/apt/sources.list.d/goaccess.list
wget -O - https://deb.goaccess.io/gnugpg.key | sudo apt-key add -

# Installation de la version récente
sudo apt update
sudo apt install goaccess

⚙️ Configuration

1. Édition du fichier de configuration

sudo nano /etc/goaccess/goaccess.conf

2. Configuration des formats obligatoires

Ajoutez ou modifiez ces lignes dans le fichier :

# 📅 Format de date et heure (OBLIGATOIRE)
time-format %H:%M:%S
date-format %d/%b/%Y

# 📊 Format de log Apache/Nginx (OBLIGATOIRE)
log-format %h %^ %^ [%d:%t %^] "%r" %s %O "%R" "%u"

3. Optimisations pour dev qui se respecte

# Ignorer les robots/crawlers (bye bye Googlebot)
ignore-crawlers true

# Afficher les vrais noms d'OS
real-os true

# Inclure méthodes et protocoles HTTP
http-method yes
http-protocol yes

# Désactiver les panneaux moins utiles
ignore-panel KEYPHRASES
ignore-panel REFERRERS

🎯 Commandes de base

Analyse simple et rapide

# Analyse d'un fichier de log
goaccess /var/log/apache2/access.log

# Avec tous les logs (actuels + archives)
sudo bash -c 'zcat /var/log/apache2/access.log.*.gz ; cat /var/log/apache2/access.log*' | goaccess -

📦 Note : La commande zcat fait partie du package gzip qui est normalement installé par défaut sur Ubuntu. Si elle n’est pas disponible, installez-la avec : sudo apt install gzip

Exemple concret : filtrer le traffic admin

Pour ceux qui utilisent… toussote… WordPress par flemme, voici comment exclure le bruit admin :

sudo bash -c 'zcat /var/log/apache2/access.log.*.gz ; cat /var/log/apache2/access.log /var/log/apache2/access.log.1' | grep -Ev "/wp-admin|/wp-login.php|/wp-cron.php|/xmlrpc.php" | sudo goaccess - --ignore-crawlers -ac

🔧 Décortiquons cette commande

PartieExplication
bash -cExécute plusieurs commandes dans un seul shell
zcat /var/log/apache2/access.log.*.gzLit les logs compressés (.gz) – nécessite le package gzip
cat /var/log/apache2/access.log*Lit les logs actuels et récents
grep -Ev "/wp-admin|/wp-login.php..."Exclut les pages d’administration (exemple avec WP)
goaccess -Analyse le flux de données
--ignore-crawlersIgnore les robots de référencement
-aActive la résolution DNS
-cForce l’affichage couleur

💡 Créer des alias pour les fainéants

Plutôt que de retaper ces commandes de bourrin, créons des alias :

# Éditer votre profil bash
nano ~/.bashrc

# Ajouter à la fin du fichier :
alias logstats='sudo bash -c "zcat /var/log/apache2/access.log.*.gz ; cat /var/log/apache2/access.log*" | sudo goaccess - --ignore-crawlers -ac'

alias webstats='goaccess /var/log/apache2/access.log --ignore-crawlers -ac'

# Recharger la configuration
source ~/.bashrc

Maintenant, tapez simplement logstats ou webstats pour lancer l’analyse ! 🎉

📈 Génération de rapports HTML

Rapport statique

# Générer un rapport HTML basique
goaccess /var/log/apache2/access.log --output=/var/www/html/stats.html

# Version complète avec tous les logs
sudo bash -c 'zcat /var/log/apache2/access.log.*.gz ; cat /var/log/apache2/access.log*' | sudo goaccess - --ignore-crawlers --output=/var/www/html/stats-complete.html

Monitoring temps réel (pour les show-off)

Pour un tableau de bord en temps réel qui impressionne les collègues :

# Lancement du serveur temps réel
sudo goaccess /var/log/apache2/access.log --real-time-html --output=/var/www/html/live-stats.html --addr=0.0.0.0 --port=7890

Accédez ensuite à http://votre-serveur.com/live-stats.html pour voir vos stats en direct !

🛡️ Sécurisation des rapports

⚠️ Important : Par défaut, vos rapports sont publics ! Sécurisez-les comme un vrai dev :

Option 1 : Protection par mot de passe Apache

# Créer un utilisateur
sudo htpasswd -c /etc/apache2/.htpasswd admin

# Créer le fichier .htaccess
sudo nano /var/www/html/.htaccess

Contenu du .htaccess :

AuthType Basic
AuthName "Stats privées - touche pas à ça"
AuthUserFile /etc/apache2/.htpasswd
Require valid-user

Option 2 : Restriction par IP (pour les paranos)

<RequireAll>
    Require ip 192.168.1
    Require ip 10.0.0
    Require ip votre.ip.publique
</RequireAll>

📊 Ce que vous obtiendrez

Avec GoAccess, vous aurez accès à :

  • 👥 Visiteurs uniques : Le vrai nombre, pas les bots
  • 📄 Pages les plus vues : Vos hits et vos flops
  • 🌍 Géolocalisation : D’où viennent les curieux
  • 📱 Appareils : Desktop vs mobile vs « WTF c’est quoi cet user-agent ? »
  • 🌐 Navigateurs : Chrome army vs Firefox rebels
  • ⏰ Heures de pointe : Quand vos visiteurs procrastinent
  • 📈 Tendances : L’évolution de votre traffic
  • 🚫 Erreurs 404 : Vos liens cassés à réparer

🔥 Techniques avancées

1. Analyser seulement certains patterns

# Analyser uniquement les API calls
cat /var/log/apache2/access.log | grep "/api/" | goaccess -

# Analyser les erreurs 404 (pour debugger)
cat /var/log/apache2/access.log | grep " 404 " | goaccess - --ignore-crawlers

2. Exclure votre propre IP (pour pas polluer les stats)

# Dans /etc/goaccess/goaccess.conf
exclude-ip 192.168.1.100
exclude-ip 203.0.113.0-203.0.113.255

3. Formats de logs alternatifs

# Pour Nginx
log-format %h %^[%d:%t %^] "%r" %s %b "%R" "%u"

# Pour des logs custom
log-format %h %^ %^ [%d:%t %^] "%r" %s %O "%R" "%u" %T

🎯 Script d’automatisation (pour les vrais lazy)

Créez un script pour automatiser la génération :

#!/bin/bash
# Fichier: /usr/local/bin/generate-stats.sh

LOG_FILES="/var/log/apache2/access.log*"
OUTPUT_DIR="/var/www/html/stats"
DATE=$(date +%Y-%m-%d)

# Créer le répertoire si nécessaire
mkdir -p $OUTPUT_DIR

# Générer le rapport du jour
sudo bash -c 'zcat /var/log/apache2/access.log.*.gz ; cat /var/log/apache2/access.log*' | \
sudo goaccess - --ignore-crawlers --output="$OUTPUT_DIR/rapport-$DATE.html"

echo "Rapport généré : $OUTPUT_DIR/rapport-$DATE.html"

# Nettoyer les anciens rapports (garder 30 jours)
find $OUTPUT_DIR -name "rapport-*.html" -mtime +30 -delete

Rendez-le exécutable et automatisez avec cron :

chmod +x /usr/local/bin/generate-stats.sh

# Ajouter au crontab (tous les jours à 6h, pour avoir les stats avec le café)
0 6 * * * /usr/local/bin/generate-stats.sh

🚨 Dépannage pour les moments de galère

Problème : « No valid data found »

Solution : Vos logs sont dans un format bizarre, testez différents formats :

# Voir le format de vos logs
head -5 /var/log/apache2/access.log

# Tester différents formats prédéfinis
goaccess --log-format=COMBINED /var/log/apache2/access.log
goaccess --log-format=COMMON /var/log/apache2/access.log
goaccess --log-format=VCOMBINED /var/log/apache2/access.log

Problème : Permission denied

# Vérifier les permissions
ls -la /var/log/apache2/

# Ajouter votre utilisateur au groupe adm
sudo usermod -a -G adm $USER

# Se reconnecter pour que ça prenne effet
newgrp adm

Problème : Logs qui tournent trop vite

# Configurer logrotate pour garder plus de logs
sudo nano /etc/logrotate.d/apache2

# Modifier pour garder 52 semaines au lieu de 14 jours
/var/log/apache2/*.log {
    weekly
    missingok
    rotate 52
    compress
    delaycompress
    notifempty
    create 644 root adm
    sharedscripts
    ...
}

🎉 Conclusion

GoAccess, c’est l’outil parfait pour les devs qui veulent des vraies stats sans bullshit. Pas de JavaScript à la con, pas de tracking, pas d’abonnement. Juste vos logs, un terminal, et des statistiques de qualité.

Le TL;DR :

  1. ✅ Installation : sudo apt install goaccess gzip
  2. ⚙️ Config des formats dans /etc/goaccess/goaccess.conf
  3. 🎯 Analyse avec goaccess /var/log/apache2/access.log
  4. 🛡️ Sécurisation des rapports
  5. 🔄 Automatisation avec des scripts et cron

Vous avez maintenant tout ce qu’il faut pour analyser votre traffic comme un chef ! 📊


💡 Pro tip : Combinez GoAccess avec tail -f pour du monitoring temps réel dans le terminal :

tail -f /var/log/apache2/access.log | goaccess -

Maintenant, arrêtez de procrastiner et allez analyser vos logs ! 🚀

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *