Collecter des métriques Prometheus spécifiques à partir de Kubernetes

Ce document explique aux opérateurs comment configurer Google Cloud Managed Service pour Prometheus afin de filtrer et de collecter des métriques Kubernetes spécifiques à partir des clusters et des charges de travail Google Kubernetes Engine (GKE).

Vous devez déjà connaître les éléments suivants :

Collecte de métriques dans GKE

Les composants système des clusters GKE émettent et exposent des métriques Prometheus. Par défaut, tous les clusters ingèrent des métriques système spécifiques à GKE. Des packages de métriques intégrés supplémentaires sont disponibles pour ingérer des collections de métriques sélectionnées pour différents composants.

Indépendamment des packages de métriques GKE intégrés, vous pouvez configurer manuellement Google Cloud Managed Service pour Prometheus afin d'ingérer des métriques Prometheus spécifiques. Cette configuration personnalisée est bien adaptée aux cas d'utilisation suivants :

  • Surveillez les signaux spécifiques dans votre cluster et vos charges de travail.
  • Optimisez les coûts en désactivant les packages de métriques dont vous n'avez pas besoin et en n'ingérant qu'un sous-ensemble de métriques.
  • Collectez les métriques émises par les composants, mais qui ne sont pas incluses dans un package de métriques.

Pour les opérateurs, les métriques de nœud, qui sont émises par le processus kubelet sur chaque nœud, peuvent être utiles pour surveiller les charges de travail et les nœuds afin de détecter des signaux spécifiques.

Ressources personnalisées pour la collecte de métriques

Pour filtrer et ingérer une métrique spécifique, configurez des règles de réétiquetage Prometheus dans l'une des ressources personnalisées suivantes :

  • PodMonitoring : configure la collecte de métriques à partir des pods d'un espace de noms spécifique.
  • ClusterPodMonitoring : configurez la collecte de métriques à partir des pods dans n'importe quel espace de noms.
  • ClusterNodeMonitoring : configurez la collecte de métriques à partir des composants de nœud tels que kubelet et cAdvisor.

Duplication des métriques

Si vous filtrez une métrique également incluse dans un package de métriques actif pour un cluster, elle s'affiche plusieurs fois dans Google Cloud Managed Service pour Prometheus. Par exemple, si le package de métriques KUBELET est activé dans votre cluster et que vous configurez la collecte de la métrique kubelet_running_containers, des valeurs en double s'affichent.

Pour éviter les doublons, vérifiez que les métriques que vous collectez ne sont pas incluses dans l'un des packages de métriques actifs. Pour en savoir plus sur les métriques incluses, consultez les packages de métriques suivants :

Avant de commencer

Avant de commencer, effectuez les tâches suivantes :

  • Activez l'API Google Kubernetes Engine.
  • Activer l'API Google Kubernetes Engine
  • Si vous souhaitez utiliser la Google Cloud CLI pour cette tâche, installez puis initialisez la gcloud CLI. Si vous avez déjà installé la gcloud CLI, obtenez la dernière version en exécutant la commande gcloud components update. Il est possible que les versions antérieures de la gcloud CLI ne permettent pas d'exécuter les commandes de ce document.

Rôles requis

Pour obtenir les autorisations nécessaires pour collecter et afficher des métriques, demandez à votre administrateur de vous accorder les rôles IAM suivants sur votre projet :

Pour en savoir plus sur l'attribution de rôles, consultez Gérer l'accès aux projets, aux dossiers et aux organisations.

Vous pouvez également obtenir les autorisations requises avec des rôles personnalisés ou d'autres rôles prédéfinis.

Activer Google Cloud Managed Service pour Prometheus

Google Cloud Managed Service pour Prometheus est activé par défaut dans tous les clusters GKE et ne peut pas être désactivé dans les clusters Autopilot. Si vous utilisez un cluster Autopilot, passez à la section Configurer la collecte de métriques.

Pour vérifier que Google Cloud Managed Service pour Prometheus est activé dans votre cluster Standard, sélectionnez l'une des options suivantes :

