Surveiller Config Sync à l'aide de Prometheus

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.

    1. Créez un répertoire temporaire pour y placer les fichiers manifestes.

      mkdir config-sync-monitor
      cd config-sync-monitor
      
    2. 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 par monitoring dans les étapes restantes.

    3. 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
      
    4. 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
      
    5. 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 de namespace dans les fichiers manifestes YAML des étapes précédentes.

      kubectl create namespace monitoring
      
    6. 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.

    7. 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
      --- 
      --- 
      
    8. 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.

    9. 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.

    10. 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 valider 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 valider 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.

  1. Activez le service Prometheus géré sur votre cluster en suivant les instructions de la page Configurer la collecte gérée.

  2. 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 port 8675 du pod otel-collector-* sous l'espace de noms config-management-monitoring. La ressource PodMonitoring utilise un sélecteur de libellés Kubernetes pour trouver le pod otel-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
    
  3. Appliquez le fichier manifeste au cluster :

    kubectl apply -f pod-monitoring-config-sync-monitoring.yaml
    

  4. 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.