Monitora Config Sync con Prometheus

La pagina descrive come inviare le metriche da Config Sync a Prometheus.

Questa pagina spiega come utilizzare Prometheus per visualizzare le metriche di Config Sync. Per altri modi di esportare le metriche, consulta Monitorare Config Sync con Cloud Monitoring o Monitorare Config Sync con il monitoraggio personalizzato.

Config Sync raccoglie ed esporta automaticamente le metriche in Prometheus. Puoi configurare Cloud Monitoring per eseguire il pull di metriche personalizzate da Prometheus. Poi puoi visualizzare le metriche personalizzate sia in Prometheus che in Monitoring. Per ulteriori informazioni, consulta Utilizzo di Prometheus nella documentazione di GKE.

Esegui lo scraping delle metriche

Tutte le metriche Prometheus sono disponibili per lo scraping nella porta 8675. Prima di poter eseguire lo scraping delle metriche, devi configurare il cluster per Prometheus in uno dei due modi seguenti. Una di queste soglie:

  • Segui la documentazione di Prometheus per configurare il cluster per lo scraping oppure

  • Utilizza l'operatore Prometheus insieme ai seguenti manifest, che eseguono lo scraping di tutte le metriche di Config Sync ogni 10 secondi.

    1. Crea una directory temporanea in cui conservare i file manifest.

      mkdir config-sync-monitor
      cd config-sync-monitor
      
    2. Scarica il manifest Prometheus Operator dal repository CoreOS utilizzando il comando curl:

      curl -o bundle.yaml https://raw.githubusercontent.com/coreos/prometheus-operator/master/bundle.yaml
      

      Questo manifest è configurato per utilizzare lo spazio dei nomi default, che non è consigliato. Il passaggio successivo modifica la configurazione in modo da utilizzare uno spazio dei nomi denominato monitoring. Per utilizzare uno spazio dei nomi diverso, sostituiscilo dove vedi monitoring nei passaggi rimanenti.

    3. Crea un file per aggiornare lo spazio dei nomi di ClusterRoleBinding nel bundle precedente.

      # 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. Crea un file kustomization.yaml che applichi la patch e modifichi lo spazio dei nomi per altre risorse nel manifest.

      # kustomization.yaml
      resources:
      - bundle.yaml
      
      namespace: monitoring
      
      patchesStrategicMerge:
      - patch-crb.yaml
      
    5. Crea lo spazio dei nomi monitoring, se non ne esiste uno. Puoi utilizzare un nome diverso per lo spazio dei nomi, ma in questo caso modifica anche il valore di namespace nei manifest YAML dai passaggi precedenti.

      kubectl create namespace monitoring
      
    6. Applica il manifest Kustomize utilizzando i comandi seguenti:

      kubectl apply -k .
      
      until kubectl get customresourcedefinitions servicemonitors.monitoring.coreos.com ; \
      do date; sleep 1; echo ""; done

      Il secondo comando blocca finché i CRD non sono disponibili nel cluster.

    7. Crea il manifest per le risorse necessarie per configurare un server Prometheus che esegue lo scraping delle metriche da 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. Applica il manifest utilizzando i seguenti comandi:

      kubectl apply -f config-sync.yaml
      
      until kubectl rollout status statefulset/prometheus-config-sync -n monitoring; \
      do sleep 1; done
      

      Il secondo comando si blocca finché i pod non sono in esecuzione.

    9. Puoi verificare l'installazione inoltrando la porta web del server Prometheus alla macchina locale.

      kubectl -n monitoring port-forward svc/prometheus-config-sync 9190
      

      Ora puoi accedere alla UI web di Prometheus all'indirizzo http://localhost:9190.

    10. Rimuovi la directory temporanea.

      cd ..
      rm -rf config-sync-monitor
      

Metriche Prometheus disponibili

Config Sync raccoglie le seguenti metriche e le rende disponibili in Prometheus. La colonna Etichette elenca tutte le etichette applicabili a ogni metrica. Le metriche senza etichette rappresentano una singola misurazione nel tempo, mentre le metriche con etichette rappresentano più misurazioni, una per ogni combinazione di valori delle etichette.

Se questa tabella non è sincronizzata, puoi filtrare le metriche per prefisso nell'interfaccia utente di Prometheus. Tutte le metriche iniziano con il prefisso config_sync_.

