Le petit projet des vacances…

Entre ma vie, la migration de Bearnaise (qui tarde un peu trop d’ailleurs, merci Free.), et le projet scolaire que je dois terminer pour la rentrée, je m’ennuyais un peu. Alors j’ai décidé de reprendre un vieux projet que j’avais entamé il y a fort longtemps avec Swater : un analyseur de logs de serveurs HTTP.

L’idée est de faire un analyseur de logs extremement modulaire afin de pouvoir ajouter ou retirer à souhait les traitements qui seront effectués sur les fichiers. Pour résumer le fonctionnement, il y a d’un coté des modules d’analyse genre “visiteurs”, “referers”, “hits”, etc. qui s’occupent de collecter des données sur chaques lignes des fichiers de logs. De l’autre coté, un module de rendu (genre “html”, “mail”, “texte”) qui lui s’occupe comme son nom l’indique si bien, du rendu du rapport de résultats.

Le projet est déjà bien entamé, et je compte releaser une première version très bientôt. J’ai fais quelques tests de performances pour avoir une idée (pour l’instant, ce n’est pas optimisé). Condition des tests : sur mon portable, Core Duo 1.66Ghz, 1Go de RAM (mais l’utilisation par le programme de la ram était minime), fichiers de logs du serveur http de Bearnaise, un peu plus d’un an pour 1231699 lignes.

Test #1

Traitement des lignes relatives au domaine “inaps.org” avec un seul module d’analyse actif et en mode verbeux : time python s.py -m inaps.org -d 01012006 -e 99999 -v html visitors logs/*

Résultat : 132.91user 0.58system 2:16.75elapsed 97%CPU (0avgtext+0avgdata 0maxresident)k

Test #2

Traitement des lignes relatives a tous les domaines avec un seul module d’analyse actif et en mode verbeux : time python s.py -d 01012006 -e 99999 -v html visitors logs/*

Résultat : 144.67user 4.52system 2:33.67elapsed 97%CPU (0avgtext+0avgdata 0maxresident)k

Test #3

Traitement des lignes relatives a tous les domaines avec deux modules d’analyse actifs et en mode verbeux : time python s.py -d 01012006 -e 99999 -v html visitors,referers logs/*

Résultat : 168.98user 5.69system 3:05.21elapsed 94%CPU (0avgtext+0avgdata 0maxresident)k

Test #4

Traitement des lignes relatives a tous les domaines avec deux modules d’analyse actifs et en mode silencieux : time python s.py -d 01012006 -e 99999 -q html visitors,referers logs/*

Résultat : 155.58user 0.24system 2:35.86elapsed 99%CPU (0avgtext+0avgdata 0maxresident)k

Même si ces tests ne sont pas hyper démonstratifs (ils dépendent des modules activés), ils donnent quand même une idée de la vitesse d’exécution du truc (il faudrait que je regarde ce qui se fait à coté).

Si certains ont des suggestions, elles sont les bienvenues…

Le Samedi 26 avril 2008 à 17h10 Developpement Tags : , ,

Commentaires RSS feed

Avatar de l'auteur

commentaire de BatchyX

avril 27th, 2008 at 7:33

ça donne quoi le profilage ?

Avatar de l'auteur

commentaire de Antoine

http://inaps.org
avril 27th, 2008 at 11:26

Pas encore essayé, je le ferais plus tard. Mais d’après les tests ci-dessus, ont peut déduire que ce qui prend le plus de temps n’est pas l’exécution des (deux) modules, mais tout le traitement de chaque ligne avant (extraction des infos avec le regex, comparaison de la date, du domaine…)

Avatar de l'auteur

commentaire de BatchyX

avril 27th, 2008 at 12:03

des regex, ça s’optimise aussi…

Avatar de l'auteur

commentaire de David, biologeek

http://www.biologeek.com
mai 1st, 2008 at 4:31

Une excellente présentation sur les générateurs avec pleins d’exemples qui ont l’air de faire ce que tu fais : http://www.dabeaz.com/generators/

Avatar de l'auteur

commentaire de Antoine

http://inaps.org
mai 1st, 2008 at 5:08

Effectivement, c’est très intéressant, merci. J’ai ajouté un lien vers l’article sur mon billet sur les generators.

Par contre, vu le fonctionnement de mon analyseur de logs, je doute que je puisse utiliser ce genre de trucs… :)

Poster un commentaire


Ne sera pas publiée, elle est utile pour les Gravatars et la modération des commentaires.


Facultatif.


Vous pouvez utiliser ces marqueurs : <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <code> <em> <i> <strike> <strong>