Bestimmte Prometheus-Messwerte aus Kubernetes erfassen

In diesem Dokument wird beschrieben, wie Sie Google Cloud Managed Service for Prometheus konfigurieren, um bestimmte Kubernetes-Messwerte aus Google Kubernetes Engine-Clustern (GKE) und -Arbeitslasten zu filtern und zu erfassen.

Sie sollten bereits mit Folgendem vertraut sein:

Messwerterfassung in GKE

Systemkomponenten in GKE-Clustern geben Prometheus-Messwerte aus und stellen sie zur Verfügung. Standardmäßig werden in allen Clustern Systemmesswerte erfasst, die speziell für GKE gelten. Zusätzliche integrierte Messwertpakete sind verfügbar, um kuratierte Sammlungen von Messwerten für verschiedene Komponenten zu erfassen.

Unabhängig von den integrierten GKE-Messwertpaketen können Sie Google Cloud Managed Service for Prometheus manuell so konfigurieren, dass bestimmte Prometheus-Messwerte aufgenommen werden. Diese benutzerdefinierte Konfiguration eignet sich gut für Anwendungsfälle wie die folgenden:

  • Überwachen Sie bestimmte Signale in Ihrem Cluster und Ihren Arbeitslasten.
  • Sie können die Kosten optimieren, indem Sie Messwertpakete deaktivieren, die Sie nicht benötigen, und nur eine Teilmenge von Messwerten erfassen.
  • Messwerte erfassen, die von Komponenten ausgegeben werden, aber nicht in einem Messwertepaket enthalten sind.

Für Operatoren sind möglicherweise Knotenmesswerte nützlich, die vom kubelet-Prozess auf jedem Knoten ausgegeben werden, um Arbeitslasten und Knoten auf bestimmte Signale zu überwachen.

Benutzerdefinierte Ressourcen für die Messwerterfassung

Wenn Sie einen bestimmten Messwert filtern und aufnehmen möchten, konfigurieren Sie Prometheus-Regeln für das Neuzuweisen von Labels in einer der folgenden benutzerdefinierten Ressourcen:

  • PodMonitoring: Konfigurieren Sie die Messwerterfassung von Pods in einem bestimmten Namespace.
  • ClusterPodMonitoring: Konfigurieren Sie die Erfassung von Messwerten aus Pods in einem beliebigen Namespace.
  • ClusterNodeMonitoring: Konfigurieren Sie die Erfassung von Messwerten von Knotenkomponenten wie kubelet und cAdvisor.

Duplizierte Messwerte

Wenn Sie nach einem Messwert filtern, der auch in einem aktiven Messwertpaket für einen Cluster enthalten ist, wird der Messwert mehrmals in Google Cloud Managed Service for Prometheus angezeigt. Wenn in Ihrem Cluster beispielsweise das Messwertpaket KUBELET aktiviert ist und Sie die Erfassung des Messwerts kubelet_running_containers konfigurieren, werden doppelte Werte angezeigt.

Prüfen Sie, ob die von Ihnen erfassten Messwerte nicht in einem der aktiven Messwertpakete enthalten sind, um Duplikate zu vermeiden. Weitere Informationen zu den enthaltenen Messwerten finden Sie in den folgenden Messwertpaketen:

Hinweis

Führen Sie die folgenden Aufgaben aus, bevor Sie beginnen:

  • Aktivieren Sie die Google Kubernetes Engine API.
  • Google Kubernetes Engine API aktivieren
  • Wenn Sie die Google Cloud CLI für diese Aufgabe verwenden möchten, müssen Sie die gcloud CLI installieren und dann initialisieren. Wenn Sie die gcloud CLI bereits installiert haben, rufen Sie die neueste Version mit dem Befehl gcloud components update ab. Ältere gcloud CLI-Versionen unterstützen möglicherweise nicht die Ausführung der Befehle in diesem Dokument.

Erforderliche Rollen

Bitten Sie Ihren Administrator, Ihnen die folgenden IAM-Rollen für das Projekt zuzuweisen, damit Sie die nötigen Berechtigungen zum Erheben und Aufrufen von Messwerten haben:

Weitere Informationen zum Zuweisen von Rollen finden Sie unter Zugriff auf Projekte, Ordner und Organisationen verwalten.

Sie können die erforderlichen Berechtigungen auch über benutzerdefinierte Rollen oder andere vordefinierte Rollen erhalten.

Google Cloud Managed Service for Prometheus aktivieren

Google Cloud Managed Service for Prometheus ist in allen GKE-Clustern standardmäßig aktiviert und kann in Autopilot-Clustern nicht deaktiviert werden. Wenn Sie einen Autopilot-Cluster verwenden, fahren Sie mit dem Abschnitt Messwerterfassung konfigurieren fort.

Wählen Sie eine der folgenden Optionen aus, um zu prüfen, ob Google Cloud Managed Service for Prometheus in Ihrem Standardcluster aktiviert ist:

