Cette page décrit le processus de scraping des métriques des charges de travail dans les environnements Google Distributed Cloud (GDC) air gap afin de faciliter la surveillance et l'observabilité des données.
Vous pouvez extraire et collecter les métriques produites par vos composants au fil du temps. La plate-forme de surveillance propose une API personnalisée pour récupérer les métriques des charges de travail en cours d'exécution dans l'espace de noms de votre projet Distributed Cloud. Pour récupérer des métriques, vous déployez une ressource personnalisée MonitoringTarget dans l'espace de noms de votre projet sur le serveur d'API Management. Lors du déploiement de cette ressource, la plate-forme de surveillance lance la collecte des données.
La ressource personnalisée MonitoringTarget indique au pipeline de surveillance de récupérer les pods désignés dans votre projet. Ces pods doivent exposer un point de terminaison HTTP qui fournit des métriques dans un format d'exposition Prometheus, tel qu'OpenMetrics.
Les métriques récupérées sont ensuite affichées dans l'instance Grafana de votre projet, ce qui vous permet d'obtenir des insights sur l'état opérationnel de votre application.
Pour configurer la ressource personnalisée MonitoringTarget, vous devez spécifier les pods de l'espace de noms de votre projet pour la collecte des métriques. Vous pouvez personnaliser divers paramètres, y compris la fréquence de scraping, le point de terminaison des métriques des pods, les libellés et les annotations.
Avant de commencer
Pour gérer les ressources personnalisées MonitoringRule, demandez les autorisations nécessaires à votre administrateur.
Rôles IAM requis
Contactez l'administrateur de projet IAM pour demander les rôles suivants :
- Créateur de MonitoringRule (
monitoringrule-creator) : crée des ressources personnaliséesMonitoringRuledans l'espace de noms du projet. - Éditeur MonitoringRule (
monitoringrule-editor) : permet de modifier les ressources personnaliséesMonitoringRuledans l'espace de noms du projet. - Lecteur MonitoringRule (
monitoringrule-viewer) : permet d'afficher les ressources personnaliséesMonitoringRuledans l'espace de noms du projet.
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 scraping et tout autre paramètre.
Cette ressource définit les configurations suivantes :
- Cibles : pods et leurs points de terminaison dans votre projet qui exposent des métriques.
- Intervalle de scraping : fréquence à laquelle vous souhaitez extraire les métriques des points de terminaison sélectionnés.
- Personnalisations 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 des points de terminaison de 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 du 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
Pour exposer les métriques des pods sélectionnés sur un point de terminaison défini de manière statique, procédez comme suit :
Déterminez le projet Distributed Cloud à partir duquel vous souhaitez collecter des métriques pour la 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 port2112dans 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 sectionpodMetricsEndpointspour 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: httpAppliquez la configuration
MonitoringTargetau serveur d'API Management dans le même espace de noms que vos pods cibles :kubectl --kubeconfig KUBECONFIG_PATH apply -f MONITORING_TARGET_NAME.yamlRemplacez les éléments suivants :
KUBECONFIG_PATH: chemin d'accès au fichier kubeconfig du serveur d'API Management.MONITORING_TARGET_NAME: nom du fichier de définitionMonitoringTarget.
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 pour la surveillance.
Ajoutez les annotations suivantes à la section
annotationsdu fichierDeploymentde votre conteneur :prometheus.io/pathprometheus.io/portprometheus.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: httpDans votre configuration
MonitoringTarget, spécifiez les annotations que vous avez ajoutées au fichierDeploymentdu conteneur dans la sectionpodMetricsEndpoints. 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
MonitoringTargetutilisant des 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/schemeAppliquez la configuration
MonitoringTargetau serveur d'API Management dans le même espace de noms que vos pods cibles :kubectl --kubeconfig KUBECONFIG_PATH apply -f MONITORING_TARGET_NAME.yamlRemplacez les éléments suivants :
KUBECONFIG_PATH: chemin d'accès au fichier kubeconfig du serveur d'API Management.MONITORING_TARGET_NAME: nom du fichier de définitionMonitoringTarget.
La plate-forme de surveillance commence à collecter des métriques.
Pour en savoir plus sur les champs et les options supplémentaires, consultez la spécification MonitoringTarget complète et la documentation de référence de l'API.
Spécification MonitoringTarget complète
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: l'espace de noms de votre projet.MONITORING_TARGET_NAME: nom du fichier de définitionMonitoringTarget.