Prometheus

Prometheus
Première Version 2012
Dernière Version 3.8.1
Fonction Application de Surveillance
BdD chronologique
Site web prometheus.io/

Prometheus est un 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ées à 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, et est un projet maintenu par la Cloud Native Computing Foundation à côté d’autres projets comme Kubernetes et Envoy.

Architecture

Format de stockage des données

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.

Collecte de données

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.

Alertes et surveillance

La configuration des alertes se configure depuis Prometheus à l’aide de conditions 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).

Tableaux de bord

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.

Comment ça fonctionne ?

[Applications / Services]
          expose /metrics
[Prometheus scrape]  pull toutes les X secondes

[TSDB — Time Series Database]

[Alertmanager]  Email, Slack, PagerDuty...

Prometheus fonctionne en mode pull : c’est lui qui va chercher les métriques, pas l’inverse.

Concepts clés



Types de métriques

Exemple PromQL

# Taux de requêtes HTTP sur 5 minutes
rate(http_requests_total[5m])

# Latence p99
histogram_quantile(0.99, rate(http_request_duration_seconds_bucket[5m]))

# Alerter si CPU > 80%
100 - (avg by(instance)(rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100) > 80