Prometheus (logiciel)

Un article de Wikipédia, l'encyclopédie libre.
Sauter à la navigation Sauter à la recherche
Prometheus
Description de l'image Prometheus_software logo.svg.

Informations
Première version Voir et modifier les données sur Wikidata
Dernière version 2.16.0 ()[1]Voir et modifier les données sur Wikidata
Dépôt github.com/prometheus/prometheusVoir et modifier les données sur Wikidata
Assurance qualité Intégration continueVoir et modifier les données sur Wikidata
Écrit en GoVoir et modifier les données sur Wikidata
Système d'exploitation Linux, NetBSD, OpenBSD, FreeBSD, Microsoft Windows, Darwin et DragonFly BSDVoir et modifier les données sur Wikidata
Environnement X86-64, IA-32 (en), Architecture MIPS, PowerPC et architecture ARMVoir et modifier les données sur Wikidata
Type Application de supervision (d)
Time series database (en)Voir et modifier les données sur Wikidata
Licence Licence Apache version 2.0Voir et modifier les données sur Wikidata
Site web prometheus.ioVoir et modifier les données sur Wikidata

Prometheus est logiciel libre de surveillance informatique et générateur d'alertes. Il enregistre des métriques en temps réel dans une base de données de séries temporelles (avec une capacité d'acquisition élevée) en se basant sur le contenu de point d'entrée exposé à l'aide du protocole HTTP. Ces métriques peuvent ensuite être interrogé à l'aide d'un langage de requête simple (PromQL) et peuvent également servir à générer des alertes. Le projet est écrit en Go et est disponible sous licence Apache 2. Le code source est disponible sur GitHub[2], et est un projet maintenu par la Cloud Native Computing Foundation à côté d'autres projets comme Kubernetes et Envoy[3].

Prometheus a été développé chez SoundCloud partir de 2012[4], lorsque la société s'est rendu compte que ses solutions de surveillance (StatsD et Graphite) n'étaient pas adaptées à leurs besoins. Prometheus a donc été conçu pour répondre à ces problèmes : disposer d'une base de données multidimensionnelle, un outil simple à faire fonctionner, un mécanisme de collecte simple et évolutif et un langage de requête puissant, le tout dans un seul outil[5]. Le code source du projet a été dès le départ livré sous une licence libre. Cette caractéristique a aidé à une adoption rapide notamment par Boxever et Docker. Bien qu'il n'ait pas été explicitement annoncé[6]. Prometheus s'est inspiré de l'outil de surveillance Borgmon utilisé par Google[7],[8].

Depuis 2013, Prometheus est utilisé pour la surveillance de la production chez SoundCloud[5]. L'annonce publique officielle a été faite en janvier 2015.

En mai 2016, Prometheus a été le second projet incubé au sein de la Cloud Native Computing Foundation après Kubernetes. Le blog annonçant cette nouvelle indiquait que l'outil était utilisé dans de nombreuses entreprises, notamment Digital Ocean, Ericsson, CoreOS, Weaveworks, Red Hat et Google[9].

La version 1.0 de Prometheus est sortie en juillet 2016[10]. En novembre 2017, sortait la version 2.0 Prometheus[11],[12],[13],[14],[15],[16],[17],[18],[19].

En août 2018, la Cloud Native Computing Foundation annonçait que Prometheus était utilisable en production[3].

Architecture[modifier | modifier le code]

Une installation typique de Prometheus est composée de plusieurs briques : [réf. nécessaire] [ citation nécessaire ]

  • Plusieurs agents (exporteurs) qui s'exécutent généralement sur les machines à surveiller et vont exposer les métriques de suivi.
  • Prometheus pour la centralisation et le stockage des métriques.
  • Alertmanager[20] qui déclenche l'émission d'alertes en fonction de règles.
  • Grafana pour la restitution des métriques sous la forme de tableaux de bord.
  • PromQL est le langage de requête utilisé pour créer des tableaux de bord et la création d'alertes.

Format de stockage des données[modifier | modifier le code]

Les données Prometheus sont stockées sous la forme de métriques. Chaque métrique dispose d'un nom ainsi que d'un ensemble d'étiquettes prenant la forme de paire clé = valeur. Chaque métrique peut être sélectionnée en fonction de ces étiquettes. Ces étiquettes incluent des informations sur l'origine de la métrique (agent, adresse du serveur) ainsi que d'un ensemble d'informations spécifiques à l'application (code HTTP, méthode de requête), le point de terminaison, etc. La possibilité de spécifier une liste arbitraire d'étiquettes et d'interroger en fonction de celles-ci en temps réel explique pourquoi le modèle de données de Prometheus est appelé multidimensionnel[21],[5],[6].

Prometheus stocke les données localement sur disque. Cette technique permet d'optimiser le stockage rapide et la restitution[5]. Prometheus permet également de stocker des métriques sur des serveurs distants (notamment pour de l'archivage longue durée)[22].

Collecte de données[modifier | modifier le code]

