« Matomo » : différence entre les versions
Ligne 320 : | Ligne 320 : | ||
server { | server { | ||
server_name matomo.localserver; | server_name matomo.localserver; | ||
listen | listen 80; | ||
# Redirect all HTTP requests to HTTPS with a 301 Moved Permanently response. | |||
location / { | |||
return 301 https://$host$request_uri; | |||
} | |||
} | |||
server { | |||
server_name matomo.localserver; | |||
listen 443 ssl http2; | |||
root /var/www/matomo; | root /var/www/matomo; | ||
index index.php; | index index.php; | ||
ssl_certificate /etc/letsencrypt/live/matomo.example.com/fullchain.pem; | |||
ssl_certificate_key /etc/letsencrypt/live/matomo.example.com/privkey.pem; | |||
add_header Referrer-Policy origin always; # make sure outgoing links don't show the URL to the Matomo instance | add_header Referrer-Policy origin always; # make sure outgoing links don't show the URL to the Matomo instance |
Version du 21 novembre 2023 à 20:48
Présentation
Piwik est un programme d'analyse statistique pour site web.
Mise à jour
Piwik's One Click update
chown -R http:http /usr/share/webapps/piwik
# mise à jour
chown -R root:root /usr/share/webapps/piwik
chown -R http:http /usr/share/webapps/piwik/tmp
chown http:http /usr/share/webapps/piwik/config/config.ini.php
chown http:http /usr/share/webapps/piwik/piwik.js
# si besoin, maj de la bdd
php /usr/share/webapps/piwik/console core:update
|
Désactiver le tracking
config/config.ini.php |
; disable Piwik Tracking
[Tracker]
record_statistics = 0
|
Faire une sauvegarde du fichier de configuration
« config/config.ini.php »
MAJ des fichiers
![]() |
N'oublier pas de restaurer le fichier de configuration « config/config.ini.php ». Mais ne réactivez pas encore le tracking. |
FTP
Télécharger la nouvelle version de PIWIK et l'envoyer sur le FTP en remplaçant les anciens fichiers.
![]() |
Veiller à ce que le transfert FTP se fasse en mode BINAIRE. |
SSH
wget http://builds.piwik.org/latest.zip # download latest version
cd /srv/http # se rendre là où se trouve le dossier piwik
7z x latest.zip # extraire l'archive
rm latest.zip How\ to\ install\ Piwik.html # supprimer l'archive et le fichier d'aide
|
MAJ de la base de données
Aller sur la page d'accueil de votre PIWIK, un lien vous permettant de mettre à jour la BdD sera disponible.
![]() |
N'oublier pas de réactiver le tracking. |
# en ligne de commande
php /usr/share/webapps/piwik/console core:update
|
Configuration
Support Do Not Track preference
Settings → Privacy → Support Do Not Track preference
Exclure des IPs
Settings → Websites → Global list of Excluded IPs
Version
Le fichier « piwik/core/Version.php » contient la version de piwik.
Utiliser les fichiers de log au lieu du tracker javascript
![]() |
Installer Python 2.6 ou 2.7, mais pas 3.x |
python2 /usr/share/webapps/piwik/misc/log-analytics/import_logs.py \
--url=http://piwik \
--idsite 1 \
/var/log/nginx/access.log \
--log-format-name ncsa_extended \
--recorders=4
# archivage quotidien
/usr/share/webapps/piwik/console core:archive --url='http://piwik'
# archivage et recalcule de tous les rapports historiques
/usr/share/webapps/piwik/console core:archive \
--force-all-websites \
--force-all-periods=315576000 \
--force-date-last-n=1000 \
--url='http://piwik'
# utiliser l'utilisateur « http »
su -c "/usr/bin/php /usr/share/webapps/piwik/console core:archive --url=http://piwik" http
# « php-gd » doit être installé
|
url | url de piwik |
idsite | dans le cas où hostname n’apparaît pas dans le log, il faut spécifier l'id du site |
log-format-name | spécifie le format du log: common, common_vhost, ncsa_extended, common_complete, ... s'il n'est pas spécifié tous sont essayés |
recorders | nombre de cpu à utiliser |
show-progress | affiche le nombre de lignes traitées en temps réel |
--debug --debug | liste les lignes invalides |
dry-run | aucune donnée n'est ajoutée à piwik |
skip=N | passe les N première ligne du fichier de log |
enable-http-errors | traite les erreurs HTTP (status code 4xx et 5xx) |
enable-http-redirects | traite les redirections HTTP (status code 3xx sauf 304) |
exclude-path=/url | ignore l'url |
ERROR CoreConsole Got invalid response from API request
/etc/php/php.ini |
extension=curl.so
|
Format du log
Regex piwik _NCSA_EXTENDED_LOG_FORMAT | Log Nginx combined | Exemple de log Nginx combined |
---|---|---|
ip | $remote_addr | x.x.x.x |
userid | $remote_user | - |
date | $time_local | 1/Apr/2016:00:00:00 |
timezone | $time_local | +0200 |
path | $request | /page.php |
status | $status | 200 |
length | $body_bytes_sent | 10000 |
referrer | $http_referer | - |
user_agent | $http_user_agent | Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html) |
Regex piwik _NCSA_EXTENDED_LOG_FORMAT (?P<ip>\S+)\s+\S+\s+(?P<userid>\S+)\s+\[(?P<date>.*?)\s+(?P<timezone>.*?)\]\s+"\S+\s+(?P<path>.*?)\s+\S+"\s+(?P<status>\S+)\s+(?P<length>\S+)\s+"(?P<referrer>.*?)"\s+"(?P<user_agent>.*?)" Log Nginx combined $remote_addr - $remote_user [$time_local] "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent" Exemple de log Nginx combined x.x.x.x - - [1/Apr/2016:00:00:00 +0200] "GET /page.php HTTP/1.1" 200 10000 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)"
logrotate
/etc/nginx/nginx.conf |
# Créer un log journalier dans nginx
access_log /var/log/nginx/mediawiki_access_daily.piwik;
|
/etc/logrotate.d/nginx |
/var/log/nginx/mediawiki_access_daily.piwik {
# archive le log tous les jours à 00h00
daily
# conserve 7 archives
rotate 7
# ajoute la date aux noms des archives
dateext
# format par défaut de la date: -%Y%m%d
dateformat -%Y-%m-%d
# ajoute la date avant l'extension
extension .piwik
missingok
create 640 http log
su http log
compress
postrotate
test ! -r /run/nginx.pid || kill -USR1 `cat /run/nginx.pid`
endscript
}
|
crontab |
# tous les jours à 1:00
0 1 * * * import_piwik_log_and_archive.sh
|
import_piwik_log_and_archive.sh |
#!/bin/bash
set -e
set -o pipefail
set -u
python2 /usr/share/webapps/piwik/misc/log-analytics/import_logs.py \
--url='http://piwik' \
--idsite 1 \
$(date +/var/log/nginx/mediawiki_access_daily-\%Y-\%m-\%d.piwik.gz) \
--log-format-name ncsa_extended \
--recorders=4
/usr/share/webapps/piwik/console core:archive --url='http://piwik'
|
Script perso
crontab |
* * * * * /path/to/piwik-import-log.sh 2>&1 | mail -s "Piwik Import Log" -r cron@mon-domain.fr xxx@gmail.com
|
piwik-import-log.sh |
#!/bin/bash
set -e
set -o pipefail
set -u
log_file='/var/log/nginx/bananeatomic_access.log'
nb_of_lines_to_skip=0
if [[ -r .piwik-skip ]] ; then
nb_of_lines_to_skip=$(cat .piwik-skip)
fi
nb_of_lines_in_the_log_file=$(wc -l < $log_file)
# si il n'y a pas eu de nouvelles entrées dans le log on ne fait rien
if [[ $nb_of_lines_to_skip -eq $nb_of_lines_in_the_log_file ]] ; then
exit 0
# si il le log a été archivé
elif [[ $nb_of_lines_to_skip -gt $nb_of_lines_in_the_log_file ]] ; then
nb_of_lines_to_skip=0
fi
echo $nb_of_lines_in_the_log_file > .piwik-skip
python2 /srv/http/piwik/misc/log-analytics/import_logs.py \
--url=http://piwik.mon-domain.fr \
"$log_file" \
--recorders=4 \
--exclude-path="/load.php" \
--exclude-path="/api.php" \
--skip=$nb_of_lines_to_skip
# déclencher manuellement l'archivage / la création des rapports
su http -m -c "/usr/bin/php /srv/http/piwik/console core:archive --url=http://piwik.mon-domain.fr"
# « http » n'ayant pas le droit de se connecter à un shell, il faut utiliser l'option « -m »
|
Confidentialité
Créer un lien vers « http://monsite/piwik/index.php?module=CoreAdminHome&action=optOut&language=fr » pour créer un cookie signifiant à Piwiki de ne pas collecter les données.
Configure Privacy Settings in Piwik
GeoLocalisation
Installation GeoIP
pacman -S php-geoip geoip-database-extra
# les paquets geoip et geoip-database seront installés comme dépendances
# geoip-database contient GeoIP.dat
# geoip-database-extra contient GeoIPCity.dat
|
/etc/php/conf.d/geoip.ini |
extension=geoip.so
; redéfinir le dossier où se trouve les fichiers dat
geoip.custom_directory=/usr/share/GeoIP/
|
![]() |
Tester: Piwik → Administration → Geolocalisation |
Installation PECL
![]() |
PECL est plus rapide que la version GeoIP PHP |
pacman -S autoconf pecl install geoip |
Appliquez la géolocalisation aux anciens log visiteurs
# Mettre à jour la base de données :
/usr/bin/php /srv/http/piwik/console usercountry:attribute 2015-01-01,2016-01-01
# Reconstruire les rapports
/usr/bin/php /srv/http/piwik/console core:archive --force-all-websites --force-all-periods=315576000 --force-date-last-n=1000 --url=http://piwik
|
Supprimer toutes les données statistiques
# supprimer toutes les tables commençant par archive_
select concat('drop table ', group_concat(table_name), ';')
from information_schema.tables where table_schema = 'piwik_db' and table_name like 'archive_%';
# DROP TABLE archive_*;
DELETE FROM log_visit WHERE idsite = 1;
DELETE FROM log_link_visit_action WHERE idsite = 1;
DELETE FROM log_conversion WHERE idsite = 1;
DELETE FROM log_conversion_item WHERE idsite = 1;
|
Installation
wget https://builds.matomo.org/matomo.zip
unzip matomo.zip
rm -f matomo.zip How\ to\ install\ Matomo.html
sudo mv matomo /var/www
sudo chown -R root:root /var/www/matomo
sudo chown www-data:www-data /var/www/matomo/tmp
sudo chown www-data:www-data /var/www/matomo/matomo.js # the js tracker has to be writable
sudo chown -R www-data:www-data /var/www/matomo/config # only for the installation
# after the installation, reset access rights to the config folder
sudo chown -R root:root /var/www/matomo/config
# but allow to modifiy the config.ini.php file
sudo chown www-data:www-data /var/www/matomo/config/config.ini.php
|
NGINX
/etc/nginx/sites-available/matomo.conf |
Nginx et uwsgi
/etc/nginx/nginx.conf |
/etc/uwsgi/piwik.ini |
Database Setup
create database matomo default character set utf8mb4 collate utf8mb4_unicode_ci;
create user matomo@localhost identified by 'password';
grant all on matomo.* to matomo@localhost;
flush privileges;
# LOAD DATA INFILE
show grants for 'piwik_user'@'localhost';
# GRANT USAGE ON *.* TO 'piwik_user'@'localhost' IDENTIFIED BY PASSWORD 'xxx'
grant file on *.* TO 'piwik_user'@'localhost';
show grants for 'piwik_user'@'localhost';
# GRANT FILE ON *.* TO 'piwik_user'@'localhost' IDENTIFIED BY PASSWORD 'xxx'
|
# LOAD DATA INFILE
chown http:mysql /usr/share/webapps/piwik/tmp/assets
|
FTP
- Télécharger l'archive, la désarchiver et transférer le dossier sur le serveur via FTP en mode BINAIRE (important sinon la vérification de l'intégrité des fichiers ne marche pas).
- Suivre les étapes ...
- Pour le login et le mot de passe Piwik, il est plus aisé de réutiliser le mot de passe de l'utilisateur MediaWiki
- Le code JavaScript :
- il peut être coller dans le fichier « skins/MonoBook.php » juste avant echo Html::closeElement( 'body' );
- mais l'utilisation de l'extension FooterManager permet d'ajouter des scripts dans le footer
Erreurs
Administration → Diagnostic → System Check → Database abilities: LOAD DATA INFILE
# le dossier assets n'est pas accessible par mysql
ll /usr/share/webapps/piwik/tmp/assets
# drwxr-x---
chmod o+rx /usr/share/webapps/piwik/tmp/assets
ll /usr/share/webapps/piwik/tmp/assets
# drwxr-xr-x
|
The mysql driver is not currently installed
Décommentez la ligne suivante
/etc/php/php.ini |
extension=pdo_mysql.so
|
# redemarrez le serveur
sudo systemctl restart httpd
|
SQLSTATE[HY000] [2002] Connection refused
Mauvais hôte, identifiant ou mot de passe.
Essayez localhost au lieu de 127.0.0.1
You need to configure and rebuild PHP with "iconv" support enabled, --with-iconv
Décommentez les lignes suivantes
/etc/php/php.ini |
extension=iconv.so
[iconv]
iconv.input_encoding = ISO-8859-1
iconv.internal_encoding = ISO-8859-1
iconv.output_encoding = ISO-8859-1
|
# redemarrez le serveur
sudo systemctl restart httpd
|