Config Sync mit Prometheus überwachen

Auf dieser Seite wird gezeigt, wie Sie Messwerte von Config Sync an Prometheus senden.

Auf dieser Seite wird erläutert, wie Sie mit Prometheus Config Sync-Messwerte aufrufen. Weitere Möglichkeiten zum Exportieren von Messwerten finden Sie unter Config Sync mit Cloud Monitoring überwachen oder Config Sync mit benutzerdefiniertem Monitoring überwachen.

Config Sync erfasst automatisch Messwerte und exportiert sie nach Prometheus. Sie haben auch die Möglichkeit, Cloud Monitoring so zu konfigurieren, dass benutzerdefinierte Messwerte von Prometheus abgerufen werden. Dann können Sie benutzerdefinierte Messwerte in Prometheus und in Monitoring aufrufen. Weitere Informationen finden Sie in der GKE-Dokumentation unter Prometheus verwenden.

Messwerte abrufen

Alle Messwerte können per Scraping an Port 8675 abgerufen werden. Bevor Sie Messwerte abrufen können, müssen Sie Ihren Cluster für Prometheus konfigurieren. Entweder:

  • Sie können den Cluster gemäß der Prometheus-Dokumentation für Scraping konfigurieren oder

  • Sie verwenden den Prometheus Operator zusammen mit den folgenden Manifesten, die alle Config Sync-Messwerte alle 10 Sekunden extrahieren.

    1. Erstellen Sie ein temporäres Verzeichnis für die Manifestdateien.

      mkdir config-sync-monitor
      cd config-sync-monitor
      
    2. Laden Sie das Prometheus Operator-Manifest aus dem CoreOS-Repository mit dem Befehl curl herunter:

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

      Dieses Manifest ist für die Verwendung des Namespace default konfiguriert. Dieser wird nicht empfohlen. Im nächsten Schritt wird daher die Konfiguration so geändert, dass stattdessen ein Namespace namens monitoring genutzt wird. Wenn Sie einen anderen Namespace verwenden möchten, ersetzen Sie in den nachfolgenden Schritten monitoring durch den gewünschten Namespace.

    3. Erstellen Sie eine Datei, um den Namespace des ClusterRoleBinding im obigen Bundle zu aktualisieren.

      # 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. Erstellen Sie eine Datei kustomization.yaml, die den Patch anwendet und den Namespace für andere Ressourcen im Manifest ändert.

      # kustomization.yaml
      resources:
      - bundle.yaml
      
      namespace: monitoring
      
      patchesStrategicMerge:
      - patch-crb.yaml
      
    5. Erstellen Sie den Namespace monitoring, falls noch keiner vorhanden ist. Sie können dem Namespace einen anderen Namen geben, müssen dann aber auch den Wert für namespace in den YAML-Manifesten aus den vorherigen Schritten ändern.

      kubectl create namespace monitoring
      
    6. Führen Sie den folgenden Befehl aus, um das Manifest anzuwenden:

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

      Der zweite Befehl wird blockiert, bis die CRDs im Cluster verfügbar sind.

    7. Erstellen Sie das Manifest für die Ressourcen, die zur Konfiguration eines Prometheus-Servers erforderlich sind, mit dem Messwerte aus Config Sync abgerufen werden.

      # 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. Führen Sie den folgenden Befehl aus, um das Manifest anzuwenden:

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

      Der zweite Befehl wird blockiert, bis die Pods ausgeführt werden.

    9. Sie können die Installation prüfen, indem Sie den Webport des Prometheus-Servers an Ihren lokalen Computer weiterleiten.

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

      Sie können jetzt unter http://localhost:9190 auf die Prometheus-Web-UI zugreifen.

    10. Entfernen Sie das temporäre Verzeichnis.

      cd ..
      rm -rf config-sync-monitor
      

Verfügbare Prometheus-Messwerte

Config Sync erfasst die folgenden Messwerte und stellt sie Prometheus zur Verfügung. In der Spalte Labels werden alle Labels aufgelistet, die für jeden Messwert gelten. Messwerte ohne Labels stellen eine einzelne Messung über die Zeit dar, während Messwerte mit Labels mehrere Messungen darstellen, eine für jede Kombination von Labelwerten.