Console

  1. Dans la console Google Cloud , accédez à la page Clusters Kubernetes.

    Accéder à la page "Clusters Kubernetes"

  2. Sur la ligne du cluster que vous souhaitez vérifier, cliquez sur Actions >  Modifier. La page Détails du cluster s'ouvre.

  3. Dans la section Fonctionnalités, vérifiez la valeur du champ Service géré pour Prometheus. Si la valeur est Activé, passez à la section Configurer la collecte de métriques. Si la valeur est Désactivé, activez Google Cloud Managed Service pour Prometheus :

    1. Cliquez sur Modifier Managed Service pour Prometheus. La boîte de dialogue Modifier Managed Service pour Prometheus s'ouvre.
    2. Cochez la case Activer Managed Service pour Prometheus.
    3. Cliquez sur Enregistrer les modifications.

gcloud

Vérifiez si Google Cloud Managed Service pour Prometheus est activé dans le cluster :

gcloud container clusters describe CLUSTER_NAME \
    --location=CONTROL_PLANE_LOCATION \
    --format='value(monitoringConfig.managedPrometheusConfig.enabled)'

Remplacez les éléments suivants :

  • CLUSTER_NAME : nom de votre cluster Standard.
  • CONTROL_PLANE_LOCATION : région ou zone du plan de contrôle du cluster, par exemple us-central1 ou us-central1-a.

Si le résultat est True, cela signifie que Google Cloud Managed Service pour Prometheus est activé. Si le résultat est False, activez Google Cloud Managed Service pour Prometheus :

gcloud container clusters update CLUSTER_NAME \
    --location=CONTROL_PLANE_LOCATION \
    --enable-managed-prometheus

Configurer la collecte de métriques

Pour configurer Google Cloud Managed Service pour Prometheus afin d'ingérer une métrique émise spécifique, vous avez besoin des informations suivantes sur la métrique :

  • Nom de la métrique, par exemple kubelet_working_pods.
  • Point de terminaison qui expose la métrique, comme /metrics/cadvisor ou /metrics.

Pour trouver des métriques et configurer la collecte, procédez comme suit :

  1. Recherchez une métrique dans la documentation de référence du composant spécifique. Par exemple, vous pouvez utiliser les ressources suivantes pour trouver une métrique de nœud :

  2. Vérifiez les packages de métriques actifs pour le cluster :

    gcloud container clusters describe CLUSTER_NAME \
        --location=CONTROL_PLANE_LOCATION \
        --flatten=monitoringConfig.componentConfig \
        --format='value(enableComponents)'
    

    Le résultat ressemble à ce qui suit :

    SYSTEM_COMPONENTS;STORAGE;POD;DEPLOYMENT;STATEFULSET;DAEMONSET;HPA;JOBSET;CADVISOR;KUBELET;DCGM
    
  3. Vérifiez si la métrique que vous souhaitez collecter se trouve dans l'un de ces packages actifs à l'aide des informations de la section Métriques disponibles. Si votre métrique est incluse dans un package de métriques actif, des métriques en double peuvent apparaître dans la section "Surveillance". Si votre métrique ne figure pas dans un package de métriques actif, passez à l'étape suivante.

  4. Facultatif : Pour vérifier que la métrique est disponible au niveau du point de terminaison des métriques, interrogez le point de terminaison à l'aide de la commande kubectl get --raw. Par exemple, la commande suivante interroge le point de terminaison /metrics pour la métrique kubelet_working_pods :

    kubectl get --raw "/api/v1/nodes/NODE_NAME/proxy/metrics" | grep "kubelet_working_pods"
    

    Remplacez NODE_NAME par le nom du nœud à interroger.

    Le résultat ressemble à ce qui suit, ce qui indique que la métrique est disponible :

    # HELP kubelet_working_pods [ALPHA] Number of pods the kubelet is actually running, broken down by lifecycle phase, whether the pod is desired, orphaned, or runtime only (also orphaned), and whether the pod is static. An orphaned pod has been removed from local configuration or force deleted in the API and consumes resources that are not otherwise visible.
    # TYPE kubelet_working_pods gauge
    kubelet_working_pods{config="desired",lifecycle="sync",static=""} 8
    kubelet_working_pods{config="desired",lifecycle="sync",static="true"} 1
    kubelet_working_pods{config="desired",lifecycle="terminated",static=""} 0
    kubelet_working_pods{config="desired",lifecycle="terminated",static="true"} 0
    kubelet_working_pods{config="desired",lifecycle="terminating",static=""} 0
    kubelet_working_pods{config="desired",lifecycle="terminating",static="true"} 0
    
  5. Après avoir identifié la métrique que vous souhaitez collecter, utilisez une règle de réétiquetage Prometheus dans une ressource personnalisée PodMonitoring, ClusterPodMonitoring ou ClusterNodeMonitoring pour filtrer cette métrique. La ressource personnalisée que vous utilisez dépend des propriétés de la métrique, comme décrit dans la section Ressources personnalisées de collecte de métriques.

    Par exemple, examinez le fichier manifeste ClusterNodeMonitoring suivant :

    apiVersion: monitoring.googleapis.com/v1
    kind: ClusterNodeMonitoring
    metadata:
      name: kubelet-pod-counts
    spec:
      selector:
        matchLabels: {}
      endpoints:
      - path: "/metrics"
        scheme: "https"
        interval: "30s"
        tls:
          insecureSkipVerify: true
        # metricRelabeling specifies the metrics to ingest. The metrics must be
        # available at the specified endpoint.
        metricRelabeling:
        - action: keep
          sourceLabels: [__name__]
          regex: kubelet_(active|working)_pods
    

    Ce fichier manifeste possède les propriétés suivantes :

    • Le champ selector.matchLabels est un ensemble vide ({}), qui correspond à tous les nœuds.
    • Le champ endpoints.path identifie le point de terminaison des métriques à extraire.
    • Le champ metricRelabeling identifie les métriques spécifiques à collecter. Dans cet exemple, Google Cloud Managed Service pour Prometheus collecte les métriques dont le nom est kubelet_active_pods et kubelet_working_pods à partir du point de terminaison.

