Migration von GKE-Arbeitslastmesswerten vom Stackdriver-Prometheus-Sidecar

In dieser Anleitung wird gezeigt, wie Sie eine Pipeline der Messwerterfassung auf Basis des Stackdriver-Prometheus-Sidecars zu vollständig verwalteten Arbeitslastmesswerten von Google Kubernetes Engine (GKE) migrieren. Die Verwendung von GKE-Arbeitslastmesswerten anstelle des Stackdriver-Prometheus-Sidecars bietet eine Vielzahl von Vorteilen:

  • Einfache Einrichtung: Sie können mit einem einzigen kubectl-Befehl zum Bereitstellen einer benutzerdefinierten PodMonitor-Ressource mit dem Erfassen von Messwerten starten.
  • Hoch konfigurierbar: Sie können die Scraping-Endpunkte, die Häufigkeit und andere Parameter anpassen.
  • Vollständig verwaltet: Google verwaltet die Pipeline, wodurch die Gesamtbetriebskosten gesenkt werden.
  • Kostenkontrolle: Durch flexible Messwertfilterung können Sie Cloud Monitoring-Kosten auf einfache Weise verwalten.
  • Offener Standard: Sie können Arbeitslastmesswerte mit der benutzerdefinierten PodMonitor-Ressource konfigurieren, deren Modellierung der PodMonitor-Ressource des Prometheus-Operators entspricht.
  • HPA-Unterstützung: Durch Kompatibilität mit dem Stackdriver-Adapter für benutzerdefinierte Messwerte können Sie horizontales Autoscaling für benutzerdefinierte Messwerte aktivieren.
  • Bessere Preise: Es sind passendere, berechenbarere sowie niedrigere Preise verfügbar.
  • Autopilot-Unterstützung: GKE-Arbeitslastmesswerte sind sowohl für GKE Standard- als auch für GKE Autopilot-Cluster verfügbar.

Verwendung der Stackdriver Prometheus-Sidecar-Datei prüfen

Der Stackdriver Prometheus-Sidecar war bisher der empfohlene Ansatz für die Erfassung von Messwerten im Prometheus-Stil aus GKE-Clustern und für die Aufnahme in Cloud Monitoring. Bei diesem Ansatz wird eine vorhandene Prometheus-Installation, die in der Regel als StatefulSet oder als Deployment unter GKE ausgeführt wird, mit einem Sidecar gepatcht, der alle Messwerte exportiert, die es nach Cloud Monitoring extrahiert. Das Prometheus-Helm-Diagramm bietet eine bequeme Möglichkeit, diese Einbindung zu konfigurieren.

Abdeckung der Nutzung durch GKE-Arbeitslastmesswerte ermitteln

Anhand der folgenden Checkliste können Sie feststellen, ob Sie mit Verwendung des Stackdriver Prometheus-Sidecars Features nutzen, die nicht mit GKE-Arbeitslastmesswerten reproduziert werden können.

Feature Support/Problemumgehungen
Wird mit Prometheus noch etwas anderes als Pods im selben Cluster überwacht? Prüfen Sie, ob Folgendes genutzt wird:
  • static_config
  • Andere Service Discovery-Plug-ins außer kubernetes_sd_config
  • Andere kubernetes_sd_config-Rollen als endpoint oder pod
  • api_server oder kubeconfig, um auf einen anderen Kubernetes-Cluster zu verweisen
Die Rolle pod wird standardmäßig unterstützt. Die Rolle endpoint kann simuliert werden, indem der Port freigegeben und benannt wird.
Werden Pods anhand von Feldern und nicht von Labels ausgewählt? Verwenden Sie einen entsprechenden Labelselektor und beachten Sie, dass dafür den gewünschten Pods möglicherweise neue Labels hinzugefügt werden müssen.
Ist Prometheus mit einer HTTP-Autorisierung oder mit gegenseitigem TLS für Scraping konfiguriert? Dieses Feature wird für GKE-Arbeitslastmesswerte nicht unterstützt.
Ist Prometheus mit metric_relabel_configs und anderen Aktionen als keep und drop konfiguriert? Dieses Feature wird für GKE-Arbeitslastmesswerte nicht unterstützt.
Verwenden Sie das Feature Zähler-Aggregator oder Messwert-Umbenennung des Stackdriver-Prometheus-Sidecars? Dieses Feature wird für GKE-Arbeitslastmesswerte nicht unterstützt.
Gehören zu Ihrer Prometheus-Konfiguration Benachrichtigungen? Wandeln Sie sie in Monitoring-Benachrichtigungen um.
Gehören zu Ihrer Sidecar-Konfiguration static_metadata? GKE-Arbeitslastmesswerte erfassen Ihre Messwerte, ignorieren jedoch die Dokumentation.

Prometheus-Konfiguration zu benutzerdefinierten PodMonitor-Ressourcen migrieren

Erstellen Sie für jeden Job (Element im Array scrape_configs), der in der Prometheus-Konfiguration definiert ist, eine entsprechende benutzerdefinierte PodMonitor-Ressource. Im Folgenden finden Sie ein Beispiel zur Veranschaulichung:

Prometheus-Konfiguration PodMonitor-CRD

scrape_configs:
- job_name: example
  metrics_path: /metrics
  scheme: http
  scrape_interval: 20s
  kubernetes_sd_configs:
  - role: endpoints
    namespaces:
      names:
      - gke-workload-metrics
    selectors:
    - role: endpoints
      label: "app=prom-example"
      field: "port=metrics-port"

apiVersion: monitoring.gke.io/v1alpha1
kind: PodMonitor
metadata:
  name: example
spec:
  namespaceSelector:
    matchNames:
    - gke-workload-metrics
  selector:
    matchLabels:
      app: prom-example
  podMetricsEndpoints:
  - port: metrics-port
    path: /metrics
    scheme: http
    interval: 20s

Sidecar-Konfiguration zu benutzerdefinierten PodMonitor-Ressourcen migrieren

Auf Sidecar-Ebene konfigurierte Filter gelten für alle Extraktionsjobs. Daher müssen Sie diese Konfigurationen an jede PodMonitor-CRD anhängen, die Sie im vorherigen Schritt erstellt haben.

Sidecar-Befehlszeile PodMonitor-CRD

$ stackdriver-prometheus-sidecar \
--include='metric_name{label="foo"}'

apiVersion: monitoring.gke.io/v1alpha1
kind: PodMonitor
metadata:
  name: example
spec:
  namespaceSelector:
    matchNames:
    - gke-workload-metrics
  selector:
    matchLabels:
      app: prom-example
  podMetricsEndpoints:
  - port: metrics-port
    path: /metrics
    scheme: http
    interval: 20s
    metricRelabelings:
      - sourceLabels: [__name__, label]
        regex: "^metric_name;foo$"
        action: keep
      - sourceLabels: [__name__]

Messwerte in Google Cloud Monitoring aufrufen

Mit dem Metrics Explorer können Sie prüfen, ob der Messwert jetzt über die Pipeline für GKE-Arbeitslastmesswerte aufgenommen wird.

Wenn der Messwert zuvor external.googleapis.com/prometheus/metric_name genannt wurde, lautet er jetzt workload.googleapis.com/metric_name. Denken Sie daran, alle Dashboards oder Benachrichtigungen, die auf diesen Messwerten beruhen, zu ändern und stattdessen das neue Benennungsschema zu verwenden.