Cette page explique comment envoyer des métriques depuis Config Sync vers Prometheus.
Cette page explique comment utiliser Prometheus pour afficher les métriques Config Sync. Pour découvrir d'autres méthodes d'exportation de métriques, consultez la page Surveiller Config Sync avec Cloud Monitoring ou Surveiller Config Sync avec une surveillance personnalisée.
Config Sync collecte et exporte automatiquement les métriques vers Prometheus. Vous pouvez configurer Cloud Monitoring pour extraire des métriques personnalisées de Prometheus. Ces métriques peuvent ensuite être affichées dans Prometheus et Monitoring. Pour en savoir plus, consultez la page Utiliser Prometheus dans la documentation GKE.
Scraper les métriques
Toutes les métriques Prometheus peuvent être scrapées (c'est-à-dire récupérées) sur le port 8675. Pour pouvoir scraper des métriques, vous devez configurer votre cluster pour Prometheus L'une des options ci-dessous :
Reportez-vous à la documentation Prometheus pour configurer votre cluster en vue du scraping, ou ;
utilisez l'opérateur Prometheus avec les fichiers manifestes ci-dessous de façon à récupérer l'ensemble des métriques Config Sync toutes les 10 secondes.
Créez un répertoire temporaire pour y placer les fichiers manifestes.
mkdir config-sync-monitor cd config-sync-monitor
Téléchargez le manifeste de l'opérateur Prometheus à partir du dépôt CoreOS, à l'aide de la commande
curl
:curl -o bundle.yaml https://raw.githubusercontent.com/coreos/prometheus-operator/master/bundle.yaml
Ce fichier manifeste est configuré pour utiliser l'espace de noms
default
, ce qui n'est pas recommandé. L'étape suivante modifie la configuration pour utiliser un espace de noms appelémonitoring
. Pour utiliser un autre espace de noms, remplacez-le parmonitoring
dans les étapes restantes.Créez un fichier pour mettre à jour l'objet Namespace de la ressource ClusterRoleBinding dans le package ci-dessus.
# patch-crb.yaml apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: prometheus-operator subjects: - kind: ServiceAccount name: prometheus-operator namespace: monitoring # we are patching from default namespace
Créez un fichier
kustomization.yaml
qui applique le correctif et modifie l'objet Namespace pour les autres ressources du fichier manifeste.# kustomization.yaml resources: - bundle.yaml namespace: monitoring patchesStrategicMerge: - patch-crb.yaml
Créez l'espace de noms
monitoring
s'il n'en existe pas. Vous pouvez utiliser un nom différent pour l'espace de noms, mais vous devrez modifier la valeur denamespace
dans les fichiers manifestes YAML des étapes précédentes.kubectl create namespace monitoring
Appliquez le fichier manifeste Kustomize à l'aide des commandes suivantes :
kubectl apply -k . until kubectl get customresourcedefinitions servicemonitors.monitoring.coreos.com ; \ do date; sleep 1; echo ""; done
La deuxième commande bloque jusqu'à ce que les CRD soient disponibles sur le cluster.
Créez le fichier manifeste pour les ressources nécessaires à la configuration d'un serveur Prometheus qui récupère les métriques de Config Sync.
# config-sync-monitoring.yaml apiVersion: v1 kind: ServiceAccount metadata: name: prometheus-config-sync namespace: monitoring --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: prometheus-config-sync rules: - apiGroups: [""] resources: - nodes - services - endpoints - pods verbs: ["get", "list", "watch"] - apiGroups: [""] resources: - configmaps verbs: ["get"] - nonResourceURLs: ["/metrics"] verbs: ["get"] --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: prometheus-config-sync roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: prometheus-config-sync subjects: - kind: ServiceAccount name: prometheus-config-sync namespace: monitoring --- apiVersion: monitoring.coreos.com/v1 kind: Prometheus metadata: name: config-sync namespace: monitoring labels: prometheus: config-sync spec: replicas: 2 serviceAccountName: prometheus-config-sync serviceMonitorSelector: matchLabels: prometheus: config-management alerting: alertmanagers: - namespace: default name: alertmanager port: web resources: requests: memory: 400Mi --- apiVersion: v1 kind: Service metadata: name: prometheus-config-sync namespace: monitoring labels: prometheus: config-sync spec: type: NodePort ports: - name: web nodePort: 31900 port: 9190 protocol: TCP targetPort: web selector: prometheus: config-sync --- ---
Appliquez le fichier manifeste à l'aide des commandes suivantes :
kubectl apply -f config-sync.yaml until kubectl rollout status statefulset/prometheus-config-sync -n monitoring; \ do sleep 1; done
La deuxième commande bloque jusqu'à ce que les pods soient en cours d'exécution.
Vous pouvez vérifier l'installation en transférant le port Web du serveur Prometheus sur votre ordinateur local.
kubectl -n monitoring port-forward svc/prometheus-config-sync 9190
Vous pouvez désormais accéder à l'interface utilisateur Web de Prometheus à l'adresse
http://localhost:9190
.Supprimez le répertoire temporaire.
cd .. rm -rf config-sync-monitor
Métriques Prometheus disponibles
Config Sync collecte les métriques ci-dessous et les met à la disposition de Prometheus. La colonne Libellés répertorie tous les libellés applicables à chaque métrique. Les métriques sans libellés représentent une seule mesure dans le temps tandis que les métriques avec libellés représentent plusieurs mesures, une pour chaque combinaison de valeurs de libellé.
Si cette table n'est plus synchronisée, vous pouvez filtrer les métriques par préfixe dans l'interface utilisateur de Prometheus. Toutes les métriques commencent par le préfixe config_sync_
.
Nom | Type | Libellés | Description |
---|---|---|---|
config_sync_api_duration_seconds_bucket |
Histogramme | état, opération | Répartition de la latence des appels de serveur d'API (répartis en buckets par durée de chaque cycle) |
config_sync_api_duration_seconds_count |
Histogramme | état, opération | Distribution de la latence des appels de serveur d'API (en ignorant la durée) |
config_sync_api_duration_seconds_sum |
Histogramme | état, opération | Somme des durées de tous les appels de serveur d'API |
config_sync_apply_duration_seconds_bucket |
Histogramme | commit, état | Distribution de la latence d'application des ressources déclarées de la source de référence à un cluster (réparties en buckets par durée de chaque cycle) |
config_sync_apply_duration_seconds_count |
Histogramme | commit, état | Distribution de la latence d'application des ressources déclarées de la source de référence à un cluster (en ignorant la durée) |
config_sync_apply_duration_seconds_sum |
Histogramme | commit, état | Somme des durées de toutes les latences d'application des ressources déclarées de la source fiable à un cluster |
config_sync_apply_operations_total |
Compteur | opération, état, contrôleur | Nombre d'opérations effectuées pour synchroniser les ressources de la source de référence avec un cluster. |
config_sync_cluster_scoped_resource_count |
Jauge | resourcegroup | Nombre de ressources à l'échelle du cluster dans une RS ResourceGroup |
config_sync_crd_count |
Jauge | resourcegroup | Nombre de CRD dans un groupe de ressources |
config_sync_declared_resources |
Jauge | commit | Nombre de ressources déclarées analysées à partir de Git |
config_sync_internal_errors_total |
Compteur | source | Nombre d'erreurs internes déclenchées par Config Sync. La métrique peut ne pas apparaître si aucune erreur interne ne s'est produite |
config_sync_kcc_resource_count |
Jauge | resourcegroup | Nombre de ressources Config Connector dans un ResourceGroup |
config_sync_last_apply_timestamp |
Jauge | commit, état | Horodatage de la dernière opération d'application |
config_sync_last_sync_timestamp |
Jauge | commit, état | Horodatage de la dernière synchronisation à partir de Git |
config_sync_parser_duration_seconds_bucket |
Histogramme | état, déclencheur, source | Distribution de la latence des différentes étapes impliquées dans la synchronisation de la source de vérité vers un cluster |
config_sync_parser_duration_seconds_count |
Histogramme | état, déclencheur, source | Distribution de la latence aux différentes étapes de la synchronisation entre la source fiable et un cluster (en ignorant la durée) |
config_sync_parser_duration_seconds_sum |
Histogramme | état, déclencheur, source | Somme des latences des différentes étapes impliquées dans la synchronisation depuis la source fiable vers un cluster |
config_sync_pipeline_error_observed |
Jauge | name, reconciler, component | État des ressources personnalisées RootSync et RepoSync. Une valeur de 1 indique un échec |
config_sync_ready_resource_count |
Jauge | resourcegroup | Nombre total de ressources prêtes dans un ResourceGroup |
config_sync_reconcile_duration_seconds_bucket |
Histogramme | état | Répartition de la latence des événements de rapprochement gérés par le gestionnaire de rapprochement (répartis en buckets par durée de chaque appel) |
config_sync_reconcile_duration_seconds_count |
Histogramme | état | Distribution de la latence des événements de rapprochement gérés par le gestionnaire de rapprochement (en ignorant la durée) |
config_sync_reconcile_duration_seconds_sum |
Histogramme | état | Somme des durées de toutes les latences des événements de rapprochement gérés par le gestionnaire de rapprochement |
config_sync_reconciler_errors |
Jauge | composant, errorclass | Nombre d'erreurs rencontrées lors de la synchronisation des ressources de la source de vérité avec un cluster |
config_sync_remediate_duration_seconds_bucket |
Histogramme | état | Distribution de la latence des événements de rapprochement de correction (répartis en buckets par durée) |
config_sync_remediate_duration_seconds_count |
Histogramme | état | Distribution de la latence des événements de rapprochement de correction (en ignorant la durée) |
config_sync_remediate_duration_seconds_sum |
Histogramme | état | Somme des durées de toutes les latences des événements de rapprochement de correction |
config_sync_resource_count |
Jauge | resourcegroup | Nombre de ressources suivies par un ResourceGroup |
config_sync_resource_conflicts_total |
Compteur | commit | Nombre de conflits de ressources résultant d'une différence entre les ressources mises en cache et les ressources du cluster La métrique peut ne pas s'afficher si aucun conflit de ressources ne s'est produit |
config_sync_resource_fights_total |
Compteur | Nombre de ressources synchronisées trop fréquemment. La métrique peut ne pas apparaître si aucun conflit de ressources n'a eu lieu | |
config_sync_resource_group_total |
Jauge | Nombre de CR de ResourceGroup | |
config_sync_resource_ns_count |
Jauge | resourcegroup | Nombre d'espaces de noms utilisés par les ressources dans un ResourceGroup |
config_sync_rg_reconcile_duration_seconds_bucket . |
Histogramme | stallreason | Répartition du temps de rapprochement d'un CR de ResourceGroup (répartie en buckets par durée) |
config_sync_rg_reconcile_duration_seconds_count |
Histogramme | stallreason | Répartition du temps pour le rapprochement d'un CR de ResourceGroup (en ignorant la durée) |
config_sync_rg_reconcile_duration_seconds_sum |
Histogramme | stallreason | Somme totale des opérations de rapprochement d'un CR de ResourceGroup |
config_sync_kustomize_build_latency_bucket |
Histogramme | Répartition de la latence de durée d'exécution de kustomize build (répartie en buckets par durée de chaque opération) |
|
config_sync_kustomize_build_latency_count |
Histogramme | Distribution de la latence de durée d'exécution de kustomize build (en ignorant la durée) |
|
config_sync_kustomize_build_latency_sum |
Histogramme | Somme de toutes les durées d'exécution de kustomize build |
|
config_sync_kustomize_ordered_top_tier_metrics |
Jauge | top_tier_field | Utilisation des Resource, Generator, SecretGenerator, ConfigMapGenerator, Transformer et Validator |
config_sync_kustomize_builtin_transformers |
Jauge | k8s_builtin_transformer | Utilisation de transformateurs intégrés liés aux métadonnées d'objets Kubernetes |
config_sync_kustomize_resource_count |
Jauge | Nombre de ressources générées par kustomize build |
|
config_sync_kustomize_field_count |
Jauge | field_name | Nombre d'utilisations d'un champ particulier dans les fichiers Kustomization |
config_sync_kustomize_patch_count |
Jauge | patch_field | Nombre de correctifs dans les champs patches , patchesStrategicMerge et patchesJson6902 |
config_sync_kustomize_base_count |
Jauge | base_source | Nombre de bases distantes et locales |
kustomize_deprecating_field_count |
Jauge | deprecating_field | Utilisation de champs susceptibles de devenir obsolètes |
kustomize_simplification_adoption_count |
Jauge | simplification_field | Utiliser des images de transformateurs de simplification, des instances dupliquées et des remplacements |
kustomize_helm_inflator_count |
Jauge | helm_inflator | Utilisation de Helm dans Kustomize, que ce soit par le biais des champs intégrés ou de la fonction personnalisée |
Exemples de procédures de débogage pour Prometheus
Les exemples suivants illustrent certains modèles d'utilisation des métriques Prometheus, des champs d'état d'objet et des annotations d'objets pour détecter et diagnostiquer les problèmes liés à Config Sync. Ces exemples montrent comment commencer avec une surveillance de haut niveau qui détecte un problème, puis comment affiner progressivement votre recherche pour en identifier et diagnostiquer la cause.
Interroger des configurations par état
Le processus reconciler
fournit des métriques de haut niveau qui donnent des indications précieuses sur une vue d'ensemble du fonctionnement de Config Sync sur le cluster. Vous pouvez voir si des erreurs se sont produites et même configurer des alertes pour ces erreurs.
config_sync_reconciler_errors
Interroger des métriques par rapprochement
Si vous utilisez les API Config Sync RootSync et RepoSync, vous pouvez surveiller les objets RootSync et RepoSync. Les objets RootSync et RepoSync sont instrumentés avec des métriques de haut niveau qui vous donnent des informations précieuses sur le fonctionnement de Config Sync sur le cluster. La quasi-totalité des métriques sont marquées par le nom du rapprochement. Vous pouvez donc voir si des erreurs se sont produites et configurer des alertes pour Prometheus.
Consultez la liste complète des libellés de métriques disponibles pour le filtrage.
Dans Prometheus, vous pouvez utiliser les filtres suivants pour les objets RootSync ou RepoSync :
# Querying RootSync
config_sync_reconciler_errors{configsync_sync_name=ROOT_SYNC_NAME}
# Querying RepoSync
config_sync_reconciler_errors{configsync_sync_name=REPO_SYNC_NAME}
Interroger des opérations d'importation et de synchronisation par état
Dans Prometheus, vous pouvez utiliser les requêtes suivantes :
# Check for errors that occurred when sourcing configs.
config_sync_reconciler_errors{component="source"}
# Check for errors that occurred when syncing configs to the cluster.
config_sync_reconciler_errors{component="sync"}
Vous pouvez également vérifier les métriques des processus source et de synchronisation :
config_sync_parser_duration_seconds{status="error"}
config_sync_apply_duration_seconds{status="error"}
config_sync_remediate_duration_seconds{status="error"}
Surveiller les ressources avec Google Cloud Managed Service pour Prometheus
Google Cloud Managed Service pour Prometheus est la solution multicloud entièrement gérée de Google Cloud pour les métriques Prometheus. Il accepte deux modes de collecte des données : la collecte gérée (mode recommandé) ou la collecte des données auto-déployée. Suivez les étapes ci-dessous pour configurer la surveillance de Config Sync avec Google Cloud Managed Service pour Prometheus en mode de collecte gérée.
Activez le service Prometheus géré sur votre cluster en suivant les instructions de la page Configurer la collecte gérée.
Enregistrez l'exemple de fichier manifeste suivant sous le nom
pod-monitoring-config-sync-monitoring.yaml
. Ce fichier manifeste configure une ressource PodMonitoring pour récupérer les métriques Config Sync sur le port8675
du podotel-collector-*
sous l'espace de nomsconfig-management-monitoring
. La ressource PodMonitoring utilise un sélecteur de libellés Kubernetes pour trouver le podotel-collector-*
.apiVersion: monitoring.googleapis.com/v1 kind: PodMonitoring metadata: name: config-sync-monitoring namespace: config-management-monitoring spec: selector: matchLabels: app: opentelemetry component: otel-collector endpoints: - port: 8675 interval: 10s
Appliquez le fichier manifeste au cluster :
kubectl apply -f pod-monitoring-config-sync-monitoring.yaml
Vérifiez que vos données Prometheus sont exportées à l'aide de la page Cloud Monitoring "Explorateur de métriques" de la console Google Cloud en suivant les instructions de la page Données Managed Service pour Prometheus dans Cloud Monitoring.