Publié le : 27/11/2023 à 02:40

Découvrez en détail les quatre types de métriques supportés par Prometheus (Counter, Gauge, Histogram, Summary) et leurs cas d'usage spécifiques.

Counter (Compteur)

Une métrique cumulative qui ne fait qu'augmenter ou être remise à zéro.

Fonctionnement et cas d'usage

Un compteur (Counter) est une métrique cumulative qui représente une valeur monotone croissante. Elle ne peut qu'augmenter ou être remise à zéro (par exemple lors du redémarrage d'un service).

Cas d'utilisation : Compter le nombre total de requêtes HTTP traitées, le nombre d'erreurs rencontrées, ou le volume de données transférées.

Astuce PromQL : N'utilisez jamais un Counter directement pour afficher une valeur brute, car les redémarrages de service fausseraient la courbe. Utilisez toujours les fonctions rate() ou increase() pour évaluer la vitesse d'évolution.

# Taux de requêtes par seconde sur les 5 dernières minutes
rate(http_requests_total{method="GET"}[5m])

Gauge (Jauge)

Une valeur numérique instantanée pouvant augmenter ou diminuer arbitrairement.

Fonctionnement et cas d'usage

Une jauge (Gauge) est une métrique qui capture une valeur à un instant T. Contrairement au compteur, sa valeur peut monter comme descendre.

Cas d'utilisation : Mesurer des états actuels comme l'utilisation de la mémoire, la température d'un CPU, le nombre d'utilisateurs connectés, ou la taille d'une file d'attente.

Astuce PromQL : Vous pouvez afficher une Gauge directement ou calculer des moyennes avec avg_over_time(). Des fonctions comme predict_linear() sont très utiles avec les Gauges pour anticiper la saturation d'un disque.

# Moyenne d'utilisation de la mémoire sur 5 minutes
avg_over_time(node_memory_Active_bytes[5m])

Histogram (Histogramme)

Échantillonne des observations et les compte dans des seaux (buckets) configurables.

Fonctionnement et cas d'usage

Un histogramme échantillonne des événements (généralement des durées ou des tailles) et les répartit dans des seaux (buckets) prédéfinis. Un histogramme génère 3 séries temporelles distinctes pour une même métrique :

  • _bucket{le="X"} : Un compteur cumulatif pour chaque seau (ex: requêtes de moins de 0.5s).
  • _sum : La somme totale des valeurs observées.
  • _count : Le nombre total d'événements observés.

Astuce PromQL : La grande force de l'histogramme est sa capacité à agréger les données de plusieurs instances pour calculer des percentiles (ex: le 95e percentile de la latence) directement côté serveur avec la fonction histogram_quantile().

# 95e percentile de la durée des requêtes agrégée sur tout le cluster
histogram_quantile(0.95, sum(rate(http_request_duration_seconds_bucket[5m])) by (le))

Summary (Résumé)

Calcule dynamiquement des quantiles (percentiles) côté client.

Fonctionnement et cas d'usage

Un résumé (Summary) échantillonne également des observations, mais calcule les quantiles (ex: 50e ou 99e percentile) directement dans le code de l'application (côté client) au lieu de le faire dans Prometheus. Comme l'histogramme, il expose également des séries _sum et _count.

Astuce PromQL : Les quantiles pré-calculés par un Summary ne peuvent pas être agrégés mathématiquement (la moyenne de deux 95e percentiles n'est pas un 95e percentile valide). Ils sont donc réservés à l'analyse d'instances isolées.

# Récupération directe du 99e percentile exposé par l'application
go_gc_duration_seconds{quantile="0.99"}

Quand choisir Histogram ou Summary ?

Les critères clés pour choisir entre ces deux métriques de distribution.

Comparaison

CritèreHistogramSummary
Agrégation (ex: Kubernetes)Oui, mathématiquement exact via histogram_quantile()Non, impossible d'agréger des quantiles entre pods
Calcul des percentilesCôté serveur (Prometheus, via PromQL)Côté client (Code applicatif)
ConfigurationNécessite de définir les seuils des buckets à l'avanceCalcule les valeurs dynamiquement (plus simple à configurer)
Impact sur les ressourcesLéger côté client, plus coûteux côté Prometheus (stockage des buckets)Lourd côté client (CPU/Mémoire pour le calcul)

Règle d'or : Dans les architectures distribuées (Microservices, Kubernetes), où vous avez besoin d'une vue d'ensemble du cluster, utilisez toujours l'Histogramme.

Lien copié dans le presse-papiers !