Anthos Config Management überwachen

Anthos Config Management nutzt Prometheus, um Messwerte zu internen Prozessen zu erfassen und anzuzeigen.

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 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. Sie haben folgende Möglichkeiten:

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

  • Sie verwenden den Prometheus-Operator von CoreOS und die folgenden Manifeste, um alle Anthos Config Management-Messwerte alle 10 Sekunden abzurufen.

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

      mkdir acm-monitor
      cd acm-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. 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 kustomized 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 zum Konfigurieren eines Prometheus-Servers erforderlich sind, mit dem Messwerte aus Anthos Config Management entfernt werden.

      # acm.yaml
      apiVersion: v1
      kind: ServiceAccount
      metadata:
        name: prometheus-acm
        namespace: monitoring
      ---
      apiVersion: rbac.authorization.k8s.io/v1beta1
      kind: ClusterRole
      metadata:
        name: prometheus-acm
      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/v1beta1
      kind: ClusterRoleBinding
      metadata:
        name: prometheus-acm
      roleRef:
        apiGroup: rbac.authorization.k8s.io
        kind: ClusterRole
        name: prometheus-acm
      subjects:
      - kind: ServiceAccount
        name: prometheus-acm
        namespace: monitoring
      ---
      apiVersion: monitoring.coreos.com/v1
      kind: Prometheus
      metadata:
        name: acm
        namespace: monitoring
        labels:
          prometheus: acm
      spec:
        replicas: 2
        serviceAccountName: prometheus-acm
        serviceMonitorSelector:
          matchLabels:
            prometheus: config-management
        podMonitorSelector:
          matchLabels:
            prometheus: config-management
        alerting:
          alertmanagers:
          - namespace: default
            name: alertmanager
            port: web
        resources:
          requests:
            memory: 400Mi
      ---
      apiVersion: v1
      kind: Service
      metadata:
        name: prometheus-acm
        namespace: monitoring
        labels:
          prometheus: acm
      spec:
        type: NodePort
        ports:
        - name: web
          nodePort: 31900
          port: 9190
          protocol: TCP
          targetPort: web
        selector:
          app: prometheus
          prometheus: acm
      ---
      apiVersion: monitoring.coreos.com/v1
      kind: ServiceMonitor
      metadata:
        name: acm-service
        namespace: monitoring
        labels:
          prometheus: config-management
      spec:
        selector:
          matchLabels:
            monitored: "true"
        namespaceSelector:
          matchNames:
          - config-management-system
        endpoints:
        - port: metrics
          interval: 10s
      ---
      apiVersion: monitoring.coreos.com/v1
      kind: ServiceMonitor
      metadata:
        name: cnrm
        namespace: monitoring
        labels:
          prometheus: config-management
      spec:
        endpoints:
        - interval: 10s
          port: metrics
        namespaceSelector:
          matchNames:
          - cnrm-system
        selector:
          matchLabels:
            cnrm.cloud.google.com/monitored: "true"
            cnrm.cloud.google.com/system: "true"
      ---
      apiVersion: monitoring.coreos.com/v1
      kind: PodMonitor
      metadata:
        name: acm-pod
        namespace: monitoring
        labels:
          prometheus: config-management
      spec:
        selector:
          matchLabels:
            monitored: "true"
        namespaceSelector:
          matchNames:
          - gatekeeper-system
        podMetricsEndpoints:
        - port: metrics
          interval: 10s
      
    8. Führen Sie den folgenden Befehl aus, um das Manifest anzuwenden:

      kubectl apply -f acm.yaml
      
      until kubectl rollout status statefulset/prometheus-acm -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-acm 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 acm-monitor
      

Verfügbare Messwerte

Anthos Config Management 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 gkeconfig_.

