--- author: "Colmaris" title: "Goaccess pour afficher la fréquentation de son site" date: 2025-02-16T12:18:42+01:00 description: "Jour 006/100 du défi 100DaysToOffLoad." tags: - goaccess - monittoring - 100DaysToOffload categories: - Adminsys toc: true --- J'ai toujours aimé avoir un retour statistiques des blogs ou autres sites internet que je publie. Lorsque j'utilisais Wordpress comme plateforme d'écriture, je me servais de Matomo. Aujourd'hui j'utilise hugo pour générer ce blog et je n'ai plus envie d'utiliser l'usine à gaz Matomo. Après quelques recherchent, j'ai découvert [Goaccess](https://goaces.io). Il offre la possibilité de visualiser depuis un portail Web ou en mode terminal le trafic HTTP entrant du serveur Web. Il a l'avantage d'être très simple à mettre en place et il est peu gourmand en ressources au contraire de Matomo. Au lieu d'analyser les cookies, il parcours les fichiers logs de notre serveur http comme Nginx, Apache etc ... Aimant la nouveauté je me suis lancé dans son installation et sa configuration. # Installation et prise en main L'installation sur debian est très simple, il est disponible depuis les dépôts offciels. ``` shell apt install goaccess ``` Pour l'utiliser en mode terminal il suffit d'exécuter la commande suivante : ```shell goaccess /var/log/nginx/access.log -c ``` Je suis arrivé sur cet écran, j'ai coché le premier choix. ```shell +---------------------------------------------------------------------+ | Configuration format des logs | | [SPACE] pour basculer - [ENTREE] pour procéder - [q] pour quitter | | | | [x] NCSA Combined Log Format | | [ ] NCSA Combined Log Format with Virtual Host | | [ ] Common Log Format (CLF) | | [ ] Common Log Format (CLF) with Virtual Host | | [ ] W3C | | [ ] CloudFront (Download Distribution) | | | | Format des logs - [c] pour ajouter/éditer le format | | %h %^[%d:%t %^] "%r" %s %b "%R" "%u" | | | | Format de la date - [d] pour ajouter/éditer le format | | %d/%b/%Y | | | | Format temporel - [t] pour ajouter/éditer le format | | %H:%M:%S | +---------------------------------------------------------------------+ ``` L'affichage de Goaccess se présente ensuite comme cela. ![terminal](/img/2025/goaccess/terminal-1.jpg) Pour utiliser la génération des pages web j'ai appliqué cette commande. ``` shell goaccess /var/log/nginx/colmaris-access.log -o /var/www/blog/webreport.html --log-format=COMBINED --real-time-html ``` `-o /var/www/blog/webreport.html`: Permet d'enregistrer la page html générée directement dans le Vhost du blog. `--log-format=COMBINED`: Affiche les logs combinés. `--real-time-html`: Affiche les données en temps réel. # Utilisation en production Pour l'utiliser en production je me suis fixeé ce cahier des charges : * Automatisation de l'exécution. * Utilisation depuis n'importe quel endroit. * Utiliser le reverse proxy pour le chiffrage SSL. * Activer l'authentification par mot de passe. ## Automatisation de l'exécution. Pour lancer à chaque démarrage Goaccess j'utilise le script systemd suivant : ```shell [Unit] Description=GoAccess analyse temps réel [Service] Type=simple ExecStart=/usr/bin/goaccess -f /var/log/nginx/colmaris-access.log -o /var/www/goaccess/colmaris-report.html --real-time-html ExecStop=/bin/kill ${MAINPID} PrivateTmp=false RestartSec=1800 User=root Group=root Restart=always [Install] WantedBy=multi-user.target ``` Le service `goaccess.service` s'occupe du démarrage automatique du soft qui enregistre la page web dans le dossier partagé par Nginx. J'active et lance le service : ```shell systemctl enable goaccess.service systemctl start goaccess.service root@nginx:/etc/goaccess# systemctl daemon-reload root@nginx:/etc/goaccess# systemctl restart goaccess.service root@nginx:/etc/goaccess# systemctl status goaccess.service ● goaccess.service - GoAccess analyse temps réel Loaded: loaded (/etc/systemd/system/goaccess.service; enabled; preset: enabled) Active: active (running) since Sun 2025-02-16 14:15:28 CET; 4s ago Main PID: 23613 (goaccess) Tasks: 3 (limit: 9147) Memory: 1.6M CPU: 4ms CGroup: /system.slice/goaccess.service └─23613 /usr/bin/goaccess -f /var/log/nginx/colmaris-access.log -o /var/www/goaccess/colmaris-report.html --real-time-html ``` ## Utilisation depuis n'importe quel endroit. J'utilise une configuration de Vhost Nginx spécifique pour accéder à la page depuis internet. Au passage j'en profite pour modifier le Vhost du blog afin d'idenfier correctement le fichier de log en ajoutant la ligne `access_log /var/log/nginx/colmaris-access.log;`. Je crée un fichier de configuration que j'appelle `goaccess.conf` dans `/etx/nginx/site-available/`: ``` shell server { listen 80; listen [::]:80; server_name mon-adresse.com; root /var/www/goaccess/; index index.html colmaris-report.html; location / { try_files $uri $uri/ =404; } } ``` Je vérifie : ``` shell nginx -t nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful ``` et j'active le Vhost pour goaccess : ``` shell cd /etc/nginx/site-enabled ln -s /etc/nginx/sites-available/goaccess.conf ``` ## Utiliser le reverse proxy pour le chiffrage SSL. J'ajoute l'hôte dans Nginx Proxy Manager. ## Activer l'authentification par mot de passe. J'utilise l'authentification HTTP basique de Nginx afin de ne pas exposer la page en public. Pour ajouter cette authentification j'utilise la méthode du fichier `.htpasswd`. ```shell apt install apache2-utils htpasswd -c /etc/nginx/.htpasswd utilisateur ``` Puis j'ajoute les lignes suivantes à mon `goaccess.conf` ``` shell server { listen 80; listen [::]:80; server_name mon-adresse.com; root /var/www/goaccess/; index index.html colmaris-report.html; location / { try_files $uri $uri/ =404; auth_basic "Zone securisee - Authentification requise"; auth_basic_user_file /etc/nginx/.htpasswd; } } ``` L'installation est terminée et fonctionne parfaitement. J'accède aux données depuis n'importe quel navigateur internet. ![web](/img/2025/goaccess/pageweb.jpg)