Collecter des métriques à partir de vos charges de travail

Cette page décrit le processus d'extraction des métriques des charges de travail dans les environnements Google Distributed Cloud (GDC) isolés pour faciliter la surveillance et l'observabilité des données.

Vous pouvez extraire et collecter les métriques générées par vos composants au fil du temps. La plate-forme de surveillance propose une API personnalisée pour extraire les métriques des charges de travail en cours d'exécution dans l'espace de noms de votre projet Distributed Cloud. Pour scraper des métriques, vous déployez une ressource personnalisée MonitoringTarget dans l'espace de noms de votre projet sur le serveur de l'API Management. Une fois cette ressource déployée, la plate-forme de surveillance lance la collecte de données.

La ressource personnalisée MonitoringTarget indique au pipeline de surveillance d'extraire les pods désignés dans votre projet. Ces pods doivent exposer un point de terminaison HTTP qui fournit des métriques au format d'exposition Prometheus, tel qu'OpenMetrics. Les métriques extraites sont ensuite affichées dans l'instance Grafana de votre projet, ce qui vous permet d'obtenir des informations sur l'état opérationnel de votre application.

Pour configurer la ressource personnalisée MonitoringTarget, vous devez spécifier les pods dans l'espace de noms de votre projet pour la collecte des métriques. Vous pouvez personnaliser différents paramètres, y compris la fréquence du scraping, le point de terminaison des métriques des pods, les libellés et les annotations.

Avant de commencer

Pour obtenir les autorisations nécessaires pour gérer les ressources personnalisées MonitoringTarget, demandez à votre administrateur IAM de l'organisation ou du projet de vous accorder l'un des rôles MonitoringTarget associés.

Selon le niveau d'accès et les autorisations dont vous avez besoin, vous pouvez obtenir des rôles de créateur, d'éditeur ou de lecteur pour cette ressource dans une organisation ou un projet. Pour en savoir plus, consultez Préparer les autorisations IAM.

Configurer la ressource personnalisée MonitoringTarget

La ressource personnalisée MonitoringTarget indique à la plate-forme de surveillance où collecter les métriques. Vous pouvez spécifier les pods pour lesquels vous collectez des métriques, le point de terminaison des métriques de ces pods, la fréquence de récupération et tous les paramètres supplémentaires.

Cette ressource définit les configurations suivantes :

  • Cibles : pods et leurs points de terminaison dans votre projet qui exposent des métriques.
  • Intervalle d'extraction : fréquence à laquelle vous souhaitez extraire les métriques des points de terminaison sélectionnés.
  • Personnalisation des libellés : règles facultatives avec toutes les modifications de libellés pour les métriques.

