Prometheus est un système de surveillance open-source basé sur des métriques. Il collecte des données auprès des services et des hôtes en envoyant des requêtes HTTP sur des points d’extrémité de métriques. Il stocke ensuite les résultats dans une base de données chronologique et les met à disposition pour l’analyse et l’alerte.

Pourquoi surveiller ?

  • Pour pouvoir être alerté en cas de problème, de préférence avant qu’il ne survienne. Pour que quelqu’un puisse y jeter un coup d’œil.
  • Il fournit des informations permettant d’analyser, de déboguer et de résoudre le problème.
  • Il vous permet de voir les tendances/changements dans le temps. Par exemple, le nombre de sessions actives à un moment donné. Cela vous aide à prendre des décisions en matière de conception et de planification des capacités.

La surveillance est généralement liée à des événements. Un événement peut être la réception d’une requête HTTP, l’envoi d’une réponse, la lecture d’un disque ou la connexion d’un utilisateur. La surveillance d’un système peut inclure le profilage, la journalisation, le traçage, les mesures, les alertes et la visualisation.

Surveillance “boîte noire” et surveillance “boîte blanche

La surveillance se divise en deux catégories principales :

La surveillance boîte noire

Dans le cas de la surveillance “boîte noire”, la surveillance s’effectue au niveau de l’application ou de l’hôte, tel qu’il est observé de l’extérieur. Cette méthode peut s’avérer assez restrictive.

Surveillance de la boîte blanche

La surveillance boîte blanche consiste à surveiller les éléments internes d’un service. Il expose des données sur l’état et les performances des composants internes.

prometheus

Les quatre signaux d’or

Selon Google, si vous ne pouvez mesurer que quatre paramètres de votre système orienté vers l’utilisateur, concentrez-vous sur les quatre suivants, appelés “quatre signaux d’or” :

#1. La latence

Il s’agit du temps nécessaire pour répondre à une demande, qu’elle ait abouti ou non. Il est important de suivre non seulement les demandes qui aboutissent, mais aussi celles qui échouent.

#2. Le trafic

Il s’agit d’une mesure de l’importance de la demande placée sur votre système. Pour un service web, il s’agit généralement de requêtes HTTP par seconde.

#3. Erreurs

Le taux de requêtes qui échouent.

#4. Saturation

Le degré de saturation de votre service. L’augmentation de la latence est souvent un indicateur important de la saturation. Les performances de nombreux systèmes se dégradent bien avant qu’ils n’atteignent un taux d’utilisation de 100 %.

Types de mesures Prometheus

Les mesures Prometheus sont de quatre types principaux :

#1. Compteur

La valeur d’un compteur augmente toujours. Elle ne peut jamais diminuer, mais elle peut être remise à zéro. Par conséquent, si un grattage échoue, cela signifie seulement qu’un point de données a été manqué. L’augmentation cumulative sera disponible lors de la lecture suivante. Exemples :

  • Nombre total de requêtes HTTP reçues
  • Le nombre d’exceptions.

#2. Jauge

Une jauge est un instantané à un moment donné. Elle peut augmenter ou diminuer. Si une extraction de données échoue, vous perdez un échantillon ; l’extraction suivante peut montrer une valeur différente : exemples d’espace disque, d’utilisation de la mémoire.

#3. Histogramme

Un histogramme échantillonne des observations et les compte dans des groupes configurables. Il est utilisé pour des éléments tels que la durée des requêtes ou la taille des réponses. Par exemple, vous pouvez mesurer la durée d’une requête HTTP spécifique. L’histogramme comportera un ensemble de groupes, par exemple 1 ms, 10 ms et 25 ms. Plutôt que de stocker chaque durée pour chaque requête, Prometheus stockera la fréquence des requêtes qui tombent dans une catégorie particulière.

#4. Résumé

Semblable à l’histogramme, il échantillonne des observations, généralement des durées de demande ou des tailles de réponse. Il fournit un nombre total d’observations et une somme de toutes les valeurs observées, ce qui vous permet de calculer la moyenne des valeurs observées. Par exemple, en une minute, vous avez eu trois requêtes qui ont duré 2, 3, 4 secondes. La somme serait de 9, et le compte de 3. La latence serait de 3 secondes.

Composants de l’écosystème Prometheus

prometheus architecture

Le serveur Prometheus

Collecte les métriques, les stocke et les rend disponibles pour des requêtes, envoie des alertes basées sur les métriques collectées.

Le scraping

Prometheus est un système basé sur l’extraction. Pour récupérer des métriques, Prometheus envoie une requête HTTP appelée “scrape”. Il envoie des scraps à des cibles en fonction de sa configuration.

