Bonjour à tous,
dans le cadre d'un projet, je dois implémenter une application de data mining dans un contexte de sécurité Web.
En effet, le but de ce projet est de récupérer un gros volume de log Apache (+20 millions de lignes/jour) et d'extraire des informations pertinentes (provenance des IP, listes des user-agents, etc.) afin de déterminer des patterns d'attaques potentielles (DDOS, etc.).
Une fois les données traitées (il restera certainement une bonne douzaine de millions de lignes/jour), je voudrais pouvoir les enregistrer dans une BD.
J'ai commencé à regarder les solutions usuelles qui utilisent du relationnel (MySQL, PostgreSQL, H2, etc.), mais je me demandais si vous aviez un avis sur d'autres types de modèle (NoSQL par exemple) qui serait peut être plus pertinents au niveau des performances, de la gestion d'une telle volumétrie ou encore de la facilité d'implémentation et de maintenance.
Au niveau de ce que je veux stocker, voilà typiquement le format de log que je récupère (les logs Apache sont formalisés):
127.0.0.1 - frank [10/Oct/2000:13:55:36 -0700] "GET /apache_pb.gif HTTP/1.0" 200 2326 "http://www.example.com/start.html" "Mozilla/4.08 [en] (Win98; I ;Nav)"
Une fois enregistrés après traitement (imaginons par exemple que le referer ne m'intéresse pas), les logs passeront dans une moulinette de Data Mining (pas d'algo. en vue pour l'instant) pour générer de la connaissance (combien de fois l'utilisateur s'est connecté dans un certain laps de temps? provenance géographique des IP? etc.).
In fine, je pense que la BD (si je pars sur du relationnel) aura plusieurs dizaines de millions de lignes, une douzaine de colonnes par tables et quelques tables liées (une table pour les logs traitées, une table pour les IP, etc.)
Je sais que la réponse à ma question deviendra plus claire une fois que j'aurais bien dessiné la structure de la BD (ce que je garde/ce que je ne garde pas, comment j'agrège les données, etc.), mais j'ai néanmoins quelques questions pour être sûr que je ne part pas dans la mauvaise direction:
- Selon vous, est-ce qu'un modèle relationnel est adéquat pour ce type de traitement?
- Si oui, est ce qu'une solution comme MySQL pourrait supporter la volumétrie (il faudrait garder l'historique des logs au moins sur 3 semaines)
Au niveau des contraintes:
- Je pense implémenter en Python (de préférence, mais rien de 100% obligatoire)
- Il faudrait un SGBD libre
- Il faudrait si possible que l'on puisse compresser les tables (mais rien d'obligatoire non plus).
Au niveau Python, j'ai des vues sur PyTables (http://pytables.github.com/index.html) qui pourrait répondre aux contraintes volumétriques, mais qui pourrait ne pas être adéquat au niveau schéma de BD (c'est du hiérarchique).
Pour éviter les problèmes, je tiens à mentionner que je ne cherche pas de choses toutes faites (par exemple des analyseurs de logs Apache en GUI), il me faudrait juste un avis objectif sur la viabilité d'une utilisation d'un SGBD relationnel pour mon cas d'utilisation.
Merci d'avance pour vos réponses.
Amicalement.
Partager