Connecter Centreon à Prometheus grâce à l’installation du Plugin Pack centreon-pack-cloud-prometheus-api vous permet d’exploiter les métriques collectées par Prometheus directement dans Centreon et de centraliser les résultats de votre collecte de métriques et de l’envoi d’alertes au sein de Centreon. 

Via ses mécanismes de collecte et son intégration dans de nombreuses stacks de containerisation et d’orchestration, Prometheus permet une grande agilité dans la collecte d'informations éphémères et/ou dynamiques. Son langage PromQL permet d’interroger de manière optimisée les données collectées et c’est sur ce concept que repose l’intégration avec Centreon. Cet article vous explique comment en tirer pleinement parti !

Connecter Prometheus avec Centreon pour disposer d’une vision Cloud-to-Edge à 360 degrés  

Vous avez surement pris connaissance du Baromètre de la supervision IT réalisé par Centreon avec le cabinet Vanson Bourne. 

Cette étude, réalisée auprès de 600 professionnels IT dans le monde, révèle que 14 outils de supervision IT en moyenne sont utilisés par les DSI et que la première attente en matière d’outils de supervision est son interopérabilité et sa capacité à s’intégrer dans son écosystème IT.

Henri Ford disait : « Se réunir est un début, rester ensemble est un progrès, travailler ensemble est une réussite ». Aujourd'hui nous vous proposons de faire travailler ensemble Centreon avec Prometheus, une solution particulièrement performante en matière de stockage de métriques issues du cloud native et de conteneurs. 

En interfaçant Centreon avec cet outil, et en intégrant les métriques issues de Prometheus dans la plateforme de supervision Centreon, vous pourrez disposer d’une meilleure visibilité. Vous exploitez ainsi les qualités de ces deux outils, consolidez les données collectées dans une console unique et émettez les alertes de manière centralisée. Elle n’est pas belle la vie ?

Orienté métriques Orienté statut, alertes et supervision
Faible fréquence de collecte via HTTP et une approche à court terme du stockage et de la visualisation des données Historisation et capacité d’agrégation des données
Container native, large bibliothèque d'exporters de nœuds, facilité de déploiement dans les clusters K8 Visibilité Cloud-to-edge, accès aux métriques et aux alertes dans une console unique 

Connecter Prometheus avec Centreon vous permet de disposer d’une vision à 360 degrés de vos infrastructures Cloud-to-Edge et de vos applications quelle que soit la manière dont elles sont déployées ou orchestrées. 

La centralisation de la collecte et de l’alerting dans Centreon offre : 

  • Une meilleure visibilité, toutes les personnes exploitant la solution ont accès à l’ensemble des indicateurs collectés au travers de vos différents outils,
  • Une meilleure exploitation des informations IT et métiers en corrélant et partageant l’ensemble de vos données collectées grâce aux modules de la solution Business de Centreon.

Etape 1 : Installation et déploiement du Plugin Pack Prometheus Server

Pour exploiter les métriques Prometheus dans la console Centreon, vous devez réaliser l’installation des briques nécessaires au fonctionnement du Plugin Pack Prometheus Server en deux étapes. 

Sur le serveur Central, installez le package RPM permettant l’ajout des Modèles de supervision : 

yum install centreon-pack-cloud-prometheus-api

Dans le menu “Configuration > Packs de plugins”, recherchez “Prometheus” et cliquez sur le signe ‘+’ pour finaliser l’installation.

Remarque : Si vous utilisez la solution IT-100 ou un mode de souscription en ligne, vous pouvez directement installer le Pack depuis le menu “Configuration > Packs de plugins” comme le montre la capture précédente. 

Une fois le Pack installé, la description de son contenu ainsi qu’un renvoi vers sa documentation sont accessibles.

Sur les Collecteurs allant réaliser une supervision via des requêtes PromQL, installez le Plugin :

yum install centreon-plugin-Cloud-Prometheus-Api

