DGE Traefik logs
L'objectif de ce projet est (1) de pouvoir convertir les fichiers traekik au format JSON dans un format plus adapté à leur explopitation et (2) permettre le requêtage des données pour en extraire des statistiques et indicateurs sur l'utilisation de la plateforme DataGrandEst.
Dans la suite, 2 approches ont été étudiées
- Utilisation d'une BDD SQLite
- Utilisation de fichiers Parquet
A noter que l'ensemble des fichiers source représente environ 113 Go de données.
BDD SQLITE
C'est une approche relativement conventionnelle qui permet une mise en oeuvre assez simple.
Approche retenue:
- Créer une base de données sqlite3
- Lire un fichier mensuel et l'intégrer dans la BDD (en l'adaptant au besoin)
- Traiter les données en SQL
Fonctionne sur la base de 2 scripts:
sqlite_import.py
= importer les logs en BDD SQLitesqlite_stats.py
= calculer les principales stats mensuelles
Import
cf. sqlite_import.py
Chaque fichier de log est importé dans une table mensuelle spécifique, ligne par ligne.
Ex.: le fichier "2023-07" est importé dans le table "LOGS_2023_07" et ainsi de suite.
En parallèle, les requêtes WMS sont importées dans une table dédiée "LAYERS_2023_07" (sur la base de l'exemple précédent). L'objectif est de pouvoir à terme disposer de statistiques sur les couches les plus consultées.
Le même travail reste à faire pour les couches WFS et WMTS.
L'import de l'ensemble des fichiers dure environ 1 heure. Le fichier final fait environ 56Go.
2023-07 - 8.26 GB - 0:05:24
2023-08 - 16.29 GB - 0:09:42
2023-09 - 20.12 GB - 0:11:45
2023-10 - 23.26 GB - 0:12:44
2023-11 - 25.97 GB - 0:13:45
2023-12 - 19.7 GB - 0:10:17
Stats
cf. sqlite_stats.py
Ce script calcule des stats sur la base de requêtes de type SELECT sur la BDD. Le résultat est présenté sous la forme d'un fichier CSV. Un copier/coller permet de l'intégrer dans un tableau Excel.
La calcul des dure environ 5 à 7 minutes.
Fomrat PARQUET
La création d'un fichier parquet n'est pas évidente.
SQLITE to PARQUET
cf. sqlite_to_parquet.py
La première tentative a conduit à créer un fichier parquet à partir du fichier SQLite (cf. sqlite_to_parquet.py
).
Cela reste assez simple, mais nécessite de passer par une étape initiale assez longue de génération du fichier SQLITE (cf. supra). On obtient alors un fichier parquet par table de la base de données.
L'exploitation se fait via parquet_sqlite_stats.py
.
JSON to PARQUET
cf. parquet_import.py
Un autre test a été réalisé en intégrant les logs dans le fichier parquet sur le modèle de ce qui a été fait pour la BDD SQLite (cf. json_to_parquet.py). L'opération est relativement longue mais présente 2 avantages:
- On obtient au final 2 fichiers parquets "logs.parquet" et "layers.parquet" avec l'ensemble des données
- La taille des fichiers est réduite : 8 Go au total pour les 2 fichiers alors que la base SQLite fait 56 Go et les données sources en JSON 113 Go.
La durée de convertion est d'environ 1h30.
L'exploitation des données est réalisée avec le fichier "parquet_stats.py".
cf. parquet_stats.py
TODO
- Intégrer dans "layers.parquet" les requêtes provenant de flux WFS.
- Donner la possibilité de générer le fichier "layers.parquet" à parir de "logs.parquet" pour faciliter la mise à jour.