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 - Deploymentdu 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 :
- Déterminez le projet Distributed Cloud à partir duquel vous souhaitez collecter des métriques à des fins de surveillance. 
- 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- 2112dans la spécification du pod :- # ... spec: template: spec: containers: - name: your-container-name ports: - containerPort: 2112 # ...
- Dans votre configuration - MonitoringTarget, spécifiez les détails du point de terminaison (port, chemin d'accès, schéma) dans la section- podMetricsEndpointspour qu'ils correspondent au port que vous avez exposé dans la spécification du pod.- Le fichier YAML suivant montre un exemple de configuration - MonitoringTargetoù 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
- Appliquez la configuration - MonitoringTargetau 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 :
- Déterminez le projet Distributed Cloud à partir duquel vous souhaitez collecter des métriques à des fins de surveillance. 
- Ajoutez les annotations suivantes à la section - annotationsdu fichier- Deploymentde 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
- Dans votre configuration - MonitoringTarget, spécifiez les annotations que vous avez ajoutées au fichier- Deploymentdu 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
- Appliquez la configuration - MonitoringTargetau 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.