GoAccess : Transformez vos logs web en tableaux de bord interactifs
Oubliez les scripts awk complexes et les logs statiques illisibles. GoAccess est l'outil d'analyse de journaux web open source qui convertit instantanément vos fichiers de logs Nginx, Apache ou Traefik en rapports visuels interactifs, directement dans votre terminal ou via un rapport HTML dynamique.
En bref
- Rendition instantanée : Analyse les logs en temps réel avec une interface terminal (TUI) ou un rapport HTML statique.
- Polyvalence log : Supporte nativement les formats Common Log Format (CLF), Combined Log Format (CLF+) et les formats spécifiques de Nginx, Apache, HAProxy et Traefik.
- Métriques avancées : Traque les codes HTTP, les temps de réponse, les URL, les referrers, les agents utilisateurs et les pays d'origine des requêtes.
- Export flexible : Génération de rapports HTML autonomes (sans dépendance JS externe lourde) ou affichage en mode tableau dans le terminal.
- Intégration CI/CD : Idéal pour les consultants IT pour auditer la sécurité, optimiser les performances et identifier les anomalies de trafic sans installer d'agent lourd sur le serveur.
Architecture et installation
GoAccess est conçu pour être léger et portable. Contrairement aux solutions SaaS de monitoring web, il ne nécessite pas de base de données ni de serveur applicatif. C'est un binaire compilé (souvent en Go ou en C selon la version) qui lit les fichiers texte.
Pour un consultant IT, la rapidité de déploiement est cruciale. Voici les méthodes d'installation les plus courantes sur les distributions Linux modernes (Debian/Ubuntu, RHEL/CentOS) et via Docker.
Installation via le gestionnaire de paquets
Sur Debian/Ubuntu :
sudo apt update
sudo apt install goaccess
Sur RHEL/CentOS/AlmaLinux (via EPEL) :
sudo dnf install epel-release
sudo dnf install goaccess
Installation via Docker (Recommandé pour l'audit distant)
Si vous n'avez pas les droits root sur le serveur cible mais que vous avez accès au volume de logs, l'approche Docker est la plus propre. Elle isole l'outil de l'environnement de production.
# Dockerfile simple pour GoAccess
FROM alpine:3.19
RUN apk add --no-cache goaccess
ENTRYPOINT ["goaccess"]
Lancement avec le mapping du log Nginx :
docker run --rm -it \
-v /var/log/nginx:/logs \
ghcr.io/allin/goaccess:latest \
/logs/access.log --log-format=COMBINED
Note technique : Assurez-vous que le format de log (
--log-format) correspond strictement à la configuration de votre serveur. Un décalage de champs rendra l'analyse incohérente.
Configuration avancée et formats de log
Le point d'échec le plus fréquent avec GoAccess est la mauvaise interprétation du format de log. Par défaut, GoAccess attend le Combined Log Format. Cependant, les configurations Nginx ou Traefik personnalisées peuvent différer.
Adapter le format de log
Si votre log Nginx ressemble à ceci :
$remote_addr - $remote_user [$time_local] "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent"
Vous pouvez définir un format personnalisé dans un fichier de configuration goaccess.conf ou via la ligne de commande :
goaccess access.log \
--log-format='%h %l %u %t "%r" %>s %b "%i" "%a"'
Les codes de formatage principaux :
%h: Adresse IP%t: Date/Heure%r: Requête (Méthode URL Protocole)%>s: Code de statut final%b: Taille du corps de la réponse%i: Referer%a: User-Agent
Filtrage et exclusion
En tant que consultant, vous devez souvent exclure le trafic interne (health checks, balayeurs de sécurité) pour avoir une vision claire du trafic utilisateur réel.
goaccess access.log \
--exclude-ip=192.168.1.0/24 \
--exclude-ip=10.0.0.0/8 \
--exclude-agent='Mozilla/5.0 (compatible; Googlebot/2.1)'
Vous pouvez aussi filtrer par URL pour isoler un endpoint spécifique :
goaccess access.log --ignore-urls=/api/health /api/metrics
Génération de rapports HTML interactifs
Le véritable atout de GoAccess est sa capacité à générer un rapport HTML autonome. Contrairement à des solutions comme Matomo ou Google Analytics, ce fichier HTML ne nécessite pas de backend. Il contient les données chiffrées/compressées dans le fichier lui-même. C'est parfait pour envoyer un rapport à un client ou l'archiver dans un ticket de support.
Commande de génération
goaccess access.log \
--log-format=COMBINED \
--date-format=%d/%b/%Y:%H:%M:%S \
--date-format=%Y-%m-%d \
--html-report-report.html \
--no-query-string \
--canonical-domain=https://example.com
Détails des flags clés :
--html-report-report.html: Nom du fichier de sortie.--no-query-string: Supprime les paramètres?id=123pour regrouper les URLs similaires (évite la fragmentation des statistiques).--canonical-domain: Force le domaine affiché dans les URL, utile si le log ne contient pas le nom d'hôte complet.--show-custom-headers: Permet d'afficher des en-têtes HTTP personnalisés si vous les avez ajoutés dans le log.
Personnalisation du rapport HTML
Vous pouvez modifier le CSS et le titre du rapport via le fichier de configuration goaccess.conf ou en créant un fichier HTML de template. Pour un rendu plus professionnel, voici un extrait de configuration pour modifier la couleur du thème et le titre :
# goaccess.conf
html-title = Rapport de Trafic Web - [Nom du Client]
html-css = /opt/goaccess/custom.css
html-favicon = /opt/goaccess/favicon.ico
Le rapport généré inclut automatiquement :
- Visiteurs uniques vs requêtes totales.
- Répartition par statut HTTP (2xx, 3xx, 4xx, 5xx) avec un graphique en anneau.
- Top 10 des URLs les plus visitées.
- Top 10 des Referrers (sources de trafic).
- Top 10 des User-Agents (navigateurs/OS).
- Géolocalisation (si vous utilisez un plugin de base de données IP comme MaxMind, sinon estimation par ASN).
Analyse en temps réel et monitoring
Pour les incidents de production ou l'analyse de pic de charge, le mode terminal est imbattable. Il met à jour les statistiques en direct au fur et à mesure que les lignes s'écrivent dans le log.
Lancement en mode temps réel
tail -f /var/log/nginx/access.log | goaccess --log-format=COMBINED
Navigation dans l'interface TUI :
- Fleches Gauche/Droite : Naviguer entre les différentes sections (URLs, IPs, Agents, etc.).
- Fleches Haut/Bas : Déplacer la sélection dans la liste.
- Entrée : Filtrer la vue par l'élément sélectionné (ex: cliquer sur une IP pour voir uniquement le trafic de cette IP).
- Ctrl+C : Quitter.
Ce mode permet de diagnostiquer rapidement une attaque DDoS (pic anormal d'IPs uniques) ou une erreur 502 récurrente sur un endpoint spécifique.
Bonnes pratiques pour consultants IT
1. Toujours vérifier l'horodatage
Les logs Nginx sont souvent en UTC. Si votre rapport HTML affiche des heures décalées, vérifiez le fuseau horaire système du serveur ou utilisez l'option --localtime avec le bon fuseau :
goaccess access.log --localtime --timezone=Europe/Paris
2. Sécurité des rapports HTML
Le rapport HTML contient des données de trafic. Ne le publiez jamais sur un serveur web public sans protection. Il peut révéler des structures d'URL sensibles (ex: /admin/user/123) ou des failles de sécurité tentées (codes 404/403 sur des endpoints admin).
- Action : Chiffrez l'archive ou restreignez l'accès via HTTP Basic Auth si vous devez le partager via un lien web.
3. Automatisation avec Cron
Pour générer un rapport quotidien à 08h00 et l'envoyer par email :
# /etc/cron.d/goaccess-report
0 8 * * * root goaccess /var/log/nginx/access.log --html-report-report.html --no-query-string && mail -s "Rapport Web Journalier" client@example.com < /var/log/nginx/report.html
4. Gestion des logs compressés
GoAccess peut lire directement les fichiers .gz ou .zip. C'est essentiel pour analyser les logs historiques sans les décompresser manuellement (économie de disque).
goaccess /var/log/nginx/access.log.1.gz --log-format=COMBINED
5. Corrélation avec les erreurs
Utilisez le filtre de statut pour isoler uniquement les erreurs 5xx et identifier les endpoints défaillants :
goaccess access.log --filter-status=500-599
Points cles
GoAccess n'est pas un outil de monitoring en continu au sens de Prometheus ou Zabbix. C'est un outil d'analyse post-mortem et de diagnostic instantané.
Pour un consultant IT, sa valeur réside dans sa capacité à :
- Auditer la sécurité : Identifier les scanners de ports (beaucoup de 404/405 rapides), les bots malveillants ou les tentatives d'injection.
- Optimiser les performances : Repérer les endpoints lents (si le log contient le temps de réponse) ou les ressources statiques mal servies.
- Facturer avec des preuves : Fournir un rapport HTML propre et visuel au client pour justifier une refonte, une mise à jour de cache ou une augmentation de la bande passante.
C'est un outil léger, sans dépendance, qui s'intègre parfaitement dans les environnements hétérogènes (Nginx, Apache, HAProxy, Traefik) et qui transforme des gigaoctets de texte brut en insights actionnables en moins de deux minutes.
Source : IT Connect