Bases de PromQL

DockerBeginner
Pratiquer maintenant

Introduction

Bienvenue dans ce laboratoire pratique sur les bases de PromQL. Prometheus est un puissant outil open-source de surveillance et d'alerte, et son langage de requête, PromQL, est au cœur de sa puissance. PromQL vous permet de sélectionner et d'agréger des données de séries temporelles en temps réel.

Dans ce laboratoire, vous travaillerez avec un environnement pré-configuré composé d'un serveur Prometheus qui collecte activement des métriques d'un Node Exporter. Votre objectif est d'apprendre la syntaxe fondamentale de PromQL pour interroger ces données, en commençant par des sélections de métriques simples et en progressant vers des requêtes plus avancées utilisant des fonctions et des filtres.

Comprendre l'environnement fourni

Dans cette étape, vous vous familiariserez avec l'environnement du laboratoire. Le processus de configuration a déjà démarré deux conteneurs Docker pour vous. Vous n'avez aucune configuration à effectuer.

Les deux conteneurs sont :

  • node-exporter : Ce conteneur a pour but d'exposer une grande variété de métriques matérielles et liées au noyau de la machine hôte sur laquelle il s'exécute.
  • prometheus : C'est le serveur Prometheus lui-même. Il est configuré pour "scraper" (collecter) les métriques du node-exporter et les stocker dans sa base de données de séries temporelles.

Vous pouvez vérifier que les deux conteneurs sont en cours d'exécution en exécutant la commande docker ps dans le terminal.

docker ps

Vous devriez voir une sortie similaire à la suivante, listant les conteneurs prometheus et node-exporter avec un statut "Up".

CONTAINER ID   IMAGE                       COMMAND                  CREATED          STATUS         PORTS                                       NAMES
486db39ca176   prom/prometheus      "/bin/prometheus --c…"   9 seconds ago    Up 8 seconds   0.0.0.0:9090->9090/tcp, :::9090->9090/tcp   prometheus
3f02110c8fde   prom/node-exporter   "/bin/node_exporter"     11 seconds ago   Up 8 seconds   0.0.0.0:9100->9100/tcp, :::9100->9100/tcp   node-exporter

Cela confirme que votre pile de surveillance est prête. Dans l'étape suivante, vous accéderez à l'interface utilisateur de Prometheus pour commencer à interroger ces métriques.

Dans cette étape, vous accéderez à l'interface web de Prometheus et localiserez le navigateur d'expressions (Expression Browser), qui est l'outil principal pour exécuter des requêtes PromQL.

Le serveur web du conteneur Prometheus s'exécute sur le port 9090, et l'environnement de laboratoire vous le rend automatiquement accessible.

  1. Cliquez sur le bouton + dans l'interface LabEx et choisissez Web Service.
  2. Entrez 9090 pour le port et ouvrez le nouvel onglet qui apparaît.

Cette action ouvre l'interface utilisateur de Prometheus dans un onglet séparé au sein de votre environnement de laboratoire. Par défaut, vous devriez arriver sur la page Graph. Sur cette page, vous verrez un champ de texte intitulé Expression. C'est le navigateur d'expressions, où vous saisirez et exécuterez toutes vos requêtes PromQL pour ce laboratoire.

Prometheus Expression Browser

Maintenant que vous savez où exécuter les requêtes, vous êtes prêt à écrire votre première.

Exécuter une requête de base comme node_cpu_seconds_total

Dans cette étape, vous exécuterez votre première requête PromQL de base pour sélectionner une métrique. La requête la plus simple en PromQL est simplement le nom d'une métrique. Cela sélectionnera toutes les séries temporelles qui portent ce nom de métrique.

Accédez au navigateur d'expressions dans l'interface utilisateur de Prometheus que vous avez ouvert à l'étape précédente.

  1. Dans le champ de saisie Expression, tapez le nom de métrique suivant :
node_cpu_seconds_total
  1. Cliquez sur le bouton Execute.

Après l'exécution, regardez les résultats dans la vue Table sous le graphique. Vous verrez une liste de séries temporelles.

node_cpu_seconds_total{cpu="0", instance="node-exporter:9100", job="node", mode="idle"}      3456.78
node_cpu_seconds_total{cpu="0", instance="node-exporter:9100", job="node", mode="iowait"}    12.34
node_cpu_seconds_total{cpu="0", instance="node-exporter:9100", job="node", mode="system"}    56.78
...