Etape 2 : Configuration de votre Serveur Prometheus dans Centreon

La configuration d’un serveur Prometheus se fait de manière classique via la page “Configuration  > Hôtes” et l’utilisation du bouton Ajouter. Cela vous permet de définir les propriétés de votre serveur et de lui appliquer le Modèle adéquat (Cloud-Prometheus-Api-Custom).

Ici, nous allons nous interfacer avec le serveur “amzprometheus.int.centreon.com” déployé via Kubernetes en écoutant sur le port 80 en HTTP. L’API v1 de Prometheus sera utilisée. Ces paramètres sont à adapter en fonction de votre environnement. 

Voici la définition de l’Hôte associé :

Activez la création des Services liés au Modèle et sauvegardez votre configuration. 

Vous pouvez déployer votre configuration afin d’obtenir la supervision par défaut. Celle-ci inclut un Ping et le statut des Targets déclarés dans Prometheus.

Le connecteur fonctionne correctement et il détecte ci-dessus un défaut sur le statut d’une ou plusieurs Targets définies au niveau de Prometheus qui ne sont pas vues comme “up”. 

C’est un indicateur intéressant mais nous allons voir que ce connecteur permet également de faire des choses beaucoup plus puissantes en interrogeant les données collectées au travers de ces Targets.

Etape 3 : Supervision du CPU de vos conteneurs en agrégeant des requêtes PromQL en un service Centreon

Contexte et métriques

cAdvisor est généralement déployé afin d’obtenir des métriques d’usage et de performances des conteneurs. Les métriques exposées sont brutes et nécessitent souvent des opérations supplémentaires pour être exploitées de manière optimale.

Dans le cas de l’utilisation CPU, celle-ci est particulièrement critique car elle peut être le déclencheur d’une instanciation d’un nouveau conteneur lorsqu’un seuil est dépassé. C’est souvent le cas lors de l’utilisation de Kubernetes par exemple et nous allons voir comment vous pouvez tracer l’évolution de la consommation du processeur selon l’axe de votre choix !

Les métriques exposées par cAdvisor et scrappées par Prometheus que nous allons exploiter sont les suivantes : 

  • container_cpu_usage_seconds_total :

    compteur indiquant le temps en secondes où le CPU est utilisé par un conteneur.

  • container_cpu_cfs_throttled_seconds_total :

     compteur indiquant le temps en seconde où l’utilisation CPU du conteneur a été limitée. 

Ces métriques sont des compteurs, cela signifie qu’elles seront plus facilement interprétables après application d’une transformation. Ici nous allons comparer l’évolution entre chaque point (fonction rate()), sur une période de 5 minutes ([5m]) et en multipliant le nombre obtenu par 100 pour obtenir un pourcentage (*100). 

Nous introduisons aussi le concept de dimensions au sens Prometheus, nous allons exclure tous les conteneurs avec le nom ‘POD’ et n’ayant aucun namespace associé. 

Cela donne par exemple la requête suivante pour la métrique container_cpu_usage_seconds_total

rate(container_cpu_usage_seconds_total{container!~"POD",namespace!=""}[5m])*100 

Vous pouvez valider la disponibilité de ces métriques directement via l’interface de requête Prometheus

Construire et tester la ligne de commande

Comme précisé dans la description du Plugin Pack, le mode Expression que nous allons désormais utiliser est un mode générique. Il permet donc de faire à peu près tout ce que vous voulez mais nécessite une configuration un peu plus conséquente. 

Dans ce cas, il est recommandé de d’abord tester la construction de votre commande via le terminal, toujours en utilisant le compte centreon-engine. Cela est généralement indispensable si c’est la première fois que vous utilisez ce Plugin.

Comme pour toutes les sondes, il est utile d'exécuter le script avec l’option --help pour prendre connaissances des différents paramètres disponibles : 

/usr/lib/centreon/plugins/centreon_prometheus_api.pl --plugin=cloud::prometheus::restapi::plugin --mode=expression --help

