Statistiques web éthiques avec Goaccess

Divulgâchage : Ce n’est pas parce qu’on veut mesurer son audience qu’on doit forcément utiliser des méthodes intrusives et peu respectueuse des visiteurs. Aujourd’hui on vous montre une solution avec goaccess. Après l’avoir installé, on va vous montrer comment générer des rapports HTML à partir de vos logs.

Lorsqu’on tient un site web, une des premières question qu’on se pose est : combien ai-je de visiteurs ? Rapidement, la question se complexifie et tant qu’à faire, on voudrait aussi connaître la tendance, quelles pages sont les plus vues, d’où viennent mes visites,…

Pour répondre à ce genre de questions, les solutions ne manquent pas. La différence étant dans l’équilibre entre respect de la vie privée et précision des données. Plus vous voulez d’informations, plus la solution devra être intrusive (i.e. exécuter du Javascript chez les clients). Réciproquement, pour respecter vos visiteurs, les solutions devront utiliser le moins de données possibles.

Chez les arsouyes, comme vous le savez déjà, on est tatillons sur le respect de la vie privée et assez transparents sur nos méthodes. Dans nos précédents articles, vous avez vu comment nous récupérons nos logs d’accès web, puis comment nous les anonymisons. Aujourd’hui, nous abordons donc leur exploitation avec goaccess.

Tendance journalière avec goaccess.

Rapidement, il s’agit d’une application légère et en ligne de commande permettant de visualiser ses logs d’accès web. Elle est conçue initialement pour faire du temps réel mais, qui peut le plus peut le moins, permet quand même de visualiser ses logs après coup. Goaccess proposes une visualisation directement dans le terminal mais aussi via un navigateur web.

Installation

goaccess est disponible directement via vos distributions favorites mais, malheureusement, certaines fonctionnalités nécessitent une compilation. On va donc vous montrer comment faire les deux, vous pourrez donc aborder plus sereinement vos besoins.

Dans tous les cas, je commence toujours par une mise à jours des paquets. Même si on peut la faire automatiquement, je trouve que c’est plus propre et sûr pour commencer à travailler.

sudo apt-get update
sudo apt-get dist-upgrade

Depuis les distributions

D’après la documentation officielle, goaccess est déjà disponible dans les paquets de toutes les grandes distributions : Slackware, Debian/Ubuntu, Fedora, Gentoo et même les autres systèmes Unix comme OS X, FreeBSD ou même OpenBSD (c’est vous dire si du monde peu l’utiliser).

Personnellement, je n’ai testé et utilisé que sous Ubuntu :

sudo apt-get install goaccess

Comme cette version n’est pas à jour, vous pourriez préférer un dépôt spécifique. Ubuntu distribue la version 1.2 (de mars 2017) alors que la dernière version (1.3 de novembre 2018) a été publiée. Dans ce cas, vous devriez utiliser le dépôt de goaccess via les commandes suivantes :

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 -
sudo apt-get update
sudo apt-get install goaccess

Depuis le source

Comme je vous le disais, certaines fonctionnalités nécessitent une compilation pour être activées :

Même si j’aime beaucoup cette philosophie de produire des binaires simples et léger, devoir recompiler pour ajouter une petite option, c’est un peu dommage. J’aurais préféré une approche par module, dans le genre du serveur web apache2. D’un autre côté, je comprend que les développeurs aient autre chose à faire…

Pour compiler, vous allez avoir besoin de paquets spécifiques : le compilateur gcc et le moteur de production make.

sudo apt-get install gcc make

Vous pouvez alors télécharger la dernière version du code. L’archive tar.gz est disponible sur le site officiel ou sur github :

wget https://tar.goaccess.io/goaccess-1.3.tar.gz
tar -zxvf goaccess-1.3.tar.gz
cd goaccess-1.3

Maintenant que vous êtes dans le code source, vous pouvez lancer la compilation. Comme les développeurs sont des gens biens, ils ont utilisés les autotools. Vous n’avez donc rien à faire d’autre que les trois commandes classiques :

