Policy Controller überwachen

Policy Controller 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 zusammen mit den folgenden Manifesten, die alle Anthos Config Management-Messwerte alle 10 Sekunden extrahieren.

    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
      ---
        endpoints:
        - port: metrics
          interval: 10s
      ---
      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
      

Wenn Policy Controller in Ihrem Cluster aktiviert ist, können Sie die folgenden Messwerte abfragen (alle mit dem Präfix gatekeeper_):

Verfügbare Messwerte

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