Name Typ Label Beschreibung
gkeconfig_importer_cycle_duration_seconds_bucket Histogramm Status Anzahl der Zyklen, die der Importeur versucht hat, Konfigurationen in den Cluster zu importieren (verteilt auf Buckets nach Dauer jedes Zyklus)
gkeconfig_importer_cycle_duration_seconds_count Histogramm Status Anzahl der Zyklen, die der Importeur versucht hat, Konfigurationen in den Cluster zu importieren (ohne Berücksichtigung der Dauer)
gkeconfig_importer_cycle_duration_seconds_sum Histogramm Status Summe der Dauer aller Zeiträume, die der Importeur versucht hat, Konfigurationen in den Cluster zu importieren
gkeconfig_importer_namespace_configs Gauge Anzahl der Namespace-Konfigurationen im aktuellen Status
gkeconfig_monitor_errors Gauge Komponente Anzahl der Fehler im Konfigurations-Repository, gruppiert nach der Komponente, in der sie aufgetreten sind
gkeconfig_monitor_configs Gauge Status Anzahl der Konfigurationen (Cluster und Namespace), gruppiert nach ihrem Synchronisierungsstatus
gkeconfig_monitor_last_import_timestamp Gauge Zeitstempel des letzten Imports
gkeconfig_monitor_last_sync_timestamp Gauge Zeitstempel der letzten Synchronisierung
gkeconfig_monitor_sync_latency_seconds_bucket Histogramm Anzahl der durchgeführten Import-to-Sync-Messungen (verteilt auf Buckets durch Latenz zwischen beiden)
gkeconfig_monitor_sync_latency_seconds_count Histogramm Anzahl der durchgeführten Import-to-Sync-Messungen (ohne Berücksichtigung der Latenz zwischen beiden)
gkeconfig_monitor_sync_latency_seconds_sum Histogramm Summe der Latenzen aller durchgeführten Import-to-Sync-Messungen
gkeconfig_syncer_api_duration_seconds_bucket Histogramm Vorgang, Typ, Status Anzahl der vom Syncer an den API-Server getätigten Aufrufe (verteilt auf Buckets nach Dauer jedes Aufrufs)
gkeconfig_syncer_api_duration_seconds_count Histogramm Vorgang, Typ, Status Anzahl der Aufrufe des Importeurs an den API-Server (ohne Berücksichtigung der Dauer)
gkeconfig_syncer_api_duration_seconds_sum Histogramm Vorgang, Typ, Status Summe der Dauer aller Aufrufe des Syncers an den API-Server
gkeconfig_syncer_controller_restarts_total Zähler Quelle Gesamtzahl der Neustarts für die Namespace- und Cluster-Konfigurationscontroller
gkeconfig_syncer_operations_total Zähler Vorgang, Typ, Status Gesamtzahl der Vorgänge, um Ressourcen mit Konfigurationen zu synchronisieren
gkeconfig_syncer_reconcile_duration_seconds_bucket Histogramm Typ, Status Anzahl der vom Syncer verarbeiteten Abgleichsereignisse (nach Dauer auf Buckets verteilt)
gkeconfig_syncer_reconcile_duration_seconds_count Histogramm Typ, Status Anzahl der vom Syncer verarbeiteten Abgleichereignisse (ohne Berücksichtigung der Dauer)
gkeconfig_syncer_reconcile_duration_seconds_sum Histogramm Typ, Status Summe der Dauer aller vom Syncer verarbeiteten Abgleichereignisse
gkeconfig_syncer_reconcile_event_timestamps Gauge Typ Zeitstempel, bei denen Syncer-Abgleichsereignisse aufgetreten sind
Wenn Sie Config Connector verwenden, finden Sie die Liste der Messwerte unter Monitoring Config Connector mit Prometheus.

Wenn Policy Controller in Ihrem Cluster aktiviert ist, sind die folgenden zusätzlichen Messwerte verfügbar (alle mit dem Präfix gatekeeper_):