./configure --enable-utf8
make
sudo make install

Ici, j’ai activé le support d’UTF-8, ce qui m’évite une dépendance à ncurse. Sinon, vous aurez besoin d’installer le paquet libncursesw5-dev.

Géolocalisation

Si vous voulez géolocaliser vos visiteurs, c’est possible mais vous devez le spécifier lors de la configuration via l’option --enable-geoip qui peut prendre deux valeurs :

  1. legacy pour prendre en charge le premier format Geoip de Maxmind (des fichiers .dat),
  2. mmdb pour prendre en charge le nouveau format Geoip 2 de Maxmind (des fichires .mmdb).

Notez que si vous activez la géolocalisation, vous aurez besoin de la librairie spécifique – libgeoip-dev. De même l’UTF-8 ne suffira pas pour éviter ncurse que vous devrez donc installer aussi.

sudo apt-get install libncursesw5-dev libgeoip-dev
./configure --enable-utf8 --enable-geoip=legacy
make
sudo make install

Sauvegarde sur disque

Si vous voulez sauvegarder les données sur disque pour pouvoir, plus tard, ajouter de nouveau logs sans devoir tout recalculer, vous devez configurer via l’option --enable-tcb qui peut prendre les valeurs suivants :

  1. memhash pour stocker en mémoire,
  2. btree pour stocker sur disque.

Si vous êtes dans ce cas, voici la commande :

sudo apt-get install libncursesw5-dev
./configure --enable-utf8 --enable-tcb=btree
make
sudo make install

Notez que vous pouvez activer ce deux fonctionnalités en même temps, il suffit de mentionner toutes les options lors de la configuration.

Depuis github

Pour les plus fous d’entre vous, et parce que parfois on a besoin des toutes dernières mises à jours du code, tellement neuves qu’elles sont pas encore publiée, voici comment faire depuis le dépôt git.

Cette fois, quelques paquets supplémentaires sont nécessaires :

sudo apt-get install autoconf autopoint gcc make gettext

Si vous voulez la géolocalisation, les paquets libgeoip-dev et libncursesw5-dev sont ici aussi nécessaires.

Vous pouvez alors récupérer le code source via git :

git clone https://github.com/allinurl/goaccess.git
cd goaccess

La compilation demande une étape de plus, mais reste simple (merci les autotools) :

autoreconf -fiv
./configure --enable-utf8
make
sudo make install

Si vous voulez activer la géolocalisation ou le stockage des données sur disque, les options précédentes n’ont pas changé :

  • --enable-geoip=legacy pour la géolocalisation,
  • --enable-tcb=btree pour le stockage.

Utilisation

Pour commencer, vous pouvez lancer goaccess dans un terminal, si vous n’avez pas de particularité, ça devrait passer :

goaccess access.log -c

Cette commande ouvre le fichier de log access.log, vous demande le format des logs puis vous affiche les statistiques directement dans le terminal. Si de nouveaux logs sont ajoutés (genre vous ouvrez directement le fichier dans lequel apache2 écrit), ils seront pris en compte au fur et à mesure.

Exemple d’écran en mode console

Générer des rapports

Comme nous n’avons pas accès en temps réel à nos journaux, et aussi parce qu’on trouve que les rapports web sont un peu plus sympathiques que ceux dans le terminal, on préfère utiliser goaccess pour générer des rapports HTML.

Une fois les logs rapatriés dans un répertoire, on peut demander à goaccess de lire ces fichiers pour produire le rapport avec la commande suivante. Notez qu’ici, nous précisons le format des journaux.

goaccess *.log --log-format=COMBINED -o /var/www/html/index.html

Comme ces rapports sont globaux, plus vous avez de logs, moins vous pouvez lire les graphiques et les données. Avec goaccess, l’idée est de sélectionner les logs qui vous intéressent et générer autant de rapports spécifiques à vos questions.

Par exemple, si vous voulez voir la tendance des abonnements à votre flux RSS, vous pouvez d’abord filtrer sur les requêtes concernant votre fichier, puis laisser goaccess générer un rapport :