Console

  1. Rufen Sie in der Google Cloud Console die Seite Kubernetes-Cluster auf.

    Zur Seite "Kubernetes-Cluster"

  2. Klicken Sie in der Zeile für den Cluster, den Sie prüfen möchten, auf  Aktionen >  Bearbeiten. Die Seite Clusterdetails wird geöffnet.

  3. Prüfen Sie im Abschnitt Features den Wert im Feld Managed Service for Prometheus. Wenn der Wert Aktiviert ist, fahren Sie mit dem Abschnitt Messwerterfassung konfigurieren fort. Wenn der Wert Deaktiviert lautet, aktivieren Sie Google Cloud Managed Service for Prometheus:

    1. Klicken Sie auf  Managed Service for Prometheus bearbeiten. Das Dialogfeld Managed Service for Prometheus bearbeiten wird geöffnet.
    2. Klicken Sie auf das Kästchen Managed Service for Prometheus aktivieren.
    3. Klicken Sie auf Änderungen speichern.

gcloud

Prüfen Sie, ob Google Cloud Managed Service for Prometheus im Cluster aktiviert ist:

gcloud container clusters describe CLUSTER_NAME \
    --location=CONTROL_PLANE_LOCATION \
    --format='value(monitoringConfig.managedPrometheusConfig.enabled)'

Ersetzen Sie Folgendes:

  • CLUSTER_NAME: Der Name Ihres Standardclusters.
  • CONTROL_PLANE_LOCATION: Die Region oder Zone der Cluster-Steuerungsebene, z. B. us-central1 oder us-central1-a.

Wenn die Ausgabe True ist, ist Google Cloud Managed Service for Prometheus aktiviert. Wenn die Ausgabe False ist, aktivieren Sie Google Cloud Managed Service for Prometheus:

gcloud container clusters update CLUSTER_NAME \
    --location=CONTROL_PLANE_LOCATION \
    --enable-managed-prometheus

Messwerterfassung konfigurieren

Wenn Sie Google Cloud Managed Service for Prometheus so konfigurieren möchten, dass ein bestimmter ausgegebener Messwert aufgenommen wird, benötigen Sie die folgenden Informationen zum Messwert:

  • Der Name des Messwerts, z. B. kubelet_working_pods.
  • Der Endpunkt, der den Messwert bereitstellt, z. B. /metrics/cadvisor oder /metrics.

So finden Sie Messwerte und konfigurieren die Erfassung:

  1. Suchen Sie in der Referenzdokumentation für die jeweilige Komponente nach einem Messwert. Sie können beispielsweise die folgenden Ressourcen verwenden, um einen Knotenmesswert zu finden:

  2. Aktive Messwertpakete für den Cluster prüfen:

    gcloud container clusters describe CLUSTER_NAME \
        --location=CONTROL_PLANE_LOCATION \
        --flatten=monitoringConfig.componentConfig \
        --format='value(enableComponents)'
    

    Die Ausgabe sieht etwa so aus:

    SYSTEM_COMPONENTS;STORAGE;POD;DEPLOYMENT;STATEFULSET;DAEMONSET;HPA;JOBSET;CADVISOR;KUBELET;DCGM
    
  3. Prüfen Sie anhand der Informationen unter Verfügbare Messwerte, ob der Messwert, den Sie erfassen möchten, in einem dieser aktiven Pakete enthalten ist. Wenn Ihr Messwert in einem aktiven Messwertpaket enthalten ist, werden möglicherweise doppelte Messwerte in Monitoring angezeigt. Wenn sich Ihre Messwerte nicht in einem aktiven Messwertepaket befinden, fahren Sie mit dem nächsten Schritt fort.

  4. Optional: Wenn Sie prüfen möchten, ob der Messwert am Messwertendpunkt verfügbar ist, fragen Sie den Endpunkt mit dem Befehl kubectl get --raw ab. Mit dem folgenden Befehl wird beispielsweise der /metrics-Endpunkt für den Messwert kubelet_working_pods abgefragt:

    kubectl get --raw "/api/v1/nodes/NODE_NAME/proxy/metrics" | grep "kubelet_working_pods"
    

    Ersetzen Sie NODE_NAME durch den Namen des abzufragenden Knotens.

    Die Ausgabe sieht in etwa so aus. Das bedeutet, dass die Messwert verfügbar ist:

    # HELP kubelet_working_pods [ALPHA] Number of pods the kubelet is actually running, broken down by lifecycle phase, whether the pod is desired, orphaned, or runtime only (also orphaned), and whether the pod is static. An orphaned pod has been removed from local configuration or force deleted in the API and consumes resources that are not otherwise visible.
    # TYPE kubelet_working_pods gauge
    kubelet_working_pods{config="desired",lifecycle="sync",static=""} 8
    kubelet_working_pods{config="desired",lifecycle="sync",static="true"} 1
    kubelet_working_pods{config="desired",lifecycle="terminated",static=""} 0
    kubelet_working_pods{config="desired",lifecycle="terminated",static="true"} 0
    kubelet_working_pods{config="desired",lifecycle="terminating",static=""} 0
    kubelet_working_pods{config="desired",lifecycle="terminating",static="true"} 0
    
  5. Nachdem Sie den Messwert identifiziert haben, den Sie erfassen möchten, verwenden Sie eine Prometheus-Regel zur Neukennzeichnung in einer benutzerdefinierten PodMonitoring-, ClusterPodMonitoring- oder ClusterNodeMonitoring-Ressource, um nach diesem Messwert zu filtern. Die benutzerdefinierte Ressource, die Sie verwenden, hängt von den Eigenschaften des Messwerts ab, wie im Abschnitt Benutzerdefinierte Ressourcen für die Messwerterfassung beschrieben.

    Sehen Sie sich beispielsweise das folgende ClusterNodeMonitoring-Manifest an:

    apiVersion: monitoring.googleapis.com/v1
    kind: ClusterNodeMonitoring
    metadata:
      name: kubelet-pod-counts
    spec:
      selector:
        matchLabels: {}
      endpoints:
      - path: "/metrics"
        scheme: "https"
        interval: "30s"
        tls:
          insecureSkipVerify: true
        # metricRelabeling specifies the metrics to ingest. The metrics must be
        # available at the specified endpoint.
        metricRelabeling:
        - action: keep
          sourceLabels: [__name__]
          regex: kubelet_(active|working)_pods
    

    Dieses Manifest hat folgende Attribute:

    • Das Feld selector.matchLabels ist ein leerer Satz ({}), der mit allen Knoten übereinstimmt.
    • Das Feld endpoints.path gibt den zu erfassenden Messwert-Endpunkt an.
    • Im Feld metricRelabeling werden die zu erfassenden Messwerte angegeben. In diesem Beispiel erfasst Google Cloud Managed Service for Prometheus Messwerte mit den Namen kubelet_active_pods und kubelet_working_pods vom Endpunkt.