Wenn diese Tabelle nicht mehr synchronisiert ist, können Sie die Messwerte in der Prometheus-Benutzeroberfläche nach Präfix filtern. Alle Messwerte beginnen mit dem Präfix config_sync_.

Name Typ Labels Beschreibung
config_sync_api_duration_seconds_bucket Histogramm Status, Vorgang Latenzverteilung von API-Serveraufrufen (verteilt auf Buckets nach Dauer jedes Zyklus)
config_sync_api_duration_seconds_count Histogramm Status, Vorgang Latenzverteilung von API-Serveraufrufen (ohne Berücksichtigung der Dauer)
config_sync_api_duration_seconds_sum Histogramm Status, Vorgang Summe der Dauer aller API-Serveraufrufe
config_sync_apply_duration_seconds_bucket Histogramm Commit, Status Latenzverteilung der Anwendung von Ressourcen, die von der "Source of Truth" deklariert sind, auf einen Cluster (verteilt auf Buckets nach Dauer jedes Zyklus)
config_sync_apply_duration_seconds_count Histogramm Commit, Status Latenzverteilung bei der Anwendung von Ressourcen, die von der "Source of Truth" deklariert wurden, auf einen Cluster (ohne Berücksichtigung der Dauer)
config_sync_apply_duration_seconds_sum Histogramm Commit, Status Summe der Dauer der gesamten Latenz der Anwendung von Ressourcen, die von der "Source of Truth" auf einen Cluster deklariert wurden
config_sync_apply_operations_total Zähler Vorgang, Status, Controller Anzahl der Vorgänge, die ausgeführt wurden, um Ressourcen von der "Source of Truth" mit einem Cluster zu synchronisieren
config_sync_cluster_scoped_resource_count Gauge resourcegroup Die Anzahl der clusterbezogenen Ressourcen in einer ResourceGroup
config_sync_crd_count Gauge resourcegroup Anzahl der CRDs in einer ResourceGroup
config_sync_declared_resources Gauge commit Die Anzahl der deklarierten Ressourcen, die von Git geparst wurden
config_sync_internal_errors_total Zähler Quelle Anzahl der internen Fehler, die von Config Sync ausgelöst wurden. Der Messwert wird möglicherweise nicht angezeigt, wenn kein interner Fehler aufgetreten ist
config_sync_kcc_resource_count Gauge resourcegroup Anzahl der Config Connector-Ressourcen in einer ResourceGroup
config_sync_last_apply_timestamp Gauge Commit, Status Zeitstempel des letzten Anwendungsvorgangs
config_sync_last_sync_timestamp Gauge Commit, Status Der Zeitstempel der letzten Synchronisierung aus Git
config_sync_parser_duration_seconds_bucket Histogramm Status, Trigger, Quelle Latenzverteilung verschiedener Phasen bei der Synchronisierung von der "Source of Truth" mit einem Cluster
config_sync_parser_duration_seconds_count Histogramm Status, Trigger, Quelle Latenzverteilung verschiedener Phasen bei der Synchronisierung von der "Source of Truth" zu einem Cluster (ohne Berücksichtigung der Dauer)
config_sync_parser_duration_seconds_sum Histogramm Status, Trigger, Quelle Summe der Latenzen verschiedener Phasen, die an der Synchronisierung von der "Source of Truth" mit einem Cluster beteiligt sind
config_sync_pipeline_error_observed Gauge Name, Abgleicher, Komponente Der Status der benutzerdefinierten RootSync- und RepoSync-Ressourcen. Der Wert 1 weist auf einen Fehler hin.
config_sync_ready_resource_count Gauge resourcegroup Die Gesamtzahl der einsatzbereiten Ressourcen in einer ResourceGroup
config_sync_reconcile_duration_seconds_bucket Histogramm Status Latenzverteilung der vom Abgleicher verarbeiteten Abgleichereignisse (verteilt auf Buckets nach Dauer jedes Aufrufs)
config_sync_reconcile_duration_seconds_count Histogramm Status Latenzverteilung der Abgleichereignisse, die vom Abgleicher verarbeitet werden (ohne Berücksichtigung der Dauer)
config_sync_reconcile_duration_seconds_sum Histogramm Status Summe der Dauer aller Latenzen von Abgleichereignissen, die vom Abgleicher verarbeitet werden
config_sync_reconciler_errors Gauge Komponente, Fehlerklasse Anzahl der Fehler beim Synchronisieren von Ressourcen aus der "Source of Truth" mit einem Cluster
config_sync_remediate_duration_seconds_bucket Histogramm Status Latenzverteilung von Abgleich-Ereignissen (verteilt auf Buckets nach Dauer)
config_sync_remediate_duration_seconds_count Histogramm Status Latenzverteilung von Abgleich-Ereignissen (ohne Berücksichtigung der Dauer)
config_sync_remediate_duration_seconds_sum Histogramm Status Summe der Dauer aller Latenzen von Abgleich-Ereignissen
config_sync_resource_count Gauge resourcegroup Anzahl der von einer ResourceGroup verfolgten Ressourcen
config_sync_resource_conflicts_total Zähler commit Anzahl der Ressourcenkonflikte aufgrund einer Diskrepanz zwischen den im Cache gespeicherten Ressourcen und Clusterressourcen. Der Messwert wird möglicherweise nicht angezeigt, wenn kein Ressourcenkonflikt aufgetreten ist
config_sync_resource_fights_total Zähler Anzahl der Ressourcen, die zu häufig synchronisiert werden. Der Messwert wird möglicherweise nicht angezeigt, wenn kein Ressourcenkonflikt stattgefunden hat
config_sync_resource_group_total Gauge Anzahl der ResourceGroup-CRs
config_sync_resource_ns_count Gauge resourcegroup Die Anzahl der Namespaces, die von Ressourcen in einer ResourceGroup verwendet werden
config_sync_rg_reconcile_duration_seconds_bucket. Histogramm stallreason Zeitverteilung für den Abgleich einer ResourceGroup-CR (nach Dauer auf Buckets verteilt)
config_sync_rg_reconcile_duration_seconds_count Histogramm stallreason Zeitverteilung des Abgleichs einer ResourceGroup-CR (ohne Berücksichtigung der Dauer)
config_sync_rg_reconcile_duration_seconds_sum Histogramm stallreason Summe der gesamten Zeit für den Abgleich einer ResourceGroup-CR
config_sync_kustomize_build_latency_bucket Histogramm Latenzverteilung der Ausführungszeit kustomize build (verteilt auf Buckets nach Dauer jedes Vorgangs)
config_sync_kustomize_build_latency_count Histogramm Latenzverteilung der Ausführungszeit kustomize build (ohne Berücksichtigung der Dauer)
config_sync_kustomize_build_latency_sum Histogramm Summe aller kustomize build-Ausführungszeiten
config_sync_kustomize_ordered_top_tier_metrics Gauge top_tier_field Nutzung von Ressourcen, Generators, SecretGenerator, ConfigMapGenerator, Transformern und Validators
config_sync_kustomize_builtin_transformers Gauge k8s_builtin_transformer Nutzung integrierter Transformer im Zusammenhang mit Kubernetes-Objektmetadaten
config_sync_kustomize_resource_count Gauge Anzahl der von kustomize build ausgegebenen Ressourcen
config_sync_kustomize_field_count Gauge field_name Häufigkeit, mit der ein bestimmtes Feld in den Kustomization-Dateien verwendet wird
config_sync_kustomize_patch_count Gauge patch_field Anzahl der Patches in den Feldern patches, patchesStrategicMerge und patchesJson6902
config_sync_kustomize_base_count Gauge base_source Anzahl der Remote- und lokalen Basen
kustomize_deprecating_field_count Gauge deprecating_field Verwendung von Feldern, die eventuell verworfen werden
kustomize_simplification_adoption_count Gauge simplification_field Verwendung von Vereinfachungs-Transformer-Images, -Replikaten und -Ersetzungen
kustomize_helm_inflator_count Gauge helm_inflator Verwendung von helm in kustomize, unabhängig davon, ob die integrierten Felder oder die benutzerdefinierte Funktion verwendet werden

