Travaux pratiques - Analyse/filtrage/présentation de données

Transcription

Travaux pratiques - Analyse/filtrage/présentation de données
Travaux pratiques - Analyse/filtrage/présentation de données
IUT du Havre - Département informatique - Année spéciale
[email protected]
1
Introduction
Arrivé à ce stade, vous avez maintenant des notions de programmation C, de shell et de programmation shell, de
génération de graphiques en utilisant gnuplot et puis vous devez également avoir quelques notions d’HTML.
L’objectif de ce travail est de vous familiariser avec les techniques d’automatisation du traitement des données
produites par le système. Dans un but d’illustration, le fichier qui contient les traces des connexions à un site web
vous est fourni. Une ligne d’un tel fichier est formée de plusieurs champs :
– 65.55.105.89 - - [04/Oct/2009 :08 :01 :20 +0200] "GET /Z3Z/enseignement/systeme/index.php HTTP/1.1" 403
327 "-" "msnbot/1.1 (+http ://search.msn.com/msnbot.htm)"
– 65.55.37.185 - - [04/Oct/2009 :08 :03 :58 +0200] "GET /robots.txt HTTP/1.1" 404 304 "-" "Mozilla/4.0"
– 113.22.175.77 - - [04/Oct/2009 :08 :33 :41 +0200] "GET /Z1Z/Guides/beamer.html HTTP/1.1" 200 1055
"http ://www.google.com.vn/search ? rlz=1C1GGLS frVN347VN347&sourceid=chrome&ie=UTF-8&q=INSTALLATION+beamer"
"Mozilla/5.0 (Windows ; U ; Windows NT 6.1 ; en-US) AppleWebKit/532.0 (KHTML, like Gecko) Chrome/3.0.195.24
Safari/532.0"
1. les différents champs sont séparés par un tiret : ”-”
2. le premier champ contient l’adresse IP de la machine dont provient la requête.
3. le second champ est généralement vide et ne sera pas considéré dans ce travail
4. le troisième champ est constitué lui-même de plusieurs sous-champs séparés par un espace :
(a) la date, l’heure et le décalage par rapport à l’heure GMT est entre crochet
(b) l’opération demandée au serveur : GET pour obtenir une page, POST pour déposer des informations,
etc.
(c) le chemin d’accès depuis la racine du site vers la page elle-même
(d) le protocole utilisé (HTTP/1.1 ou HTTP/1.0)
(e) le code de retour :
– 200 : la requête a été satisfaite
– 304 : permet d’informer l’émetteur de la requête que la page n’a pas été modifiée (utile pour les
robots)
– 403 : l’accès à la page est restreint
– 404 : la page demandée n’a pas été trouvée
– la liste des codes et de leur signification se trouve ici :
http ://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html
(f) le poids en octets de la page
(g) la page à partir de laquelle l’utilisateur, en cliquant, est arrivé sur la page courante
(h) l’outil qui a généré la requête, il peut s’agir d’un navigateur classique ou d’un robot.
1
2
Etape 1 : filtrage en shell
1. On souhaite effectuer un filtrage des requêtes qui n’ont pas été satisfaites (code de retour 403 et 404). Pour
ces requêtes, on veut identifier les adresses IP des machines d’où proviennent les requêtes et les conserver
dans un fichier requetesNonSatisfaites.ip - Attention, les filtrages sur les chaı̂nes isolées " 403 " et
" 404 " peuvent générer des faux positifs. Dans le filtrage, on appelle faux positif un élément qui est
conservé alors qu’il ne devrait pas l’être. C’est ce qui peut arriver si la chaı̂ne 403 apparaı̂t dans une ligne à
un endroit qui ne correspond pas au code erreur.
2. On souhaite ensuite créer un fichier par utilisateur (repéré par la chaı̂ne ZnombreZ) qui contienne l’ensemble des requêtes de type GET qui ont été satisfaites (code de retour 200). Chaque fichier se nommera
ZnombreZ.log, pour information il y a 36 utilisateurs différents.
3. Pour chaque utilisateur on souhaite récupérer les volumes de données associés aux requêtes. Chaque fichier se
nommera ZnombreZ.vol - Attention, certaines lignes ne comportent pas le volume des données transférées.
4. Pour le 7 octobre, comptabilisez le nombre de requêtes satisfaites pour chaque utilisateur et générez pour
l’ensemble des utilisateur un seul fichier 07 requetesParUtilisateur.nb dont le contenu est présenté sous la
forme de deux colonnes, une première qui indique le numéro de l’utilisateur (il faut conserver nombre dans
la chaı̂ne ZnombreZ), et une seconde colonne qui contient le nombre de requêtes le concernant.
5. Pour ce même jour, détectez les pages qui ont été demandées par les principaux robots d’indexation qui
laissent des traces dans le fichier de log sous le nom de : googlebot, voilabot, msnbot ou slurp. Pour chacun
d’eux générez un fichier nomDuRobot.users (remplacez nomDuRobot par googlebot, voilabot, etc.). Le
contenu de ce fichier est formé de deux colonnes, une première pour le numéro de l’utilisateur et une seconde
pour le nombre de requêtes du robot concernant cet utilisateur.
3
Etape 2 : traitement en C
On veut effectuer des statistiques sur les volumes de données transférées. Pour cela, il faut traiter les fichiers
ZnombreZ.vol, lire le contenu ligne par ligne et faire le traitement des informations. On souhaite, pour chaque
utilisateur calculer : la valeur minimum de transfert, la valeur maximum du volume de transfert, le volume moyen
transféré à chaque requête et la somme des volumes de transfert. En C, cela suppose d’ouvrir un fichier, de le lire
ligne par ligne, et de traiter les valeurs lues (qui sont toutes des valeurs entières). Pour chaque fichier traité, le
programme C doit afficher : numéro d’utilisateur valeur min valeur max somme moyenne. Par exemple :
23 2825 297529 563248 80464
Pour chaque fichier traité, le programme C produit une ligne. Toutes les lignes sont conservées dans un fichier
traffic.vol dont le contenu ressemble à ça :
16
17
18
19
20
21
22
23
24
313 835 8247 634.38
312 396 3855 321.25
310 7097147 34500462 334955.94
0 0 0 0.00
20 274276 1645696 205712.00
301 1970589 297045642 210820.19
156 2116687 5280997 56180.82
304 229139 1444956 15706.04
1 34397778 119826547 145774.39
2
4
Etape 3 : présentation-affichage avec gnuplot et HTML
Une fois obtenu le fichier traffic.vol, vous générez deux images par gnuplot qui représentent, pour la première
le volume total de traffic généré par les pages web des utilisateurs (en abscisse le numéro de l’utilisateur et en
ordonnée le volume total), et pour la seconde, le volume moyen généré à chaque requête sur les pages de l’utilisateur
(en abscisse le numéro de l’utilisateur et en ordonnée le volume moyen de chaque requête).
5
Etape 4 : synthèse
On souhaite maintenant automatiser complétement la chaı̂ne de traitement. Cela nécessite la mise au point d’un
script shell qui prenne le nom du fichier de logs en argument et qui produise les différents fichiers de données et les
images en sortie, ainsi que la page HTML associée. Le script doit donc inclure les différents traitements shell, les
appels au programme C, la génération des images avec gnuplot et enfin la génération de la page HTML qui résume
l’ensemble des résultats compilés. Pour le mettre au point, il nous suffit de reprendre dans l’ordre les différentes
commandes qui ont été effectuées. Il faut être très attentif à l’emplacement des fichiers pour ne pas tenter l’ouverture
de fichiers qui n’existent pas ou qui ne sont pas positionnés dans les bons répertoires. Nous choisissons de créer une
arborescence comme indiqué en figure 3, avec un répertoire pour les logs, un répertoire pour les pages HTML, un
répertoire pour les images, et un répertoire pour les fichiers de données produits à partir des logs. Sur cette base,
construisez le script shell demandé.
traces/
logs/
access.ano
images/
data/
Z12Z.log
ZxxxZ.log
traffic.vol
requetesNonSatisfaites.ip
html/
volumetotal.png 07.html
moyennevolumes.png
F IG . 1 – Arborescence des répertoires dédiés au stockage des données, images et pages HTML produites à partir de
l’analyse des logs.
3