Voyons maintenant comment personnaliser la commande avec vos propres paramètres, ci-dessous, remplacez les valeurs des options --hostname et --port par celles correspondant à la configuration de votre serveur Prometheus :

/usr/lib/centreon/plugins/centreon_prometheus_api.pl --plugin=cloud::prometheus::restapi::plugin --mode=expression --hostname=’amzprometheus.int.centreon.com’ --port=’80’ --url-path='/api/v1' --proto=’http’

Maintenant, nous allons entrer dans le vif du sujet et spécifier les requêtes permettant d’obtenir les métriques décrites précédemment :

/usr/lib/centreon/plugins/centreon_prometheus_api.pl --plugin=cloud::prometheus::restapi::plugin --mode=expression --hostname=my.prometheus.instance.int --port=80 --url-path='/api/v1' --proto=’http’ --query='utilization,rate(container_cpu_usage_seconds_total{container!~"POD",namespace!=""}[5m])*100' --query='throttled,rate(container_cpu_cfs_throttled_seconds_total{container!~"POD",namespace!=""}[5m])*100'

La syntaxe de l’option pour spécifier sa requête se décompose de la manière suivante : --query=centreon_name,promql_expression. La partie centreon_name transforme le nom de la métrique pour rendre son utilisation plus facile par la suite via la fonction label_replace de Prometheus. La partie promql_expression est un simple copier/coller de la requête que vous utilisez dans l’interface Prometheus, simple non ? 

Une métrique est liée à de multiples dimensions, la puissance du connecteur réside dans le fait que vous choisissez celle qui est la plus pertinente pour votre supervision, dans notre cas nous souhaitons avoir des valeurs agrégées au niveau des nœuds.

/usr/lib/centreon/plugins/centreon_prometheus_api.pl --plugin=cloud::prometheus::restapi::plugin --mode=expression --mode=expression --hostname=my.prometheus.instance.int --port=80 --url-path='/api/v1' --proto=’http’ --query='utilization,rate(container_cpu_usage_seconds_total{container!~"POD",namespace!=""}[5m])*100' --query='throttled,rate(container_cpu_cfs_throttled_seconds_total{container!~"POD",namespace!=""}[5m])*100' --instance=’node

Afin de faciliter le travail des opérateurs ou du consommateur du contrôle, des options sont disponibles pour préciser un formatage afin qu’il s’adapte en fonction de la ou des métrique(s) récupérées. C’est ici que le renommage de la métrique Prometheus prend tout son sens, nous allons les utiliser pour afficher leur valeur dans le message de sortie. 

/usr/lib/centreon/plugins/centreon_prometheus_api.pl --plugin=cloud::prometheus::restapi::plugin --mode=expression --mode=expression --hostname=my.prometheus.instance.int --port=80 --url-path='/api/v1' --proto=’http’ --query='utilization,rate(container_cpu_usage_seconds_total{container!~"POD",namespace!=""}[5m])*100' --query='throttled,rate(container_cpu_cfs_throttled_seconds_total{container!~"POD",namespace!=""}[5m])*100'
--instance=’node’  --output='Node %{instance} Average: %{utilization}%, Throttled: %{throttled}%' --multiple-output='All nodes CPU metrics are OK'

Avec les options ci-dessus, si aucun dépassement n’est détecté et que tous les nodes ont des mesures CPU satisfaisantes, le message affiché dans Centreon sera : OK: All nodes CPU metrics are ok.  Si le résultat de notre filtre est un conteneur unique, nous obtiendrons un message détaillé comme celui-ci : OK: nodes ‘my_node_name’ Average: 4.3413%, Throttled: 0.1214%.

Et voilà ! Voici la commande que nous venons de créer :

