Cherchant un outil pour faire de l'analytics sur le blog sans pour autant alourdir ce dernier je me suis penché sur les solutions se basant sur les logs Apache / Nginx.

Mon choix s'est tourné vers goAccess, simple à installer, en GO, souvent synonyme de projet récent avec de bonnes perfomances, et fournissant le minimum dont j'avais besoin.

Par la même occasion j'ai décidé de rendre les statistics du blog public, vous pouvez donc en trouver une démonstration ici avant d'essayer.

Installation :

sudo apt-get install goaccess

Configuration :

vi /etc/goaccess.conf

Par défaut, le format est souvent classique :

######################################
# Time Format Options (required)
######################################

time-format %H:%M:%S

######################################
# Date Format Options (required)
######################################

date-format %d/%b/%Y

######################################
# Log Format Options (required)
######################################

# NCSA Combined Log Format
log-format %h %^[%d:%t %^] "%r" %s %b "%R" "%u"

à vous de creuser le sujet si besoin, notamment la partie Log format.

Test :

goaccess -f /var/log/apache2/SITEWEB/access.log -o /var/www/report.html'

Il vous suffit alors de visualiser la page report.html afin de vous faire une première idée de votre trafic.

Live & Production :

De notre côté nous avons opté pour l'option realTime de goAccess. Le passage en production a donc consisté à :

  • jouer un peu avec les options de goAccess
  • paramétrer un sous NDD et une nouvelle conf Apache/Nginx pour exposer le report live sur stats.weareopensource.me
  • sélectionner les informations publiques à afficher dans le report
Options :
goaccess -f /var/log/apache2/SITEWEB/access.log --ignore-crawlers --exclude-ip=MYIP --real-os --log-format=COMBINED -o /var/www/SITEWEB/index.html --real-time-html --daemonize

Pensez à bien remplacer "SITEWEB", "MYIP", et attention  à ouvrir le port nécessaire au RealTime, 7890 :

iptables -t filter -A OUTPUT -p tcp --dport 7890 -j ACCEPT
iptables -t filter -A INPUT -p tcp --dport 7890 -j ACCEPT
Sous NDD, exemple de configuration Apache :
<VirtualHost *:80>
    ServerAdmin pierrebrisorgueil@me.com
    ServerName stats.weareopensource.me
    ServerAlias www.stats.weareopensource.me
    DocumentRoot /var/www/weaos_blog_stats/
</VirtualHost>
Filtrer les informations à afficher afin d'obtenir notre report d'example :
goaccess -f /var/log/apache2/SITEWEB/access.log --ignore-crawlers --exclude-ip=MYIP --ignore-panel=REQUESTS_STATIC --ignore-panel=NOT_FOUND --ignore-panel=HOSTS --ignore-panel=VIRTUAL_HOSTS --ignore-panel=STATUS_CODES --ignore-panel=VISIT_TIMES --real-os --log-format=COMBINED -o /var/www/SITEWEB/index.html --real-time-html --daemonize
Astuce :

Pour ma part j'ai édité mon .zshrc afin d'y sauvegarder la commande sous un alias : @goAccess :)

alias @goAcces='ma commande'
Astuce 2 (edit 29/10/2018):

J'ai décidé de continuer a l'utiliser pour de bon, j'ai donc fait un fichier de configuration un peu plus clean (/etc/goaccess.conf), et ajouté letsencrypt / apache en reverse proxy :

log-file /var/logs/SITE/access.log
output-format /var/www/SITE/index.html
log-format %h %^[%d:%t %^] "%r" %s %b "%R" "%u"

time-format %H:%M:%S
date-format %d/%b/%Y

exclude-ip MYIP

log-format COMBINED

ignore-crawlers true
crawlers-only false

ignore-panel REQUESTS_STATIC
ignore-panel NOT_FOUND
ignore-panel HOSTS
ignore-panel VIRTUAL_HOSTS
ignore-panel STATUS_CODES
ignore-panel VISIT_TIMES

real-os true
real-time-html true
daemonize true

port 7890
origin https://SITE.com
ssl-cert /etc/letsencrypt/live/SITE/fullchain.pem
ssl-key /etc/letsencrypt/live/SITE/privkey.pem
ws-url wss://SITE:7890/ws/

Conclusion

De mon point de vue goAccess est très satisfaisant pour faire de l'analytics light. Il ne pas permettre de rentrer dans le détail, mais cela grace à lui nous pouvons nous faire une idée du trafic, ce qui est tout de même important. Je viens de me rendre compte que je devais peut-être faire plus attention à ma rédaction ;).

D'un point de vue installation et fonctionnement, c'est parfait. Il suffit de regarder le man et en quelques heures le test est bouclé.