Demande #3929
closedAméliorer/fiabiliser les statistiques des podcasts des émissions Libre à vous !
0%
Description
Questionnements¶
- Les statistiques proposés par Awstats pour les podcasts de « Libre à vous ! » sont-il « fiables » (correspondent-ils à une réalité de téléchargement) ?
- Si oui, mettre en place un outil (script ou autre) pour afficher les statistiques des podcasts ?
- Si non, mettre en place un outil de statistiques dédié ?
La page suivante explique la problématique des statistiques de podcast et une solution mise en place http://ewr.is/2015/07/1815-computing-podcast-stats-with-elasticsearch
Podcasts Libre à vous !¶
Les podcasts de l'émission « Libre à vous ! » sont hébergés sur https://media.april.org/audio/radio-cause-commune/libre-a-vous/emissions/ (VM lamp) au format OGG et MP3. Pour chaque émission il y a un podcast pour l'émission complète et un podcast par sujet traité.
Les logs du serveur web nginx (le frontal) se trouvent sur bastion dans /var/log/nginx/media.april.org/
Comme c'est du streaming, un grep des logs du serveur web ne donne pas un résultat fiable (il y a visiblement peut être plusieurs hits pour un même visionnage). Il y a aussi la question problématique des robots d'indexation.
L'outil de statistiques web est awstats. L'accès web se fait sur https://stats.april.org/awstats.media.april.org.downloads.html L'accès aux fichiers texte d'awstats sur fait sur bastion dans /var/lib/awstats les fichiers étant nommés awstatsMMAAAA.media.april.org.txt où MM correspond au mois en chiffre et AAAA à l'année.
Awstats indique le nombre de downloads complets et les partial downloads (appelés « 206 hits »). J'ai trouvé une vidéo "What's the Difference Between Hits and 206 Hits in AWStats in Cpanel" https://www.youtube.com/watch?v=7vTHiBRD-u4 qui explique ça.
Exemple :
grep 'audio/radio-cause-commune/libre-a-vous/emissions/20191008/libre-a-vous-20191008.*\.\(ogg\|mp3\) ' awstats102019.media.april.org.txt
La première ligne affichée est (le premier nombre correspond aux downloads complets, le second aux downloads partiels, le troisième au nombre d'octets transférés) :
/audio/radio-cause-commune/libre-a-vous/emissions/20191008/libre-a-vous-20191008-logiciel-libre-et-seniors-alain-casier-et-claude-guedj.ogg 981 356 3754419331
Updated by Loïc Dachary about 5 years ago
- Status changed from Nouveau to En cours de traitement
- Assignee set to Loïc Dachary
Updated by Loïc Dachary about 5 years ago
https://awstats.org/docs/awstats_glossary.html
- 206 Partial Content The partial content success code is issued when the server fulfills a partial GET request. This happens when the client is downloading a multi-part document or part of a larger file.
Quand je fais wget https://media.april.org/audio/radio-cause-commune/libre-a-vous/emissions/20180529/libre-a-vous-20180529-annonces.mp3 je vois un code 200
- 80.12.34.21 - - [17/Oct/2019:09:19:42 +0200] "GET /audio/radio-cause-commune/libre-a-vous/emissions/20180529/libre-a-vous-20180529-annonces.mp3 HTTP/1.1" 200 6896885 "-" "Wget/1.20.1 (linux-gnu)"
Quand je j'interromps le wget j'ai aussi un code 200 mais avec une taille plus petite
- 80.12.34.21 - - [17/Oct/2019:09:19:15 +0200] "GET /audio/radio-cause-commune/libre-a-vous/emissions/20180529/libre-a-vous-20180529-annonces.mp3 HTTP/1.1" 200 3260165 "-" "Wget/1.20.1 (linux-gnu)"
Un download partiel (206) ne dépend pas du fait que le serveur a terminé le transfert du contenu, il dépend de ce que le client a demandé au server.
https://en.wikipedia.org/wiki/List_of_HTTP_status_codes : 206 Partial Content The server is delivering only part of the resource (byte serving) due to a range header sent by the client. The range header is used by HTTP clients to enable resuming of interrupted downloads, or split a download into multiple simultaneous streams.
Par exemple on peut demander seulement 10000 bytes a partir du byte 20001 curl --header "Range: bytes=20001-30000" https://media.april.org/audio/radio-cause-commune/libre-a-vous/emissions/20180529/libre-a-vous-20180529-annonces.mp3 > /dev/null et du coup on a un 206
- 80.12.34.21 - - [17/Oct/2019:09:26:16 +0200] "GET /audio/radio-cause-commune/libre-a-vous/emissions/20180529/libre-a-vous-20180529-annonces.mp3 HTTP/1.1" 206 10000 "-" "curl/7.64.0"
Updated by Loïc Dachary about 5 years ago
https://awstats.sourceforge.io/docs/awstats_glossary.html
A unique visitor is a person or computer (host) that has made at least 1 hit on 1 page of your web site during the current period shown by the report. If this user makes several visits during this period, it is counted only once. Visitors are tracked by IP address, so if multiple users are accessing your site from the same IP (such as a home or office network), they will be counted as a single unique visitor.
Visits: Number of visits made by all visitors. Think "session" here, say a unique IP accesses a page, and then requests three other pages within an hour.
Updated by Loïc Dachary about 5 years ago
On dirait que les robots ne sont pas détectés (i.e. https://stats.april.org/media.april.org.html#robots est vide) alors que la configuration montre que la dectection des robots est active.
root@bastion:/etc/awstats[master$]# grep LevelForRobotsDetection * awstats.conf:LevelForRobotsDetection=2 # 0 disables Robots detection.
Updated by Loïc Dachary about 5 years ago
https://statistiques.april.org/ repose sur https://matomo.org/ qui est plus moderne que awstats. Il serait bon d'y ajouter media.april.org.
Exclusion des bots : https://statistiques.april.org/index.php?module=SitesManager&action=globalSettings&idSite=2&period=day&date=yesterday#/excludedUserAgentsGlobal
https://plugins.matomo.org/BotTracker
Update: c'est pas possible parce que matomo ne repose pas sur l'analyse de logs.
Updated by Loïc Dachary about 5 years ago
- A.B.C.D - - [17/Oct/2019:11:03:21 +0200] "GET / HTTP/1.1" 200 578 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)"
c'est dans le log mais https://en.wikipedia.org/wiki/Common_Log_Format qui correspond a LogFormat 4 dans https://www.awstats.org/docs/awstats_config.html#LogFormat correspond à host ident authuser date request status bytes qui est seulement - A.B.C.D - - [17/Oct/2019:11:03:21 +0200] "GET / HTTP/1.1" 200 578
et la fin est ignorée, donc le user agent aussi, donc pas de possibilité de detection de bot
Updated by Loïc Dachary about 5 years ago
La doc ne donnant aucune information précise sur la sémantique de LogFormat=1 ou LogFormat=4, il faut regarder dans le code. On voit que LogFormat=4 qui est utilisé par la confirmation awstat de https://stats.april.org/ pour tout les sites n'inclus pas le UserAgent. Cela explique pourquoi les visites de bots ne sont pas comptabilisées à part et que https://stats.april.org/media.april.org.html#robots est vide. Autrement dit pourquoi le nombre de visiteurs inclus les bots au lieu de les exclure.
Il faudrait changer LogFormat=4 en LogFormat=1 dans /usr/local/bin/make-awstats-config.sh sur bastion.
- LogFormat=1
- https://github.com/eldy/awstats/blob/develop/wwwroot/cgi-bin/awstats.pl#L8960
- "%h l %u %t \"%r\" %>s %b \"{Referer}i\" \"%{User-Agent}i\""
- 'date', 'host', 'logname', 'method', 'url', 'code', 'size', 'ua', 'referer'
- LogFormat=4
- https://github.com/eldy/awstats/blob/develop/wwwroot/cgi-bin/awstats.pl#L8960
- "%h %l %u %t \"%r\" %>s %b"
- 'host', 'logname', 'date', 'method', 'url', 'code', 'size'
Updated by Loïc Dachary about 5 years ago
J'ai fait un essai manuel pour vérifier que ça fonctionne:
- modifier manuellement /etc/awstats/awstats.media.april.org.conf LogFormat=1
- /usr/lib/cgi-bin/awstats.pl -config=media.april.org -update
- /usr/lib/cgi-bin/awstats.pl -config=media.april.org --output -staticlinks > /var/www/stats.april.org/media.april.org.html
- les bots sont devenus visibles sur https://stats.april.org/media.april.org.html#robots
Updated by Loïc Dachary about 5 years ago
- Related to Demande #3930: Les robots n'apparaissent pas dans stats.april.org added
Updated by Loïc Dachary about 5 years ago
J'ai mis la résolution du problème des bots dans un ticket a part pour que ce soit plus clair: https://agir.april.org/issues/3930
Updated by Loïc Dachary about 5 years ago
Le problème des bots qui n'étaient pas comptabilisés ayant été résolu, je pense que l'information présentée à https://stats.april.org/media.april.org.html est fiable, dans la limite de ce que awstat peut fournir.
- nombre de visites (URL accédées par un meme visiteur avec moins d'une heure d'intervalle)
- nombre de visiteurs uniques (au moins une URL accédé par un visiteur dans le mois)
La distinction entre Hits et 206 Hits n'a pas d'importance pour ces deux informations. On pourrait essayer de déduire des choses du genre "quelle est la moyenne de taille des fichiers téléchargés?" mais cela donnerait une information technique et pas un indice de visite. Par exemple, en fonction du client qui sert a stream un flux audio et de ses réglages, il est tout a fait possible qu'un fichier téléchargé intégralement ne soit jamais écouté par l'utilisateur. La variation de combinaisons entre les requêtes partielles qui aboutissent à (code 206) ou bien une requête pour l'intégralité du fichier qui se termine prématurément (code 200) ou qui aboutit (aussi code 200) dépend entièrement du client.
Il n'y a pas de statistiques séparées pour le dossier https://media.april.org/audio/radio-cause-commune/libre-a-vous/emissions/ donc les statistiques concernent tout le site media.april.org.
On pourrait avoir des statistiques plus fines en isolant les lignes de log qui concernent uniquement un dossier (par exemple https://media.april.org/audio/radio-cause-commune/libre-a-vous/emissions/) et en produisant une page awstat pour cet extrait. Voici un exemple fait manuellement:
# cat /etc/awstats/awstats.cause-commune.conf LogFile="/var/log/nginx/media.april.org/cause-commune.access_log" SiteDomain="media.april.org" # See the definition of LogFormat=1 at # https://github.com/eldy/awstats/blob/39d18dab4816dfae04c6a7c0acecb685eadafc8d/wwwroot/cgi-bin/awstats.pl#L8958 LogFormat=1 DirData="/tmp/cause-commune" SkipHosts="172.16.0.254" # grep cause-commune /var/log/nginx/media.april.org/media.april.org.access_log > /var/log/nginx/media.april.org/cause-commune.access_log # mkdir /tmp/cause-commune # /usr/lib/cgi-bin/awstats.pl -config=cause-commune -update # /usr/lib/cgi-bin/awstats.pl -config=cause-commune --output -staticlinks > /var/www/stats.april.org/cause-commune.html
Updated by Loïc Dachary about 5 years ago
En conclusion extraire les logs de libre a vous donnerait un peu de visibilité mais ne permettrait pas d'obtenir ce qu'on veut. Il faut trouver un autre outil. Ou alors faire un hack a la main mais c'est pas top.
Updated by Loïc Dachary about 5 years ago
Injecter des logs dans matomo et les exploiter: https://matomo.org/docs/log-analytics-tool-how-to/
- https://hub.docker.com/_/matomo
- git clone https://github.com/matomo-org/docker
- cd docker/.examples/apache
- edit db.env + docker-compose.yml and set the passwords and set the port to 80 instead of 8080
- http://localhost and complete the setup wizard
- scp -r root@bastion.cluster.april.org:/var/log/nginx/media.april.org .
- cd media.april.org
- ( bzcat media.april.org.access_log.{365..2}.bz2 ; cat media.april.org.access_log.1 media.april.org.access_log ) > access.log
- docker cp access.log apache_app_1:/var/www/html/access.log
- docker run --network apache_default --rm --volumes-from="apache_app_1" --link apache_app_1 python:2-alpine python /var/www/html/misc/log-analytics/import_logs.py --url=http://apache_app_1 --login=admin --password=XXXXX --idsite=1 --recorders=4 /var/www/html/access.log
- docker-compose exec app console core:archive --force-all-websites --force-all-periods=315576000 --force-date-last-n=1000 --url='http://apache_app_1'
Updated by Loïc Dachary about 5 years ago
Il est possible de restreindre les stats aux URL (actions dans le vocabulaire matomo) qui contiennent une chaine.
- sur le dashboard de media.april.org
- selectionner "toute les visites" et cliquer "ajouter un nouveau segment
- Nom: Libre à Vous
- Action de la visite => Action => URL d'action
- Est => Contient
- Value = cause-commune
Updated by Loïc Dachary about 5 years ago
Les logs de media.april.org sont injectés dans statistiques.april.org avec:
- scp -r root@bastion.cluster.april.org:/var/log/nginx/media.april.org .
- cd media.april.org
- ( bzcat media.april.org.access_log.{365..2}.bz2 ; cat media.april.org.access_log.1 media.april.org.access_log ) | gzip > access.log.gz
- scp access.log.gz root@lamp.april.org:/tmp/access.log.gz
- cd /var/www/statistiques.april.org/piwik/
- python misc/log-analytics/import_logs.py --url=https://statistiques.april.org/--login=piwikadmin --password=XXXXX --idsite=6 --recorders=4 /tmp/access.log # idsite=6 correspond a media.april.org
- ./console core:archive --force-idsites=6 --force-all-periods=315576000 --force-date-last-n=1000 --url='https://statistiques.april.org/'
Note: comme la machine lamp est assez lente, l'import a été limité au dernier mois (~20 september - ~20 octobre)
Updated by Loïc Dachary about 5 years ago
- Assignee deleted (
Loïc Dachary)
Je laisse à une autre personne le plaisir de continuer sur ce ticket.
Updated by Frédéric Couchet about 2 years ago
- Status changed from En cours de traitement to Fermé