Bonjour à tous ! Aujourd’hui je vais vous présenter Prometheus et Grafana dans un tutoriel simple. J’ai pu utilisé ces logiciels dans un projet d’étude et j’aimerais partager avec vous comment implémenter ces outils.
Prometheus
Tout d’abord , qu’est ce que Prometheus ? Selon leur page web, il se décrive comme “un système de surveillance open-source avec un modèle de données dimensionnel, un langage de requête flexible, une base de données de séries temporelles efficace et une approche d’alerte moderne.”
Bien que je connaisse pas toutes les fonctionnalités que peut offrir cet outil, j’ai pu l’utiliser pour scrapper les metrics d’évolution de mon modèle de ML afin de suivre son évolution dans le temps. Ce qui est très pratique pour avoir des alertes lorsque le modèle n’apporte plus le résultat attendu.
Grafana
Quand a Grafana, qui fonctionne avec Prometheus il s’agit d’un outil qui permet de faire des visualisations à partir des metrics scrappés par Prometheus.
Voici la description que j’ai trouvé en ligne : “Grafana est une application web open source multiplateforme d’analyse et de visualisation interactive. Elle permet de créer des graphiques, des courbes et des alertes à partir de sources de données prises en charge, pour une utilisation sur le web.”
Le projet
Le projet sur lequel j’ai travaillé est simple. Déployer plusieurs services docker qui permettront de :
- lancer une interface web (qui utilise notre modèle ML)
- entrainer notre modèle ML
- utiliser un service intermédiaire prometheus pushgateway pour envoyer les metrics de mon train.py
- accéder à grafana (interface de visualisation qui sera connecté à Prometheus)
- accéder à Prometheus (récupère les données du pushgateway)
Pour vous présenter l’arborescence des fichiers de ce projet :
nous avons un dossier api pour notre interface Flask, un dossier avec notre code d’entrainement, un dossier pour déployer grafana et un autre pour prometheus.
Dans votre dossier Prometheus, vous aurez votre fichier de configuration prometheus.yml .
Dans mon cas, j’ai configuré l’écoute sur notre service pushgateway (port 9091) comme ci dessus. Pushgateway permet de collecter et d’exposer les métriques provenant de processus qui ne sont pas exposés en permanence à Prometheus, tels que les batchs, les tâches planifiées et les scripts. Etant donné que mon service “train” se désactive à chaque fois que l’entrainement se termine j’ai du utilisé pushgateway comme service intermédiaire sur lequel Prometheus “écoute” mes données au lieu d’écouter directement sur mon service ‘train’.
Dans votre docker-compose , il faudra en effet créer un service pour chaque de ces outils.
Pour récupérer les données rien de plus simple. Nous utilisons un client python pour Prometheus et nous importons la jauge (Gauge en anglais) . Dans Prometheus, la jauge est un type de métrique qui représente une valeur numérique qui peut varier dans le temps (comme nos metrics de prédictions).
A la fin de notre fichier de “train” lorsque nous récupérons les metrics d’évaluation, nous initialisons un registre qui nous permet d’enregistrer nos données.
La Jauge peut prendre plusieurs paramètres. Dans notre cas, nous avons le nom de notre jauge, la description ainsi que des informations sur les labels : nom du modèle et nom du dataset utilisé pour l’entrainement.
`.set(accuracy)` nous permet de récupérer les données d’évaluation du modèle. Accuracy correspond à la variable dans laquel j’ai stocké ma metric.
Nous poussons ces données vers le service pushtogateway et c’est tout ! Normalement ca devrait suffir pour vous permettre de récupérer vos metrics.
Lorsque vous accédez à votre interface pushgateway, vous verrez appaitre le nom de votre Gauge
Sur votre interface Prometheus vous verrez le suivi de votre modèle
Une fois ces metrics disponible. Vous pourrez utiliser ces données pour créer des panels et des tableaux de port sur Grafana.
Je vous mettrai bientôt le projet sur github pour vous permettre de tester l’outil.
A bientôt et à très vite