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.
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 :
- La géolocalisation,
- La sauvegarde des données sur disque.
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 :
legacy
pour prendre en charge le premier format Geoip de Maxmind (des fichiers.dat
),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 :
memhash
pour stocker en mémoire,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 :
autoconf
etautopoint
parce qu’on va devoir faire les premières étapes desautotools
nous même,gettext
pour l’internationalisation car l’outil a été partiellement traduit.
sudo apt-get install autoconf autopoint gcc make gettext
Si vous voulez la géolocalisation, les paquets
libgeoip-dev
etlibncursesw5-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.
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.
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 :
REQUESTS
,REQUESTS_STATIC
etNOT_FOUND
lorsque je filtre sur les URLs,OS
etBROWSERS
sauf lorsque je cherche si une fonctionnalitéCSS
ouJS
est gérée,REMOTE_USER
parce que ça ne m’intéresse pas,KEYPHRASES
parce que la plupart des moteurs ne le renseignent plus.
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 :
--keep-db-files
pour sauvegarder les résultats à l’issue de ses calculs,--load-from-disk
pour charger les résultats précédents avant de procéder à l’ajout des logs,--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 :
- Anonymiser les journaux, comme nous, ce qui vous évite des problèmes ou des questions épineuses si vous utilisez les données ensuite,
- 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), - 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.