Lorsque vous déployez la ressource personnalisée, Google Cloud Managed Service pour Prometheus ingère les métriques qui correspondent à la configuration spécifiée. Vous pouvez afficher et interroger ces métriques en utilisant les mêmes méthodes que pour les autres métriques, telles que Cloud Monitoring.

Vérifier la collecte de métriques pour un exemple de métrique

Les étapes suivantes vous montrent comment configurer Google Cloud Managed Service pour Prometheus afin de collecter la métrique kubelet_runtime_operations_errors_total à partir de kubelet. Dans ces exemples de procédure, vous vérifiez que la métrique n'est pas collectée actuellement, vous créez un ClusterNodeMonitoring (car kubelet est un composant de nœud), puis vous vérifiez que la métrique s'affiche dans Monitoring.

  1. Vérifiez que la métrique kubelet_runtime_operations_errors_total n'est pas déjà présente dans Monitoring :

    1. Dans la console Google Cloud , accédez à la page Explorateur de métriques.

      Accéder à l'explorateur de métriques

    2. Dans la section Requêtes, dans le champ Métrique, essayez de sélectionner la métrique prometheus/kubelet_runtime_operations_errors_total/counter. Si aucun résultat de recherche ne s'affiche, cela signifie que la métrique n'est pas collectée.

  2. Créez un ClusterNodeMonitoring pour filtrer la métrique kubelet_runtime_operations_errors_total :

    1. Enregistrez le fichier manifeste ClusterNodeMonitoring suivant sous le nom kubelet-runtime-errors-collector.yaml :

      apiVersion: monitoring.googleapis.com/v1
      kind: ClusterNodeMonitoring
      metadata:
        name: kubelet-runtime-errors-collector
      spec:
        selector:
          matchLabels: {}
        endpoints:
        - path: /metrics
          scheme: https
          interval: 30s
          tls:
            insecureSkipVerify: true
          metricRelabeling:
          - action: keep
            sourceLabels: [__name__]
            regex: kubelet_runtime_operations_errors_total
      
    2. Créez ClusterNodeMonitoring :

      kubectl apply -f kubelet-runtime-errors-collector.yaml
      

    L'affichage de la métrique dans Monitoring peut prendre jusqu'à 10 minutes.

  3. Dans la console Google Cloud , vérifiez que la métrique apparaît dans Monitoring :

    1. Accédez à la page Explorateur de métriques.

      Accéder à l'explorateur de métriques

    2. Dans la section Requêtes, dans le champ Métrique, sélectionnez la métrique prometheus/kubelet_runtime_operations_errors_total/counter.

    3. Facultatif : Dans le menu déroulant Filtre, sélectionnez votre cluster.

    La section Résultats affiche un graphique avec la métrique collectée.

Étapes suivantes