Goaccess pour afficher la fréquentation de son site

󰃭 16-02-2025 (updated: 16-02-2025 )

Jour 003/100 du défi 100DaysToOffLoad.

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. 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.

apt install goaccess

Pour l’utiliser en mode terminal il suffit d’exécuter la commande suivante :

goaccess /var/log/nginx/access.log -c

Je suis arrivé sur cet écran, j’ai coché le premier choix.

    +---------------------------------------------------------------------+
    | 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

Pour utiliser la génération des pages web j’ai appliqué cette commande.

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 :

[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 :

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/:

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 :

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 :

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.

apt install apache2-utils
htpasswd -c /etc/nginx/.htpasswd utilisateur

Puis j’ajoute les lignes suivantes à mon goaccess.conf

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


Saisissez votre adresse d'instance