Beispiel für Debugging-Verfahren für Prometheus

Die folgenden Beispiele veranschaulichen einige Muster für die Verwendung von Prometheus-Messwerten, Objektstatusfeldern und Objektannotationen zum Erkennen und Diagnostizieren von Problemen im Zusammenhang mit Config Sync. Diese Beispiele zeigen, wie Sie mit Monitoring auf hoher Ebene beginnen, ein Problem erkennen und dann Ihre Suche schrittweise verfeinern können, um eine Aufschlüsselung durchzuführen und die Ursache des Problems zu diagnostizieren.

Konfigurationen nach Status abfragen

Der reconciler-Prozess bietet allgemeine Messwerte, die nützliche Einblicke in die Gesamtübersicht über die Funktionsweise von Config Sync im Cluster geben. Sie können sehen, ob Fehler aufgetreten sind, und sogar Warnungen für diese einrichten.

config_sync_reconciler_errors

Messwerte nach Abgleich abfragen

Wenn Sie Config Sync RootSync und RepoSync APIs verwenden, können Sie die RootSync- und RepoSync-Objekte überwachen. Die RootSync- und RepoSync-Objekte sind mit allgemeinen Messwerten instrumentiert, die Ihnen Einblick in die Funktionsweise von Config Sync im Cluster bieten. Fast alle Messwerte sind mit dem Abgleichnamen gekennzeichnet, sodass Sie sehen können, ob Fehler aufgetreten sind, und Sie können in Prometheus Benachrichtigungen für sie einrichten.

