Introduction


Présentation de PromQL et son importance dans Prometheus.

  1. Qu'est-ce que PromQL ?

    PromQL (Prometheus Query Language) est le langage de requête utilisé dans Prometheus pour interroger les données de métriques. Il permet d'extraire des informations, de créer des alertes, et de visualiser des graphiques dans des outils comme Grafana.




  2. Pourquoi utiliser PromQL ?

    PromQL est essentiel pour analyser les métriques collectées par Prometheus. Grâce à sa syntaxe puissante et flexible, vous pouvez :

    • Surveiller les performances de vos systèmes.
    • Configurer des alertes basées sur des seuils spécifiques.
    • Créer des visualisations détaillées pour des tableaux de bord.

Bases de PromQL


Comprendre les concepts fondamentaux de PromQL.

  1. Métriques

    PromQL travaille avec des métriques qui peuvent être :

    • Counter : Une valeur cumulative qui ne décroît jamais.
    • Gauge : Une valeur qui peut augmenter ou diminuer.
    • Histogram : Une distribution de valeurs.
    • Summary : Une vue résumée des métriques.



  2. Expressions simples

    Les expressions simples permettent de récupérer des métriques brutes :

    http_requests_total

    Cela retourne toutes les valeurs actuelles de la métrique http_requests_total.


Commandes récurrentes


Les commandes les plus utilisées avec leurs explications et exemples.

  1. Filtrage avec des étiquettes

    Les métriques peuvent être filtrées à l'aide d'étiquettes :

    http_requests_total{method="GET", status="200"}

    Cela retourne uniquement les métriques où method est GET et status est 200.




  2. Agrégation

    Les fonctions d'agrégation permettent de résumer les données :

    • sum(http_requests_total) : Somme de toutes les requêtes.
    • avg(http_requests_total) : Moyenne des requêtes.
    • max(http_requests_total) : Valeur maximale.
    • min(http_requests_total) : Valeur minimale.

  3. Fonctions

    PromQL offre des fonctions pour manipuler les séries temporelles :

    • rate(metric[5m]) : Taux de changement par seconde sur une fenêtre de 5 minutes.
    • increase(metric[1h]) : Augmentation totale sur une heure.
    • irate(metric[1m]) : Taux instantané basé sur les points les plus récents.

  4. Opérations arithmétiques

    PromQL permet de faire des calculs :

    (http_requests_total{method="GET"} / http_requests_total) * 100

    Cela calcule le pourcentage des requêtes GET par rapport au total.




  5. Joindre des métriques

    Vous pouvez combiner plusieurs métriques :

    sum(cpu_usage) by (instance) / sum(cpu_limit) by (instance)

    Cela donne le ratio d'utilisation CPU par instance.


Visualisation des résultats


Afficher et analyser les résultats dans Prometheus et Grafana.

  1. Prometheus

    Dans l'interface web de Prometheus, entrez une requête PromQL dans la barre de recherche pour visualiser les résultats en temps réel.




  2. Grafana

    Grafana offre une interface plus avancée pour créer des graphiques et des tableaux de bord basés sur les requêtes PromQL.


Exemples


Quelques exemples de requêtes :

  1. Utilisation du CPU
    • Charge moyenne sur tous les cœurs :
      avg(rate(node_cpu_seconds_total{mode!="idle"}[5m]))
      Cette requête calcule le taux moyen d'utilisation du CPU (hors mode idle) sur les 5 dernières minutes.
    • Utilisation du CPU par instance :
      sum(rate(node_cpu_seconds_total{mode!="idle"}[5m])) by (instance)



  2. Utilisation de la mémoire
    • Pourcentage de mémoire utilisée :
      100 * (1 - (node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes))
    • Mémoire utilisée en gigaoctets :
      (node_memory_MemTotal_bytes - node_memory_MemAvailable_bytes) / (1024 * 1024 * 1024)

  3. Utilisation du disque
    • Pourcentage d'espace disque utilisé :
      100 * (node_filesystem_size_bytes{fstype!~"tmpfs|overlay"} - node_filesystem_free_bytes{fstype!~"tmpfs|overlay"}) / node_filesystem_size_bytes{fstype!~"tmpfs|overlay"}
    • Espace libre sur un disque spécifique :
      node_filesystem_free_bytes{mountpoint="/"}

  4. Surveillance des réseaux
    • Taux d'envoi de données sur une interface réseau :
      rate(node_network_transmit_bytes_total[1m])
    • Taux de réception de données :
      rate(node_network_receive_bytes_total[1m])



  5. Uptime d'une instance
    • Liste des instances en ligne :
      up == 1
    • Instance cadvisor :
      up{instance="cadvisor:8080"}

  6. Erreurs dans les applications
    • Taux d'erreurs HTTP 5xx :
      rate(http_requests_total{status=~"5.."}[5m])
    • Pourcentage d'erreurs 5xx par rapport au trafic total :
      100 * rate(http_requests_total{status=~"5.."}[5m]) / rate(http_requests_total[5m])

  7. Alimentation d'une alerte
    • CPU saturé (> 90 %) :
      avg(rate(node_cpu_seconds_total{mode!="idle"}[5m])) by (instance) > 0.9
    • Moins de 10 % d'espace disque disponible :
      (node_filesystem_free_bytes / node_filesystem_size_bytes) < 0.1



Bonnes pratiques


Conseils pour écrire des requêtes PromQL efficaces.

  1. Simplifiez vos requêtes

    Évitez de surcharger vos requêtes avec des calculs complexes. Utilisez des fonctions simples et combinez-les au besoin.




  2. Utilisez des agrégations

    Les agrégations comme sum et avg permettent de simplifier les données et de les rendre plus lisibles.


  3. Filtrez les données

    Utilisez des étiquettes pour réduire le volume de données retournées, ce qui améliore la performance des requêtes.


Conclusion


Résumé et prochaines étapes pour maîtriser PromQL.

  1. PromQL est un langage puissant pour analyser et surveiller vos métriques dans Prometheus. En maîtrisant ses fonctionnalités, vous pouvez créer des alertes précises, des visualisations détaillées, et optimiser vos systèmes. Continuez à explorer les fonctions avancées et expérimentez avec vos métriques pour en tirer le maximum.




Date de publication: 2023-11-27T09:40:00+08:00
Date de modification: 2024-12-06T07:50:45
Auteur:
  • Martin LEKPA : Tech Lead et formateur Observabilité