Choisissez l'une des méthodes suivantes pour spécifier les points de terminaison des métriques dans la ressource personnalisée MonitoringTarget :

  • Points de terminaison statiques : vous déclarez explicitement le point de terminaison (port, chemin d'accès, schéma) dans la configuration MonitoringTarget.
  • Annotations : les informations sur le point de terminaison des métriques de pod sont récupérées à partir des annotations du fichier Deployment du conteneur. Cette méthode offre plus de flexibilité si chaque pod possède des points de terminaison différents.

Points de terminaison statiques

Suivez ces étapes pour exposer les métriques de vos pods sélectionnés sur un point de terminaison défini de manière statique :

  1. Déterminez le projet Distributed Cloud à partir duquel vous souhaitez collecter des métriques à des fins de surveillance.

  2. Dans la spécification de votre pod, déclarez le port qui diffuse les métriques dans le champ containerPort. L'exemple suivant montre comment déclarer le port 2112 dans la spécification du pod :

    # ...
    spec:
      template:
        spec:
          containers:
          - name: your-container-name
            ports:
            - containerPort: 2112
    # ...
    
  3. Dans votre configuration MonitoringTarget, spécifiez les détails du point de terminaison (port, chemin d'accès, schéma) dans la section podMetricsEndpoints pour qu'ils correspondent au port que vous avez exposé dans la spécification du pod.

    Le fichier YAML suivant montre un exemple de configuration MonitoringTarget où chaque pod sélectionné doit exposer des métriques sur le même point de terminaison, http://your-container-name:2112/metrics :

    apiVersion: monitoring.gdc.goog/v1
    kind: MonitoringTarget
    metadata:
      # Choose the same namespace as the workload pods.
      namespace: your-project-namespace
      name: your-container-name
    spec:
      selector:
          # Choose pod labels to consider for this job.
          # Optional: Map of key-value pairs.
          # Default: No filtering by label.
          # To consider every pod in the project namespace, remove selector fields.
        matchLabels:
          app: your-app-label
      podMetricsEndpoints:
        port:
          value: 2112
        path:
          # Choose any value for your endpoint.
          # The /metrics value is an example.
          value: /metrics
        scheme:
          value: http
    
  4. Appliquez la configuration MonitoringTarget au serveur de l'API Management dans le même espace de noms que vos pods cibles :

    kubectl --kubeconfig KUBECONFIG_PATH apply -f MONITORING_TARGET_NAME.yaml
    

    Remplacez les éléments suivants :

    • KUBECONFIG_PATH : chemin d'accès au fichier kubeconfig pour le serveur de l'API Management.
    • MONITORING_TARGET_NAME : nom du fichier de définition MonitoringTarget.

La plate-forme de surveillance commence à collecter des métriques.

Annotations

Pour exposer des métriques à l'aide d'annotations si chaque pod possède des points de terminaison différents, procédez comme suit :

  1. Déterminez le projet Distributed Cloud à partir duquel vous souhaitez collecter des métriques à des fins de surveillance.

  2. Ajoutez les annotations suivantes à la section annotations du fichier Deployment de votre conteneur :

    • prometheus.io/path
    • prometheus.io/port
    • prometheus.io/scheme

    L'exemple suivant montre les annotations pour les métriques sur le port 2112 :

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: your-container-name
      namespace: your-project-namespace
      labels:
        app: your-app-label
      annotations:
        # These annotations are not required. They demonstrate selecting
        # pod metric endpoints through annotations.
        prometheus.io/path: /metrics
        prometheus.io/port: \"2112\"
        prometheus.io/scheme: http
    
  3. Dans votre configuration MonitoringTarget, spécifiez les annotations que vous avez ajoutées au fichier Deployment du conteneur dans la section podMetricsEndpoints. Cette spécification indique à la ressource personnalisée de collecter les informations sur le point de terminaison des métriques à partir des annotations sur les pods sélectionnés.

    Le fichier YAML suivant montre un exemple de configuration MonitoringTarget à l'aide d'annotations :

    apiVersion: monitoring.gdc.goog/v1
    kind: MonitoringTarget
    metadata:
    metadata:
      # Choose the same namespace as the workload pods.
      namespace: your-project-namespace
      name: your-container-name
    spec:
      selector:
        matchLabels:
          app: your-app-label
      podMetricsEndpoints:
        port:
          annotation: prometheus.io/port
        path:
          annotation: prometheus.io/path
        scheme:
          annotation: prometheus.io/scheme
    
  4. Appliquez la configuration MonitoringTarget au serveur de l'API Management dans le même espace de noms que vos pods cibles :

    kubectl --kubeconfig KUBECONFIG_PATH apply -f MONITORING_TARGET_NAME.yaml
    

    Remplacez les éléments suivants :

    • KUBECONFIG_PATH : chemin d'accès au fichier kubeconfig pour le serveur de l'API Management.
    • MONITORING_TARGET_NAME : nom du fichier de définition MonitoringTarget.

La plate-forme de surveillance commence à collecter des métriques.

Consultez la spécification complète de MonitoringTarget et la documentation de référence de l'API pour découvrir d'autres champs et options.

Spécification complète de MonitoringTarget

Le fichier YAML suivant montre un exemple de spécification complète de la ressource personnalisée MonitoringTarget. Pour en savoir plus et obtenir une description complète des champs, consultez la documentation de référence de l'API.

apiVersion: monitoring.gdc.goog/v1
kind: MonitoringTarget
metadata:
  # Choose the same namespace as the workload pods.
  namespace: PROJECT_NAMESPACE
  name: MONITORING_TARGET_NAME
spec:
  # Choose matching pattern that identifies pods for this job.
  # Optional
  # Relationship between different selectors: AND
  selector:
    # Choose clusters to consider for this job.
    # Optional: List
    # Default: All clusters applicable to this project.
    # Relationship between different list elements: OR
    matchClusters:
    - string

    # Choose pod labels to consider for this job.
    # Optional: Map of key-value pairs.
    # Default: No filtering by label.
    # Relationship between different pairs: AND
    matchLabels:
      key1: value1

    # Choose annotations to consider for this job.
    # Optional: Map of key-value pairs
    # Default: No filtering by annotation
    # Relationship between different pairs: AND
    matchAnnotations:
      key1: value1

  # Configure the endpoint exposed for this job.
  podMetricsEndpoints:
    # Choose a port either through static value or annotation.
    # Optional
    # Annotation takes priority.
    # Default: static port 80
    port:
      value: integer
      annotation: string

    # Choose a path either through static value or annotation.
    # Optional
    # Annotation takes priority
    # Default: static path /metrics
    path:
      value: string
      annotation: string

    # Choose a scheme either through a static value (http or https) or annotation.
    # Optional
    # Annotation takes priority
    # Default: static scheme http
    scheme:
      value: string
      annotation: string

    # Choose the frequency to scrape the metrics endpoint defined in podMetricsEndpoints
    # Optional
    # Default: 60s
    scrapeInterval: string

    # Dynamically rewrite the label set of a target before it gets scraped.
    # https://prometheus.io/docs/prometheus/latest/configuration/configuration/#relabel_config
    # Optional
    # Default: No filtering by label
    metricsRelabelings:
    - sourceLabels:
      - string
      separator: string
      regex: string
      action: string
      targetLabel: string
      replacement: string

Remplacez les éléments suivants :

  • PROJECT_NAMESPACE : espace de noms de votre projet.
  • MONITORING_TARGET_NAME : nom du fichier de définition MonitoringTarget.