Wenn Sie die benutzerdefinierte Ressource bereitstellen, nimmt Google Cloud Managed Service for Prometheus Messwerte auf, die Ihrer angegebenen Konfiguration entsprechen. Sie können diese Messwerte mit denselben Methoden aufrufen und abfragen, die Sie für andere Messwerte verwenden, z. B. Cloud Monitoring.

Messwerterfassung für einen Beispielmesswert prüfen

In den folgenden Schritten wird beschrieben, wie Sie Google Cloud Managed Service for Prometheus so konfigurieren, dass der Messwert kubelet_runtime_operations_errors_total aus kubelet erfasst wird. In diesen Beispielschritten prüfen Sie, ob der Messwert derzeit erfasst wird, erstellen ein ClusterNodeMonitoring-Objekt (da kubelet eine Knotenkomponente ist) und prüfen dann, ob der Messwert in Monitoring angezeigt wird.

  1. Prüfen Sie, ob der Messwert kubelet_runtime_operations_errors_total nicht bereits in Monitoring vorhanden ist:

    1. Wechseln Sie in der Google Cloud Console zur Seite Metrics Explorer.

      Zum Metrics Explorer

    2. Versuchen Sie, im Abschnitt Abfragen im Feld Messwert den Messwert prometheus/kubelet_runtime_operations_errors_total/counter auszuwählen. Wenn Sie kein Suchergebnis sehen, wird der Messwert nicht erfasst.

  2. Erstellen Sie ein ClusterNodeMonitoring, um nach dem Messwert kubelet_runtime_operations_errors_total zu filtern:

    1. Speichern Sie das folgende ClusterNodeMonitoring-Manifest als kubelet-runtime-errors-collector.yaml:

      apiVersion: monitoring.googleapis.com/v1
      kind: ClusterNodeMonitoring
      metadata:
        name: kubelet-runtime-errors-collector
      spec:
        selector:
          matchLabels: {}
        endpoints:
        - path: /metrics
          scheme: https
          interval: 30s
          tls:
            insecureSkipVerify: true
          metricRelabeling:
          - action: keep
            sourceLabels: [__name__]
            regex: kubelet_runtime_operations_errors_total
      
    2. Erstellen Sie das ClusterNodeMonitoring:

      kubectl apply -f kubelet-runtime-errors-collector.yaml
      

    Es kann bis zu 10 Minuten dauern, bis der Messwert im Monitoring angezeigt wird.

  3. Prüfen Sie in der Google Cloud Console, ob der Messwert im Monitoring angezeigt wird:

    1. Rufen Sie die Seite Metrics Explorer auf.

      Zum Metrics Explorer

    2. Wählen Sie im Bereich Abfragen im Feld Messwert den Messwert prometheus/kubelet_runtime_operations_errors_total/counter aus.

    3. Optional: Wählen Sie im Drop-down-Menü Filter Ihren Cluster aus.

    Im Abschnitt Ergebnisse wird ein Diagramm mit dem erfassten Messwert angezeigt.

Nächste Schritte