grep -h "GET /rss.xml " *.logs | goaccess --log-format=COMBINED -o /var/www/html/rss.html

Tourisme : L’option -h de grep est là pour qu’il n’affiche que le contenu du fichier correspondant, sans le préfixer par le nom du fichier. Sinon, goaccess ne comprendra pas ce qu’il reçoit sur son entrée standard.

Tendance des accès à notre flux RSS.

Personnaliser les rapports

Par défaut, goaccess vous affiche tout ce qu’il peut. C’est parfois gênant car même après avoir filtré les journaux, vous aimeriez simplifier l’affichage pour aller à l’essentiel.

Ignorer les robots. Vous pourriez bien sûr faire votre propre liste noire pour exclure les robots, mais c’est en fait déjà prévu dans goaccess et son option --ignore-crawlers.

Ignorer des panneaux. Certains n’étant pas toujours utiles (i.e. liste des fichiers lorsqu’on a déjà filtré dessus), vous pouvez demander à goaccess de ne pas les inclure dans le rapport via l’option –ignore-panel=<panel>. La liste est dans la page de manuel mais personnellement, je désactive souvent les suivants :

Géolocalisation. Si vous voulez utiliser vos propres fichiers, vous pouvez utiliser l’option --geoip-database=<fichier>.

Sauvegarde sur disque. Si vos fichiers sont volumineux, vous pourriez vouloir construire les rapports incrémentalement. En sauvegardant les données sur disque et en ajoutant les logs une fois par jours. Dans ce cas, trois options pourront vous être utiles :

  1. --keep-db-files pour sauvegarder les résultats à l’issue de ses calculs,
  2. --load-from-disk pour charger les résultats précédents avant de procéder à l’ajout des logs,
  3. --db-path=<dir> pour personnaliser le répertoire dans lequel goaccess sauvegardera ses résultats.

RGPD & Anonymisation

Si vous utilisez goaccess avec des logs récents pour déboguer un problème sur votre serveur, vous n’avez pas de précautions particulières à prendre. C’est un usage légitime de ces fichiers le RGPD n’a rien contre.

Par contre, si vous l’utilisez pour mesurer votre audience, vous devez anonymiser ces données. Pour ça, vous avez trois manières de procéder :

  1. Anonymiser les journaux, comme nous, ce qui vous évite des problèmes ou des questions épineuses si vous utilisez les données ensuite,
  2. Laisser goaccess anonymiser les adresses IP via l’option –anonymize-ip, notez que goaccess ne supprime que le dernier octet (alors que la CNIL préfère que vous en supprimiez deux),
  3. Ne pas afficher les adresses via l’option --ignore-panel=REMOTE_USER.

Bon à savoir : en anonymisant les adresses IP, le décompte des visiteurs sera de fait plus bas que la réalité puisque goaccess (et les autres outils) ne peuvent plus différencier les visiteurs d’un même réseau.

Et après ?

Récupérer ses logs d’accès Kimsufi Web

19 Mars 2020 Je ne sais pas ce que vous feriez sans vos logs d’accès web, alors pour vous aider, voici comment les récupéré chez OVH.

Anonymiser les adresses IP pour faire des statistiques

23 Mars 2020 Je ne sais pas vous, mais moi, j’adore faire des statistiques. Le problème, c’est lorsqu’on traite de données personnelles. Aujourd’hui, je vais vous expliquer pourquoi et comment anonymiser ces adresses.


Et si vous voulez géolocaliser en restant éthique, on vous conseille ces deux articles :

Créer sa base de GEOIP avec PHP et SQLite

2 Mars 2020 Après avoir vu la théorie, on s’attaque à la pratique : créer et utiliser notre propre base de géolocalisation des adresses IP à partir de données publiques sur Internet.

Géolocalisation, construire ses fichiers DAT et MMDB

14 Avril 2020 Parce que, parfois, on préfèrerait utiliser ses propres bases de géolocalisation, mais qu’il n’y pas vraiment d’outils tout prêts pour ça, les arsouyes vous partagent leurs scripts.