Prometheus collecte des données sous forme de séries temporelles . Les séries temporelles sont récupérées de manière active : le serveur Prometheus interroge une liste de sources de données (les exporteurs) à une fréquence d'interrogation spécifique. Ces points de collecte servent de sources de données à Prometheus. Le serveur dispose également de mécanismes de découverte automatique des ressources à surveiller[23].

PromQL[modifier | modifier le code]

Prometheus dispose de son propre langage de requête PromQL (Prometheus Query Language) Ce langage permet aux utilisateurs de sélectionner et d'agréger les métriques stockées en base de données. Il est particulièrement adapté aux fonctionnements avec une base de données de séries temporelles en fournissant de nombreuses fonctionnalités spécifiques à la manipulation du temps (décalage de temps, calcul de moyenne, maximum etc.). Prometheus supporte quatre types de métriques :

  • Jauge (température absolu, quantité d'espace disque consommé)
  • Compteur (nombre de requêtes depuis le lancement d'un programme)
  • Histogramme (échantillonnage d'un nombre de requête dans plusieurs containers afin de calculer des quantiles)
  • Sommaire (relativement similaire à la notion d'histogramme avec des notions supplémentaires)

Alertes et surveillance[modifier | modifier le code]

La configuration des alertes se configure depuis Prometheus à l'aide de condition se basant sur une expression au format PromQL ainsi qu'une durée de temps permettant de caractériser le temps nécessaire pour déclencher une alerte. Lorsque les alertes se déclenchent, elles sont transmises au service d'alerte (Alertmanager). Ce dernier se charge de réaliser un certain nombre d'opérations d'agrégation, désactivation et temporisation de ces alertes avant de les transmettre par différents moyens (messagerie électronique, notification Slack ou SMS)[24].

Tableaux de bord[modifier | modifier le code]

Prometheus n'est pas conçu pour faire de la restitution d'informations sous la forme de tableau de bord bien qu'il dispose d'une solution pour le faire. Une bonne pratique est de faire appel à un outil comme Grafana même si cette solution a comme inconvénient de rendre l'installation du système de surveillance plus complexe[25].

L'interopérabilité[modifier | modifier le code]

Prometheus utilise une surveillance dite en boîte blanche. Les applications sont encouragées à exposer leurs métriques internes (à l'aide d'un exporteur) afin que Prometheus puisse les collecter à intervalle régulier[26]. Dans le cas où l'application (ou composant) ne pourrait pas le faire directement (base de données, surveillance serveurs), de nombreux exporteurs ou agents existent prêt à l'emploi pour remplir ce rôle[27]. Certains exporteurs permettent également de gérer la communication avec certains outils de surveillance (Graphite, StatsD, SNMP, JMX et CollectD) afin de simplifier la transition vers Prometheus le temps de la migration.

Prometheus se concentre sur la disponibilité de la plateforme et les opérations de base[28]. Les métriques sont généralement stockées pendant quelques semaines. Pour un stockage sur une longue durée, il est conseillé de se tourner vers des solutions de stockage plus adaptées[22].

Normalisation de OpenMetrics[modifier | modifier le code]

Le format d'exposition des métriques des exporteurs Prometheus a fait l'objet d'une standardisation sous le nom d'OpenMetrics afin de pouvoir être réutilisé ailleurs[29]. Certains produits ont adopté ce format comme par exemple la suite TICK d'InfluxData[30], InfluxDB, Google Cloud Platform[31], et DataDog[32].

Utilisation[modifier | modifier le code]

Prometheus a été utilisé pour la première fois en interne chez SoundCloud, où il a été développé, pour surveiller leurs systèmes[5]. La Cloud Native Computing Foundation a un certain nombre d'études de cas d'autres sociétés utilisant Prometheus. On retrouve par exemple la société Digital Ocean[33], le festival numérique DreamHack[34] et le service de migration de messagerie et de contact ShuttleCloud[35]. Par ailleurs, Pandora Radio a mentionné l'utilisation de Prometheus pour surveiller son pipeline de données[36].

GitLab fournit un guide d'intégration Prometheus pour exporter les métriques GitLab vers Prometheus[37]. Ce mécanisme est actif par défaut depuis la version 9.0[38]

Voir également[modifier | modifier le code]

Modèle:Portal

Références[modifier | modifier le code]

  1. « Release 2.16.0 », (consulté le 15 février 2020)
  2. « Prometheus » (consulté le 26 décembre 2018)
  3. a et b Evans, « Cloud Native Computing Foundation Announces Prometheus Graduation », (consulté le 26 décembre 2018)
  4. Brian Brazil, Prometheus: Up & Running: Infrastructure and Application Performance Monitoring, O'Reilly Media, (ISBN 978-1-4920-3409-4, lire en ligne), p. 3
  5. a b c d et e Volz et Rabenstein, « Prometheus: Monitoring at SoundCloud », SoundCloud
  6. a et b « Monitor Docker Containers with Prometheus », 5π Consulting,‎
  7. Niall Murphy, Betsy Beyer, Chris Jones et Jennifer Petoff, Site Reliability Engineering:How Google Runs Production Systems, O'Reilly Media, (ISBN 978-1491929124, lire en ligne) :

    « Even though Borgmon remains internal to Google, the idea of treating time-series data as a data source for generating alerts is now accessible to everyone through those open source tools like Prometheus ... »

  8. Volz, « PromCon 2017: Conference Recap »,  : « I joined SoundCloud back in 2012 coming from Google...we didn't yet have any monitoring tools that that works with this kind of dynamic environment. We were kind of missing the way Google did its monitoring for its own internal cluster scheduler and we were very inspired by that and finally decided to build our own open-source solution. »
  9. « Cloud Native Computing Foundation Accepts Prometheus as Second Hosted Project », Cloud Native Computing Foundation, (consulté le 26 décembre 2018)
  10. « Prometheus 1.0 Is Here », Cloud Native Computing Foundation, (consulté le 26 décembre 2018)
  11. « New Features in Prometheus 1.1.0 », Robust Perception, (consulté le 26 décembre 2018)
  12. « New Features in Prometheus 1.2.0 », Robust Perception, (consulté le 26 décembre 2018)
  13. « New Features in Prometheus 1.3.0 », Robust Perception, (consulté le 26 décembre 2018)
  14. « New Features in Prometheus 1.4.0 », Robust Perception, (consulté le 26 décembre 2018)
  15. « New Features in Prometheus 1.5.0 », Robust Perception, (consulté le 26 décembre 2018)
  16. « New Features in Prometheus 1.6.0 », Robust Perception, (consulté le 26 décembre 2018)
  17. « New Features in Prometheus 1.7.0 », Robust Perception, (consulté le 26 décembre 2018)
  18. « New Features in Prometheus 1.8.0 », Robust Perception, (consulté le 26 décembre 2018)
  19. « New Features in Prometheus 2.0.0 », Robust Perception, (consulté le 26 décembre 2018)
  20. https://github.com/prometheus/alertmanager
  21. « Data model », Prometheus (consulté le 26 décembre 2018)
  22. a et b « Integrations - Prometheus », prometheus.io
  23. « Prometheus: Collects metrics, provides alerting and graphs web UI », (consulté le 26 décembre 2018)
  24. Dubey, « AlertManager Integration with Prometheus », (consulté le 26 décembre 2018)
  25. Ryckbosch, « Prometheus monitoring: Pros and cons », (consulté le 26 décembre 2018)
  26. Prometheus, « Instrumentation - Prometheus », prometheus.io
  27. « Exporters », prometheus.io
  28. Prometheus, « Prometheus - Monitoring system & time series database », prometheus.io
  29. « OpenMetrics », GitHub,
  30. « Telegraf from InfluxData »,
  31. « Announcing Stackdriver Kubernetes Monitoring »
  32. « DataDogHQ »
  33. Evans, « Prometheus User Profile: How DigitalOcean Uses Prometheus », Cloud Native Computing Foundation, (consulté le 26 décembre 2018)
  34. Evans, « Prometheus User Profile: Monitoring the World's Largest Digital Festival – DreamHack », Cloud Native Computing Foundation, (consulté le 26 décembre 2018)
  35. Evans, « Prometheus User Profile: ShuttleCloud Explains Why Prometheus Is Good for Your Small Startup », Cloud Native Computing Foundation, (consulté le 26 décembre 2018)
  36. Haidrey, « Apache Airflow at Pandora », Engineering at Pandora, (consulté le 26 décembre 2018)
  37. « GitLab Prometheus metrics » (consulté le 26 décembre 2018)
  38. « GitLab 9.0 released with Subgroups and Deploy Boards », GitLab,

Lectures complémentaires[modifier | modifier le code]

  • McKendrick Russ, Monitoring Docker : monitor your Docker containers and their apps using various native and third-party tools with the help of this exclusive guide!, Birmingham, UK, (ISBN 9781785885501, OCLC 933610431)
  • HECK JOSEPH., KUBERNETES FOR DEVELOPERS use kubernetes to develop, test, and deploy your applications with the help of containers;use kubernetes to develop, [S.l.], PACKT PUBLISHING, (ISBN 978-1788830607, OCLC 1031909876)
  • Burns, Brendan 1976-, Designing distributed systems : patterns and paradigms for scalable, reliable services, Sebastopol, CA, First, (ISBN 9781491983614, OCLC 1023861580)
  • Helmich Martin., Cloud Native programming with Golang Develop microservice-based high performance web apps for the cloud with Go, Birmingham, Packt Publishing, (ISBN 9781787127968, OCLC 1020029257)
  • Shrivastwa Alok, Hybrid cloud for architects : build robust hybrid cloud solutions using AWS and OpenStack, Birmingham, UK, (ISBN 9781788627986, OCLC 1028641698)
  • Chanwit Kaewkasi, Native Docker Clustering with Swarm, (ISBN 978-1786469755)