Chaque cible (définie statiquement ou découverte dynamiquement) est scrappée à un intervalle régulier (intervalle de scrape). Chaque scrape lit le point d’extrémité HTTP /metrics pour obtenir l’état actuel des métriques du client et persiste les valeurs dans la base de données de séries temporelles Prometheus.

Il existe d’autres bases de données de séries temporelles pour les solutions de surveillance que vous pouvez explorer.

Bibliothèques client

Pour surveiller un service, vous devez ajouter une instrumentation à votre code. Il existe des bibliothèques clientes disponibles pour tous les langages et environnements d’exécution courants. En utilisant ces bibliothèques, une fois que vous avez ajouté quelques lignes de code, votre code peut commencer à émettre des métriques. C’est ce qu’on appelle l’instrumentation directe. Ces bibliothèques vous permettent de définir des mesures internes et de les exposer via un point de terminaison HTTP. Lorsque Prometheus scrape le point de terminaison HTTP des métriques, la bibliothèque client envoie les métriques au serveur.

Prometheus propose des bibliothèques clientes officielles pour Go, Java, Python et Ruby. Prometheus dispose d’un écosystème ouvert. Il existe également des bibliothèques client créées par la communauté pour C, PHP, Node.js, C#/.NET et bien d’autres.

Exportateurs

De nombreuses applications exposent des métriques dans un format autre que celui de Prometheus. Pour ces applications et pour celles que vous ne possédez pas ou pour lesquelles vous n’avez pas accès au code, vous ne pouvez pas ajouter d’instrumentation directement. Par exemple, MySQL, Kafka, JMX, HAProxy et le serveur NGINX. Dans ces scénarios, vous utilisez des exportateurs.

Un exportateur est un outil que vous déployez avec l’application pour laquelle vous souhaitez obtenir des mesures. Un exportateur agit comme un proxy entre l’application et Prometheus. Il reçoit les requêtes du serveur Prometheus, collecte les données des journaux d’accès et d’erreur de l’application, les transforme dans le bon format et les renvoie au serveur Prometheus.

Voici quelques-uns des exportateurs les plus courants :

  • Windows – pour les métriques des serveurs Windows
  • Node – pour les mesures des serveurs Linux
  • Blackbox – pour les mesures de performance des DNS et des sites web
  • JMX – pour les mesures des applications basées sur Java

Une fois que les applications ont été instrumentées ou que les exportateurs sont en place, vous devez indiquer à Prometheus où ils se trouvent. Pour ce faire, vous pouvez utiliser une configuration statique. Dans le cas d’environnements dynamiques, cela n’est pas possible ; c’est pourquoi la découverte de services est utilisée.

Alertes

L’alerte avec Prometheus se compose de deux parties –

Les règles d’alerte envoient des alertes à l’Alertmanager.

L’Alertmanager gère ensuite ces alertes. Il envoie des notifications à l’aide de nombreuses intégrations prêtes à l’emploi telles que le courrier électronique, Slack, Hipchat et PagerDuty. L’Alertmanager peut également effectuer la mise en sourdine ou l’agrégation pour réduire le nombre de notifications.

Voici le guide pour surveiller le serveur Linux en utilisant Prometheus et Dashboard.

Visualisation avec les tableaux de bord

Prometheus dispose d’un certain nombre d’API qui permettent aux requêtes PromQL de produire des données brutes à des fins de visualisation.

Bien que Prometheus comprenne un navigateur d’expressions qui peut être utilisé pour des requêtes ad hoc, le meilleur outil disponible est Grafana. Grafana s’intègre entièrement à Prometheus et peut produire une grande variété de tableaux de bord.

Vous devrez configurer Prometheus comme source de données pour Grafana.

Vous pouvez ajouter des tableaux de bord en :

  • En important des tableaux de bord élaborés par la communauté
  • En construisant les vôtres
  • En utilisant un tableau de bord prédéfini.

Voici à quoi ressemble un tableau de bord prédéfini de l’exportateur de nœuds :

grafana node exporter

Grafana dispose d’un module worldPing qui vous permet de surveiller les mesures de performance des sites et des DNS dans le monde entier.

Résumé

Prometheus a très peu d’exigences. Il peut être assez simple à exécuter car il s’agit d’un simple binaire avec un fichier de configuration. Il peut gérer des milliers de cibles et ingérer des millions d’échantillons par seconde. Prometheus est conçu pour suivre l’ensemble du système, son état de santé et son comportement.

Grafana est le meilleur outil disponible pour la visualisation des métriques et s’intègre parfaitement à Prometheus.