Le but de cet article est d'importer automatiquement les logs NGINX de la veille chaque jour dans Matomo pour avoir un suivi d'activité correct sans tracking JS sur les sites web.
Il est important de comprendre le découpage et le fonctionnement du système :
Vous devrez évidemment adapter la procédure ci-dessous à vos sites.
Modifiez d'abord le fichier de logrotate de NGINX (ou créez-le) :
nano /etc/logrotate.d/nginx
Notez bien les droits en 744 qui permettent au groupe www-data de lire les fichiers de log.
/var/log/nginx/*.log {
daily
missingok
rotate 14
compress
delaycompress
notifempty
create 0744 www-data adm
sharedscripts
prerotate
if [ -d /etc/logrotate.d/httpd-prerotate ]; then \
run-parts /etc/logrotate.d/httpd-prerotate; \
fi \
endscript
postrotate
invoke-rc.d nginx rotate >/dev/null 2>&1
endscript
}
Modifiez maintenant la configuration de cron pour que cron.daily se lance à minuit (et que la rotation des logs nginx se fasse chaque jour à minuit) :
nano /etc/crontab
Modifiez uniquement la ligne suivante :
0 0 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
Connectez-vous avec l'utilisateur matomo :
su matomo
Créez le script :
nano /home/matomo/import-log.sh
Dedans, vous allez faire une ligne par site, par exemple :
Vous aurez besoin d'une clé d'API.
Vous pouvez générer cette dernière depuis les paramètres de sécurité de votre utilisateur.
Notez que nous utilisons le log de la veille (log.1)
python3 /var/www/matomo/misc/log-analytics/import_logs.py --recorders=2 --url="https://stats.your.matomo/" --token-auth=matomo_api_token --idsite="1" /var/log/nginx/abyssproject.net.log.1 --exclude-path=*/feed/*
python3 /var/www/matomo/misc/log-analytics/import_logs.py --recorders=2 --url="https://stats.your.matomo/" --token-matomo_api_token --idsite="2" /var/log/nginx/nicolas-simond.ch.log.1
python3 /var/www/matomo/misc/log-analytics/import_logs.py --recorders=2 --url="https://stats.your.matomo/" --token-auth=matomo_api_token --idsite="3" /var/log/nginx/wiki.abyssproject.net.log.1 --exclude-path=*/graphql*
CONCURRENT_ARCHIVERS=3
for i in $(seq 1 $CONCURRENT_ARCHIVERS)
do
(sleep $i && /var/www/matomo/console core:archive & )
done
- Le paramètre --recorders=2 indique qu'on traite le fichier de logs avec deux processus en parralèle.
- Remplacez stats.your.matomo par l'URL de votre instance Matomo
- Le premier site est un site Wordpress, on exclue ici l'URL /feed/ qui est visité par les robots pour le flux RSS.
- Le deuxième site est un GRAV, sans exclusion spécifique
- Le 3ème site est le wiki que vous lisez actuellement, on enlève les statistiques sur l'API publique.
- La dernière partie lance le traitement forcé des statistiques par Matomo, remplacez le chiffre 3 par le nombre de sites que vous avez.
Rendez-le exécutable :
chmod +x /home/matomo/import-log.sh
Ouvrez votre crontab :
crontab -e
Ajoutez les lignes suivantes :
20 0 * * * /home/matomo/import-log.sh > /home/matomo/daily-matomo-import.log
30 * * * * /var/www/matomo/console --matomo-domain=stats.nicolas-simond.ch core:archive > /home/matomo/hourly-matomo-import.log
Cela permettra d'avoir l'import qui se fait chaque matin à 00H20.
Ensuite, l'archivage tournera toute la journée pour que les rapports disposent des dernières données.