Name Typ Label Beschreibung
gatekeeper_audit_duration_seconds Histogramm Verteilung der Prüfzyklusdauer
gatekeeper_audit_last_run_time Gauge Der Epochenzeitstempel seit der letzten Prüflaufzeit, angegeben in Sekunden als Gleitkommawert
gatekeeper_constraint_template_ingestion_count Zähler Status Gesamtzahl der Aktionen zur Aufnahme von Einschränkungsvorlagen
gatekeeper_constraint_template_ingestion_duration_seconds Histogramm Status Verteilung der Aufnahmedauer von Einschränkungsvorlagen
gatekeeper_constraint_templates Gauge Status Aktuelle Anzahl von Einschränkungsvorlagen
gatekeeper_constraints Gauge enforcement_action, Status Aktuelle Anzahl von Einschränkungen
gatekeeper_request_count Zähler admission_status Anzahl der Zulassungsanfragen vom API-Server
gatekeeper_request_duration_seconds Histogramm admission_status Verteilung der Dauer der Zulassungsanfrage
gatekeeper_violations Gauge enforcement_action Anzahl der im letzten Audit-Zyklus festgestellten Audit-Verstöße
gatekeeper_watch_manager_intended_watch_gvk Gauge Wie viele eindeutige GroupVersionKinds Policy Controller sollen beobachtet werden? Dies ist eine Kombination aus synchronisierten Ressourcen und Einschränkungen. Derzeit nicht implementiert
gatekeeper_watch_manager_watched_gvk Gauge Wie viele eindeutige GroupVersionKinds Policy Controller werden tatsächlich überwacht? Dies soll konvergieren, wenn es gleich gatekeeper_watch_manager_intended_watch_gvk ist. Derzeit nicht implementiert
gatekeeper_sync Gauge Art, Status Wie viele Ressourcen wurden in den Cache von OPA repliziert
gatekeeper_sync_duration_seconds Histogramm Verteilung der Objektsynchronisierung
gatekeeper_sync_last_run_time Gauge Letzte Synchronisierung einer Ressource

Beispiel für Debugging-Verfahren

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 Anthos Config Management. 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 monitor-Vorgang bietet allgemeine Messwerte, die nützliche Einblicke in die Gesamtübersicht über die Funktionsweise von Anthos Config Management im Cluster geben. Sie können sehen, ob Fehler aufgetreten sind, und sogar Warnungen für diese einrichten.

gkeconfig_monitor_errors

nomos status zum Anzeigen von Fehlern verwenden

Zusätzlich zur Verwendung von Prometheus-Messwerten zur Überwachung des Status von Anthos Config Management in Ihren Clustern können Sie den Befehl nomos status verwenden, mit dem Fehler aus allen Clustern in der Befehlszeile gedruckt werden.

Import- und Synchronisierungsvorgänge nach Status abfragen

Anthos Config Management verwendet einen zweistufigen Vorgang, um Konfigurationen aus dem Repository auf einen Cluster anzuwenden. Der Messwert gkeconfig_monitor_errors ist nach Komponenten gekennzeichnet, damit Sie sehen können, wo Fehler aufgetreten sind.

gkeconfig_monitor_errors{component="importer"}
gkeconfig_monitor_errors{component="syncer"}

Sie können auch die Messwerte für die Importeur- und Syncer-Prozesse selbst prüfen.

gkeconfig_importer_cycle_duration_seconds_count{status="error"}
gkeconfig_syncer_reconcile_duration_seconds_count{status="error"}

Konfigurationsobjektstatus prüfen

Anthos Config Management definiert zwei benutzerdefinierte Kubernetes-Objekte: ClusterConfig und NamespaceConfig. Diese Objekte definieren ein Statusfeld, das Informationen über die Änderung enthält, die zuletzt auf die Konfiguration angewendet wurde, sowie alle aufgetretenen Fehler. Wenn beispielsweise in einem Namespace mit dem Namen shipping-dev ein Fehler auftritt, können Sie den Status der entsprechenden NamespaceConfig prüfen.

kubectl get namespaceconfig shipping-dev -o yaml

token-Annotation eines Objekts prüfen

Möglicherweise möchten Sie wissen, wann ein verwaltetes Kubernetes-Objekt zuletzt von Anthos Config Management aktualisiert wurde. Jedes verwaltete Objekt wird mit dem Hash des Git-Commits bei der letzten Änderung sowie dem Pfad zu der Konfiguration, die die Änderung enthielt, mit Annotationen versehen.

kubectl get clusterrolebinding namespace-readers
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  annotations:
    configmanagement.gke.io/source-path: cluster/namespace-reader-clusterrolebinding.yaml
    configmanagement.gke.io/token: bbb6a1e2f3db692b17201da028daff0d38797771
  name: namespace-readers
...

Weitere Informationen finden Sie unter Labels und Annotationen.

Weitere Informationen