Retour du Breizhcamp : Prometheus et Grafana

Ronan Barbot
03/07/2018

Cette année j’ai eu la chance de pouvoir venir au Breizhcamp avec tous mes collègues de chez Slickteam. C’était ma cinquième participation, avec cette année encore une programmation très intéressante, des sujets variés et quelques choix cornéliens entre des conférences.

J’ai choisi de parler de Prometheus et Grafana, qui ont été présentés lors d’une conférence de Pierre-Yves Aillet et Yoan Rousseau. Prometheus permet de collecter des métriques, il fonctionne avec une base de données en série temporelle. Grafana est un logiciel permettant d’afficher des graphes et ainsi constituer des tableaux de bords, notamment pour faire de la supervision. Chez Slickteam nous sommes en train de monter notre plateforme et la supervision sera importante pour suivre les différents services qui y seront déployés.

Prometheus est un projet développé à l’origine par SoundCloud. Il est maintenant totalement open-source et géré au sein de la Cloud Native Computing Foundation (qui gère aussi Kubernetes). Il permet de collecter des métriques et de pouvoir les consolider en temps réel afin notamment de pouvoir faire de la maintenance préventive. On peut gérer des métriques techniques et des métriques métier. Ses principales fonctionnalités sont :

  • Stockage sous forme de time series à plusieurs dimensions (un nom de métrique + un ou plusieurs libellés)

  • Langage PromQL pour le requêtage

  • Récupération de métriques en mode pull

Par contre, Prometheus ne fait pas :

  • De gestion / collecte de logs

  • De stockage sur une longue durée

  • De scaling horizontal

  • De gestion d’utilisateurs

Cela dans le but de rester le plus simple possible. Son architecture est constituée d’un ensemble de services :

Schéma d’architecture de Prometheus (© Prometheus)

Les services sont donc :

  • Le serveur Prometheus principal, qui récupère et enregistre les données

  • Des librairies clientes qui répondront aux appels du serveur Prometheus en envoyant les métriques sur demande

  • Une passerelle push (Pushgateway) qui sert pour les jobs à durée de vie courte

  • Des exporters pour exporter les données vers d’autres services (HAProxy, StatsD, …)

  • Un alertmanager permettant de faire de l’alerting à partir de seuils définis sur les métriques

  • Une WebUI, qui permet surtout de tester des requêtes PromQL

Prometheus gère 2 types de métriques, des métriques brutes (basic counters) et des métriques plus complexes (sampling counters). Les métriques plus complexes sont en fait des données brutes que l’on a travaillées pour fournir à l’utilisateur des données prémachées pour faciliter leur exploitation. Avec les métriques brutes on peut faire des diagrammes de type compteur ou jauge, avec les métriques complexes des histogrammes ou des diagrammes “summary” (valeurs moyennes sur une période de temps).

Une fois ces métriques collectées on peut les exploiter grâce au langage de requêtes PromQL (Prometheus QL). C’est un langage dédié à Prometheus et pensé par rapport aux besoins d’exploitation des métriques. On peut trouver la doc ici. Voici quelques exemples de requêtes (simples, ou utilisant des fonctions) :

httprequeststotalhttprequeststotalhttprequeststotalsum(rate(httprequeststotal[5m])) by (job)topk(3, sum(rate(instancecputime_ns[5m])) by (app, proc))

La webUI de Prometheus est très utile pour débugger des requêtes PromQL, par contre pour faire des tableaux de bord réellement exploitable il est préférable d’utiliser Grafana.

Exemple de résultat d’une requête PromQL dans la WebUI Prometheus

Grafana est un outil web permettant de réaliser facilement des tableaux de bord, notamment pour faire de la supervision. Il supporte nativement Prometheus et peut exploiter ses données. On trouve des tableaux prêts à être utilisés sur le site officiel. Grafana permet de requêter, visualiser et créer des alertes sur des métriques Prometheus.

Exemple de tableau de bord Grafana

Grafana se configure très simplement, tout peut se faire via l’interface graphique. On peut utiliser les différents types de graphes et mixer des sources de données différentes pour avoir des affichages le plus pertinent possible. On peut également faire de l’alerting sur les métriques et envoyer des notifications via email, slack, webhook, …

Cette conférence est très intéressante et permet d’avoir une bonne idée du système dans son ensemble ainsi que de sa mise en place au sein d’un SI ou juste pour une application. Les démos permettent de voir le système fonctionner en live avec la webUI et Grafana.

Toutes les vidéos du Breizhcamp sont maintenant en ligne, la vidéo de la conférence est disponible ici pour voir la totalité des sujets abordés et les démos.

Slickteam