Sehen Sie sich eine vollständige Liste der verfügbaren Messwertlabels zum Filtern an.

In Prometheus können Sie die folgenden Filter für RootSyncs oder RepoSyncs verwenden:

# Querying RootSync
config_sync_reconciler_errors{configsync_sync_name=ROOT_SYNC_NAME}

# Querying RepoSync
config_sync_reconciler_errors{configsync_sync_name=REPO_SYNC_NAME}

Import- und Synchronisierungsvorgänge nach Status abfragen

In Prometheus können Sie die folgenden Abfragen verwenden:

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

Sie können auch die Messwerte für den Quell- und Synchronisierungsprozess selbst prüfen:

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

Ressourcen mit Google Cloud Managed Service for Prometheus überwachen

Google Cloud Managed Service for Prometheus ist die vollständig verwaltete Multi-Cloud-Lösung von Google Cloud für Prometheus-Messwerte. Er unterstützt zwei Modi für die Datenerfassung: die verwaltete Datenerfassung (der empfohlene Modus) oder die selbst bereitgestellte Datenerfassung. Führen Sie die folgenden Schritte aus, um Config Sync mit Google Cloud Managed Service for Prometheus im Modus „Verwaltete Datenerfassung“ einzurichten.

  1. Aktivieren Sie Managed Prometheus in Ihrem Cluster. Folgen Sie dazu der Anleitung unter Verwaltete Sammlung einrichten.

  2. Speichern Sie das folgende Beispielmanifest als pod-monitoring-config-sync-monitoring.yaml: Mit diesem Manifest wird eine PodMonitoring-Ressource konfiguriert, um die Config Sync-Messwerte an Port 8675 des Pods otel-collector-* unter dem Namespace config-management-monitoring zu extrahieren. Die PodMonitoring-Ressource verwendet eine Kubernetes-Labelauswahl, um den Pod otel-collector-* zu finden.

    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. Wenden Sie das Manifest auf den Cluster an:

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

  4. Prüfen Sie, ob Ihre Prometheus-Daten in der Google Cloud Console auf der Seite "Cloud Monitoring-Messwert-Explorer" exportiert werden. Folgen Sie dazu der Anleitung unter Verwalteter Dienst für Prometheus-Daten in Cloud Monitoring.