Nome Tipo Etichette Descrizione
config_sync_api_duration_seconds_bucket Istogramma stato, operazione Distribuzione della latenza delle chiamate al server API (distribuita in bucket per durata di ogni ciclo)
config_sync_api_duration_seconds_count Istogramma stato, operazione Distribuzione della latenza delle chiamate al server API (ignora durata)
config_sync_api_duration_seconds_sum Istogramma stato, operazione Somma delle durate di tutte le chiamate al server API
config_sync_apply_duration_seconds_bucket Istogramma commit, stato Distribuzione della latenza dell'applicazione delle risorse dichiarate dall'origine dati a un cluster (distribuite in bucket per durata di ogni ciclo)
config_sync_apply_duration_seconds_count Istogramma commit, stato Distribuzione della latenza dell'applicazione delle risorse dichiarate dall'origine attendibile a un cluster (ignora durata)
config_sync_apply_duration_seconds_sum Istogramma commit, stato Somma delle durate di tutta la latenza dell'applicazione delle risorse dichiarate dall'origine attendibile in un cluster
config_sync_apply_operations_total Contatore operazione, stato, controller Numero di operazioni eseguite per sincronizzare le risorse dalla fonte attendibile a un cluster
config_sync_cluster_scoped_resource_count Gauge gruppo di risorse Numero di risorse con ambito cluster in un ResourceGroup
config_sync_crd_count Gauge gruppo di risorse Numero di CRD in un gruppo di risorse
config_sync_declared_resources Gauge commit Numero di risorse dichiarate analizzate da Git
config_sync_internal_errors_total Contatore source Numero di errori interni attivati da Config Sync. La metrica potrebbe non essere visualizzata se non si è verificato alcun errore interno
config_sync_kcc_resource_count Gauge gruppo di risorse Numero di risorse Config Connector in un ResourceGroup
config_sync_last_apply_timestamp Gauge commit, stato Timestamp dell'operazione di applicazione più recente
config_sync_last_sync_timestamp Gauge commit, stato Timestamp della sincronizzazione più recente da Git
config_sync_parser_duration_seconds_bucket Istogramma stato, trigger, origine Distribuzione della latenza di diverse fasi coinvolte nella sincronizzazione dalla fonte attendibile a un cluster
config_sync_parser_duration_seconds_count Istogramma stato, trigger, origine Distribuzione della latenza di diverse fasi coinvolte nella sincronizzazione dalla fonte attendibile a un cluster (ignora durata)
config_sync_parser_duration_seconds_sum Istogramma stato, trigger, origine Somma delle latenze delle diverse fasi coinvolte nella sincronizzazione dalla fonte attendibile a un cluster
config_sync_pipeline_error_observed Gauge nome, riconciliatore, componente Stato delle risorse personalizzate RootSync e RepoSync. Il valore 1 indica un errore
config_sync_ready_resource_count Gauge gruppo di risorse Numero totale di risorse pronte in un ResourceGroup
config_sync_reconcile_duration_seconds_bucket Istogramma stato Distribuzione della latenza degli eventi di riconciliazione gestiti dal gestore del riconciliatore (distribuiti in bucket per durata di ogni chiamata)
config_sync_reconcile_duration_seconds_count Istogramma stato Distribuzione della latenza degli eventi di riconciliazione gestiti dal gestore del riconciliatore (ignoramento della durata)
config_sync_reconcile_duration_seconds_sum Istogramma stato Somma delle durate di tutta la latenza degli eventi di riconciliazione gestiti dal gestore del riconciliatore
config_sync_reconciler_errors Gauge componente, errorclass Numero di errori riscontrati durante la sincronizzazione delle risorse dall'origine attendibile a un cluster
config_sync_remediate_duration_seconds_bucket Istogramma stato Distribuzione della latenza degli eventi di riconciliazione dei correttivi (distribuiti in bucket per durata)
config_sync_remediate_duration_seconds_count Istogramma stato Distribuzione della latenza degli eventi di riconciliazione dei correttivi (ignora durata)
config_sync_remediate_duration_seconds_sum Istogramma stato Somma delle durate di tutti gli eventi di latenza degli eventi di riconciliazione correttiva
config_sync_resource_count Gauge gruppo di risorse Numero di risorse monitorate da un ResourceGroup
config_sync_resource_conflicts_total Contatore commit Numero di conflitti di risorse derivanti da una mancata corrispondenza tra le risorse memorizzate nella cache e le risorse del cluster. La metrica potrebbe non essere visualizzata se non si è verificato alcun conflitto tra risorse
config_sync_resource_fights_total Contatore Numero di risorse sincronizzate con troppo frequenza. La metrica potrebbe non essere visualizzata se non si è verificato alcun conflitto tra risorse
config_sync_resource_group_total Gauge Numero di RP ResourceGroup
config_sync_resource_ns_count Gauge gruppo di risorse Numero di spazi dei nomi utilizzati dalle risorse in un ResourceGroup
config_sync_rg_reconcile_duration_seconds_bucket. Istogramma motivo di stallo Distribuzione temporale della riconciliazione di una RP ResourceGroup (distribuita in bucket per durata)
config_sync_rg_reconcile_duration_seconds_count Istogramma motivo di stallo Distribuzione temporale della riconciliazione di una RP ResourceGroup (ignora durata)
config_sync_rg_reconcile_duration_seconds_sum Istogramma motivo di stallo Somma di tutte le attività di riconciliazione di una RP ResourceGroup
config_sync_kustomize_build_latency_bucket Istogramma Distribuzione della latenza del tempo di esecuzione di kustomize build (distribuito in bucket per durata di ogni operazione)
config_sync_kustomize_build_latency_count Istogramma Distribuzione della latenza del tempo di esecuzione di kustomize build (ignora durata)
config_sync_kustomize_build_latency_sum Istogramma Somma di tutto il tempo di esecuzione (kustomize build)
config_sync_kustomize_ordered_top_tier_metrics Gauge top_tier_field Utilizzo di risorse, generatori, SecretGenerator, ConfigMapGenerator, trasformatori e convalidatori
config_sync_kustomize_builtin_transformers Gauge k8s_builtin_transformer Utilizzo di trasformatori integrati relativi ai metadati degli oggetti Kubernetes
config_sync_kustomize_resource_count Gauge Numero di risorse emesse da kustomize build
config_sync_kustomize_field_count Gauge field_name Numero di volte in cui un determinato campo viene utilizzato nei file di kustomization
config_sync_kustomize_patch_count Gauge patch_field Numero di patch nei campi patches, patchesStrategicMerge e patchesJson6902
config_sync_kustomize_base_count Gauge base_source Numero di basi remote e locali
kustomize_deprecating_field_count Gauge deprecating_field Utilizzo di campi che potrebbero diventare obsoleti
kustomize_simplification_adoption_count Gauge simplification_field Utilizzo di immagini, repliche e sostituzioni dei trasformatori di semplificazione
kustomize_helm_inflator_count Gauge helm_inflator Utilizzo di helm in kustomize, da parte dei campi integrati o della funzione personalizzata

