Utiliser les métriques Prometheus

Cette page présente les principes de base de l'utilisation des métriques Prometheus pour les SLI de disponibilité et de latence dans Cloud Monitoring. Elle explique également comment utiliser ces métriques pour créer un SLO.

Les bases de Prometheus

Prometheus est une solution de surveillance Open Source de pointe pour les métriques et les alertes.

Prometheus accepte les données de dimension avec des identifiants de clé-valeur pour les métriques, fournit le langage de requête PromQL et accepte de nombreuses intégrations en fournissant des exportateurs pour d'autres produits.

Pour commencer à utiliser Prometheus avec Monitoring, nous vous recommandons d'utiliser Google Cloud Managed Service pour Prometheus.

Métriques

Prometheus est compatible avec les types de métriques suivants:

  • Compteur: valeur unique qui ne peut être réinitialisée sur 0 au redémarrage ou augmentée de façon monotone.
  • Jauge: valeur numérique unique pouvant être définie de manière arbitraire.
  • Histogramme : groupe de buckets configurables permettant d'effectuer un échantillonnage et d'enregistrer des valeurs dans des plages, et fournit également la somme de toutes les valeurs observées
  • Résumé: semblable à un histogramme, il calcule également des quantiles configurables sur une fenêtre à durée flexible.

Pour plus d'informations, consultez la page Types de métriques.

Créer des métriques pour les SLI

Si votre application émet des métriques Prometheus, vous pouvez les utiliser pour les SLI.

  • Pour les SLI de disponibilité sur le nombre de requêtes et d'erreurs, vous pouvez commencer par les métriques de compteur de Prometheus.
  • Pour les SLI de latence, vous pouvez utiliser les métriques d'histogramme ou de résumé Promethus.

Pour collecter des métriques Prometheus avec Google Cloud Managed Service pour Prometheus, consultez la documentation sur la configuration de la collecte de métriques gérée ou autodéployée.

Lorsque vous créez un SLO dans la console Google Cloud, les types de SLO de disponibilité et de latence par défaut n'incluent pas les métriques Prometheus. Pour utiliser une métrique Prometheus, créez un SLO personnalisé, puis choisissez une métrique Prometheus pour le SLI.

Les métriques Prometheus commencent par prometheus.googleapis.com/.

Métriques pour GKE

La collecte gérée de métriques par Google Cloud Managed Service pour Prometheus est activée par défaut pour GKE. Si vous exécutez dans un environnement GKE qui n'active pas la collecte gérée par défaut, vous pouvez activer la collecte gérée manuellement. Lorsque la collecte gérée est activée, les composants au sein du cluster sont en cours d'exécution, mais les métriques ne sont générées que lorsque vous déployez une ressource PodMonitoring qui extrait un point de terminaison de métriques valide ou lorsque vous activez l'un des packages de métriques gérées.

Le package de métriques du plan de contrôle comprend des métriques utiles pour l'état du système. Activez la collecte des métriques du plan de contrôle pour utiliser ces métriques pour la disponibilité, la latence et d'autres SLI.

  • Utilisez les métriques du serveur d'API pour effectuer le suivi de la charge du serveur d'API, la fraction des requêtes du serveur d'API qui renvoient des erreurs et la latence de réponse des requêtes reçues par le serveur d'API.
  • Utilisez les métriques du programmeur pour vous aider à réagir de manière proactive aux problèmes de planification lorsque les ressources sont insuffisantes pour les pods en attente.

Métriques pour les SLI de disponibilité

Vous pouvez exprimer un SLI de disponibilité basé sur les requêtes dans l'API Cloud Monitoring à l'aide de la structure TimeSeriesRatio pour définir un ratio de "bonnes" ou "mauvaises" requêtes par rapport au total de requêtes. Ce ratio est utilisé dans le champ goodTotalRatio d'une structure RequestBasedSli.

Votre application doit émettre des métriques Prometheus pouvant être utilisées pour créer ce ratio. L'application doit émettre au moins deux des éléments suivants :

  1. une métrique qui comptabilise le nombre total d'événements ; Utilisez cette métrique dans le totalServiceFilter du ratio.

    Vous pouvez utiliser un compteur Prometheus qui est incrémenté pour chaque événement.

  2. Métrique qui compte les événements "bad", utilisez cette métrique dans le badServiceFilter du ratio.

    Vous pouvez utiliser un compteur Prometheus qui est incrémenté pour chaque erreur ou tout autre événement "bad".

  3. Métrique qui comptabilise les événements "satisfaisants", utilisez cette métrique dans le goodServiceFilter du ratio.

    Vous pouvez utiliser un compteur Prometheus qui est incrémenté pour chaque événement réussi ou "good".

Métriques pour les SLI de latence

Vous pouvez exprimer un SLI de latence basé sur les requêtes dans l'API Cloud Monitoring en créant une structure DistributionCut. Cette structure est utilisée dans le champ distributionCut d'une structure RequestBasedSli.

Votre application doit émettre une métrique Prometheus pouvant être utilisée pour construire la valeur de répartition de distribution. Vous pouvez utiliser un histogramme ou un résumé de Promethus à cette fin. Pour déterminer comment définir vos buckets de manière à mesurer précisément si vos réponses sont comprises dans votre SLO, consultez la section Types de métriques dans la documentation de Prometheus.

Exemple

L'exemple JSON suivant utilise la métrique de plan de contrôle GKE prometheus.googleapis.com/apiserver_request_duration_seconds pour créer un SLO de latence pour un service. Le SLO exige que 98 % de la latence de réponse soit inférieure à 50 secondes au cours d'un mois calendaire.

{
 "displayName": "98% Calendar month - Request Duration Under 50s",
 "goal": 0.98,
 "calendarPeriod": "MONTH",
 "serviceLevelIndicator": {
   "requestBased": {
     "distributionCut": {
       "distributionFilter": "metric.type=\"prometheus.googleapis.com/apiserver_request_duration_seconds/histogram\" resource.type=\"prometheus_target\"",
       "range": {
         "min": "-Infinity",
         "max": 50
       }
     }
   }
 }
}

Étapes suivantes