Analysons ce résultat :

  • node_cpu_seconds_total : C'est le nom de la métrique. Il représente un counter (compteur) qui suit le nombre total de secondes pendant lesquelles le CPU a été dans différents modes.
  • {cpu="0", mode="idle", ...} : Ce sont les labels (étiquettes). Les labels sont des paires clé-valeur qui identifient de manière unique une série temporelle. Ici, vous pouvez voir différentes séries pour chaque cœur de CPU (cpu="0") et chaque mode (mode="idle", mode="system", etc.).
  • 3456.78 : C'est la dernière valeur enregistrée pour cette série temporelle spécifique. Comme il s'agit d'un compteur, cette valeur n'augmentera qu'avec le temps.

Note : Si vous ne voyez pas la dernière valeur, cliquez sur la boîte de dialogue Labby dans le coin droit de la page et fermez-la temporairement.

Vous avez réussi à interroger Prometheus pour toutes les séries temporelles d'une métrique spécifique.

Appliquer la fonction rate et les filtres de labels

Dans cette étape, vous affinerez votre requête en utilisant des filtres par labels et la fonction rate() pour obtenir des données plus significatives. La valeur brute d'un compteur est souvent peu utile ; nous nous intéressons généralement davantage à son taux de changement.

Tout d'abord, filtrons les résultats pour n'afficher que le temps CPU passé en mode idle. Vous pouvez le faire en ajoutant un sélecteur de label entre accolades {} à votre requête.

  1. Entrez la requête suivante dans le navigateur d'expressions et exécutez-la :
node_cpu_seconds_total{mode="idle"}

Cette requête ne retourne maintenant que les séries temporelles où le label mode est exactement idle.

Ensuite, calculons le taux de changement par seconde pour ce compteur. Pour cela, nous utilisons la fonction rate(). La fonction rate() doit savoir sur quelle période de temps calculer le taux. Nous spécifions cela avec un sélecteur de vecteur de plage (range vector selector), comme [5m] pour les 5 dernières minutes.

  1. Maintenant, modifiez votre requête pour l'encapsuler dans la fonction rate() et ajoutez un sélecteur de plage de 5 minutes. Exécutez la requête finale :
rate(node_cpu_seconds_total{mode="idle"}[5m])

Analysons cette requête avancée :

  • node_cpu_seconds_total{mode="idle"} : C'est le sélecteur de vecteur instantané (instant vector selector) qui filtre pour la métrique et le label souhaités.
  • [5m] : C'est le sélecteur de plage (range selector), qui indique à Prometheus de récupérer tous les points de données des 5 dernières minutes pour les séries temporelles sélectionnées.
  • rate(...) : C'est la fonction qui prend la plage de données de 5 minutes et calcule le taux moyen par seconde auquel le compteur a augmenté.

Le résultat n'est plus une grande valeur de compteur, mais une valeur généralement comprise entre 0 et 1 (pour un seul cœur de CPU). Une valeur de 0.95 signifierait que sur les 5 dernières minutes, le CPU était, en moyenne, inactif à 95 %. C'est une information beaucoup plus utile pour la surveillance.

Résumé

Félicitations pour avoir terminé ce laboratoire sur les bases de PromQL ! Vous avez réussi à interroger une instance Prometheus en direct et à transformer des données brutes en informations significatives.

Dans ce laboratoire, vous avez appris à :

  • Naviguer dans l'interface utilisateur de Prometheus jusqu'au navigateur d'expressions (Expression Browser).
  • Exécuter des requêtes de base pour sélectionner toutes les séries temporelles d'une métrique.
  • Comprendre la structure d'une série temporelle, y compris son nom de métrique et son ensemble unique de labels.
  • Filtrer les séries temporelles à l'aide de sélecteurs de labels ({...}).
  • Calculer le taux de changement d'un compteur à l'aide de la fonction rate() et d'un sélecteur de vecteur de plage ([5m]).

Ce sont les éléments fondamentaux pour travailler avec Prometheus. À partir de là, vous pouvez explorer les nombreuses autres fonctions et opérateurs que PromQL offre pour construire des tableaux de bord de surveillance et des alertes puissants et perspicaces.