Esempi di procedure di debug per Prometheus

I seguenti esempi illustrano alcuni pattern per l'utilizzo delle metriche Prometheus, dei campi di stato degli oggetti e delle annotazioni degli oggetti per rilevare e diagnosticare i problemi relativi a Config Sync. Questi esempi mostrano come iniziare con il monitoraggio ad alto livello che rilevi un problema e poi perfezionare progressivamente la ricerca per visualizzare in dettaglio e diagnosticare la causa principale del problema.

Configurazioni di query per stato

Il processo reconciler fornisce metriche di alto livello che forniscono insight utili su una visione generale del funzionamento di Config Sync nel cluster. Puoi vedere se si sono verificati errori e persino impostare avvisi relativi a tali errori.

config_sync_reconciler_errors

Metriche di query per riconciliatore

Se utilizzi le API Config Sync RootSync e RepoSync, puoi monitorare gli oggetti RootSync e RepoSync. Gli oggetti RootSync e RepoSync offrono metriche di alto livello che forniscono utili insight sul funzionamento di Config Sync nel cluster. Quasi tutte le metriche sono codificate in base al nome del riconciliatore; puoi quindi verificare se si sono verificati errori e impostare i relativi avvisi in Prometheus.

Consulta l'elenco completo delle etichette delle metriche disponibili per l'applicazione di filtri.

In Prometheus, puoi utilizzare i seguenti filtri per RootSyncs o RepoSyncs:

# Querying RootSync
config_sync_reconciler_errors{configsync_sync_name=ROOT_SYNC_NAME}

# Querying RepoSync
config_sync_reconciler_errors{configsync_sync_name=REPO_SYNC_NAME}

Eseguire query sulle operazioni di importazione e sincronizzazione in base allo stato

In Prometheus, puoi utilizzare le seguenti query:

# 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"}

Puoi anche controllare le metriche per i processi di origine e di sincronizzazione:

config_sync_parser_duration_seconds{status="error"}
config_sync_apply_duration_seconds{status="error"}
config_sync_remediate_duration_seconds{status="error"}

Monitora le risorse con Google Cloud Managed Service per Prometheus

Google Cloud Managed Service per Prometheus è la soluzione multi-cloud completamente gestita di Google Cloud per le metriche Prometheus. Supporta due modalità per la raccolta dei dati: raccolta gestita (la modalità consigliata) o raccolta dei dati con deployment autonomo. Completa i seguenti passaggi per configurare il monitoraggio di Config Sync con Google Cloud Managed Service per Prometheus in modalità di raccolta gestita.

  1. Abilita Managed Prometheus sul tuo cluster seguendo le istruzioni in Configurare la raccolta gestita.

  2. Salva il seguente manifest di esempio come pod-monitoring-config-sync-monitoring.yaml. Questo manifest configura una risorsa PodMonitoring per eseguire lo scraping delle metriche di Config Sync sulla porta 8675 del pod otel-collector-* nello spazio dei nomi config-management-monitoring. La risorsa PodMonitoring utilizza un selettore di etichette Kubernetes per trovare il 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. Applica il manifest al cluster:

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

  4. Verifica che i dati Prometheus vengano esportati utilizzando la pagina Metrics Explorer di Cloud Monitoring nella console Google Cloud seguendo le istruzioni su Dati di Managed Service per Prometheus in Cloud Monitoring.