Project

General

Profile

Actions

Demande #3929

closed

Améliorer/fiabiliser les statistiques des podcasts des émissions Libre à vous !

Added by Frédéric Couchet about 5 years ago. Updated about 2 years ago.

Status:
Fermé
Priority:
Normale
Assignee:
-
Target version:
-
Start date:
10/16/2019
Due date:
% Done:

0%

Estimated time:

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


Related issues 1 (0 open1 closed)

Related to Libre à vous ! - Demande #3930: Les robots n'apparaissent pas dans stats.april.orgRésoluLoïc Dachary10/17/2019

Actions
Actions #1

Updated by Loïc Dachary about 5 years ago

  • Status changed from Nouveau to En cours de traitement
  • Assignee set to Loïc Dachary
Actions #2

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"
Actions #3

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.

Actions #4

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.
Actions #5

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.

Actions #6

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
Actions #7

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.

Actions #8

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
Actions #9

Updated by Loïc Dachary about 5 years ago

  • Related to Demande #3930: Les robots n'apparaissent pas dans stats.april.org added
Actions #10

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

Actions #11

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
Actions #12

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.

Actions #13

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 :/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'
Actions #14

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
Actions #15

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 :/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 :/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)

Actions #16

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.

Actions #17

Updated by Frédéric Couchet about 2 years ago

  • Status changed from En cours de traitement to Fermé
Actions

Also available in: Atom PDF