/usr/lib/centreon/plugins//centreon_prometheus_api.pl \ --plugin=cloud::prometheus::restapi::plugin --mode=expression --proto='http' \ --hostname=amzprometheus.int.centreon.com --url-path='/api/v1' --port='80' \ --query='utilization,rate(container_cpu_usage_seconds_total{container!~"POD",namespace!=""}[5m])*100' \ --query='throttled,rate(container_cpu_cfs_throttled_seconds_total{container!~"POD",namespace!=""}[5m])*100' \
--instance='node' \
--output='Node %{instance} Average (Last 5min): %{utilization}%, Throttled(Last 5min): %{throttled}%' --multiple-output='All CPU metrics are OK' --verbose --use-new-perfdata

Et son retour :

OK: All CPU metrics are OK | 'amzkubemaster.int.centreon.com#utilization'=0.4481031485383696;;;; 'amzkubemaster.int.centreon.com#throttled'=2.4699414529294077;;;; 'amzkubenode1.int.centreon.com#utilization'=0;;;; 'amzkubenode1.int.centreon.com#throttled'=0;;;; 'amzkubenode2.int.centreon.com#utilization'=0;;;; 'amzkubenode2.int.centreon.com#throttled'=0;;;;
Node amzkubemaster.int.centreon.com Average (Last 5min): 0.4481031485383696%, Throttled(Last 5min): 2.4699414529294077%
Node amzkubenode1.int.centreon.com Average (Last 5min): 0%, Throttled(Last 5min): 0%
Node amzkubenode2.int.centreon.com Average (Last 5min): 0%, Throttled(Last 5min): 0%

Passons maintenant au paramétrage dans Centreon.

Etape 4 : Implémentation dans Centreon et génération d’alertes

L’implémentation dans Centreon se fait de la manière suivante :  

  • Ajoutez un nouveau Service au travers de la page “Configuration > Services” 
  • Renseignez la description du Service
  • Attachez le Service à l’hôte de votre choix
  • Sélectionnez le modèle “Cloud-Prometheus-Expression-Api-custom”
  • Remplissez les macros adéquates, si l’on se base sur la commande précédente, voici un tableau récapitulatif :
Ligne de commande Macro (nom)  Macro (valeur)
--query='utilization,rate(container_cpu_usage_seconds_total
{container!~"POD",namespace!=""}[5m])*100' --query='throttled,rate(container_cpu_cfs_throttled_seconds_total
{container!~"POD",namespace!=""}[5m])*100'
QUERIES --query='utilization,rate(container_cpu_usage_seconds_total
{container!~"POD",namespace!=""}[5m])*100'
--query='throttled,rate(container_cpu_cfs_throttled_seconds_total
{container!~"POD",namespace!=""}[5m])*100'
--instance='node' INSTANCE node
--output='Node %{instance} Average (Last 5min): %{utilization}%, Throttled(Last 5min): %{throttled}%' OUTPUT Node %{instance} Average (Last 5min): %{utilization}%, Throttled(Last 5min): %{throttled}%
--multiple-output='All CPU metrics are OK' MULTIPLEOUTPUT All Nodes CPU metrics are OK
--critical-status='%{throttled} > 1' CRITICALSTATUS %{throttled} > 1

Dans la configuration du Service, nous avons ajouter une valeur à la Macro CRITICALSTATUS qui se traduit par une alerte CRITICAL si la valeur récupérée pour Throttled (métrique ) est supérieure à 1.

La capture d’écran ci-dessous montre le résultat au niveau de Centreon.

Une particularité de ce Service est qu’il va pouvoir être attaché à votre Hôte Prometheus comme à un autre Hôte selon l’exploitation faite de la mesure. Quelle que soit la solution retenue, il faut que l’Hôte en question :

  • Utilise le Modèle ‘Cloud-Prometheus-Api-Custom’
  • Possède une Macro PROMETHEUSAPIHOSTNAME dont la valeur est l’adresse IP ou le FQDN du Serveur Prometheus

Une fois ces conditions réunies, vous pouvez déployer votre configuration et le tour est joué.

Tags :