Erste Schritte mit selbst bereitgestellter Erfassung

In diesem Dokument wird beschrieben, wie Sie Google Cloud Managed Service for Prometheus mit einer selbst bereitgestellten Erfassung einrichten. Eine Beispielanwendung wird in einem Kubernetes-Cluster bereitgestellt und von einem Prometheus-Server überwacht, der erfasste Messwerte in Monarch speichert.

Dieses Dokument enthält Anleitungen für folgende Aufgaben:

  • Umgebung und Befehlszeilentools einrichten
  • Dienstkonto für die Workload Identity Federation for GKE in GKE-Clustern konfigurieren
  • Prometheus-Ersatzbinärdatei in Kubernetes ausführen
  • Steuern, welche Messwerte in Managed Service for Prometheus aufgenommen werden
  • Managed Service for Prometheus in prometheus-operator-Einrichtungen einbinden
  • Prometheus-Binärdatei manuell kompilieren und ausführen

Bei der selbst bereitgestellten Datenerhebung verwalten Sie Ihre Prometheus-Installation wie gewohnt. Der einzige Unterschied besteht darin, dass Sie anstelle der vorgelagerten Prometheus-Binärdatei die Managed Service for Prometheus-Ersatzbinärdatei gke.gcr.io/prometheus-engine/prometheus:v2.45.3-gmp.9-gke.0 ausführen.

Die Ersatzbinärdatei bietet zusätzliche Konfigurationsoptionen mit den --export.*-Flags. Weitere Informationen finden Sie in der Ausgabe der Option --help. In diesem Dokument werden die wichtigsten Optionen erläutert.

Managed Service for Prometheus unterstützt nicht den Export von Messwerten von einem Föderationsserver oder von einem Server, der als Remote-Schreibempfänger verwendet wird. Mithilfe von Filtern und lokalen Aggregationen können Sie alle Funktionen des Föderationsservers replizieren, einschließlich der Aufnahme von Volumes durch Aggregieren von Daten vor dem Senden an Monarch.

Das Streaming von Daten an Managed Service for Prometheus verbraucht zusätzliche Ressourcen. Wenn Sie Collectors selbst bereitstellen, sollten Sie die CPU- und Speicherlimits um das Fünffache erhöhen und an die tatsächliche Nutzung anpassen.

Weitere Informationen zur verwalteten und selbst bereitgestellten Datenerhebung finden Sie unter Datenerhebung mit Managed Service for Prometheus.

Hinweise

In diesem Abschnitt wird die Konfiguration beschrieben, die für die in diesem Dokument beschriebenen Aufgaben erforderlich ist.

Projekte und Tools einrichten

Zum Verwenden von Google Cloud Managed Service for Prometheus benötigen Sie folgende Ressourcen:

  • Ein Google Cloud-Projekt mit aktivierter Cloud Monitoring API.

    • Wenn Sie kein Google Cloud-Projekt haben, gehen Sie so vor:

      1. Wechseln Sie in der Google Cloud Console zu Neues Projekt:

        Neues Projekt erstellen

      2. Geben Sie im Feld Projektname einen Namen für Ihr Projekt ein und klicken Sie dann auf Erstellen.

      3. Wechseln Sie zu Billing (Abrechnung):

        Zur Abrechnung

      4. Wählen Sie das Projekt aus, das Sie gerade erstellt haben, falls es nicht bereits oben auf der Seite ausgewählt wurde.

      5. Sie werden aufgefordert, ein vorhandenes Zahlungsprofil auszuwählen oder ein neues Zahlungsprofil zu erstellen.

      Die Monitoring API ist für neue Projekte standardmäßig aktiviert.

    • Wenn Sie bereits ein Google Cloud-Projekt haben, muss die Monitoring API aktiviert sein:

      1. Gehen Sie zu APIs & Dienste:

        Zu APIs und Dienste

      2. Wählen Sie Ihr Projekt aus.

      3. Klicken Sie auf APIs und Dienste aktivieren.

      4. Suchen Sie nach „Monitoring“.

      5. Klicken Sie in den Suchergebnissen auf "Cloud Monitoring API".

      6. Wenn "API aktiviert" nicht angezeigt wird, klicken Sie auf die Schaltfläche Aktivieren.

  • Einen Kubernetes-Cluster. Wenn Sie keinen Kubernetes-Cluster haben, folgen Sie der Anleitung in der Kurzanleitung für GKE.

Sie benötigen außerdem die folgenden Befehlszeilentools:

  • gcloud
  • kubectl

Die Tools gcloud und kubectl sind Teil der Google Cloud CLI. Informationen zur Installation finden Sie unter Komponenten der Google Cloud-Befehlszeile verwalten. Führen Sie den folgenden Befehl aus, um die installierten gloud CLI-Komponenten aufzurufen:

gcloud components list

Konfigurierung Ihrer Umgebung

Führen Sie die folgende Konfiguration aus, um zu vermeiden, dass Sie Ihre Projekt-ID oder den Clusternamen wiederholt eingeben müssen:

  • Konfigurieren Sie die Befehlszeilentools so:

    • Konfigurieren Sie die gcloud CLI so, dass sie auf die ID Ihres Google Cloud-Projekts verweist:

      gcloud config set project PROJECT_ID
      
    • Konfigurieren Sie die kubectl-Befehlszeile für die Verwendung Ihres Clusters:

      kubectl config set-cluster CLUSTER_NAME
      

    Weitere Informationen zu diesen Tools finden Sie hier:

Namespace einrichten

Erstellen Sie den Kubernetes-Namespace NAMESPACE_NAME für Ressourcen, die Sie als Teil der Beispielanwendung erstellen:

kubectl create ns NAMESPACE_NAME

Anmeldedaten für das Dienstkonto prüfen

Sie können diesen Abschnitt überspringen, wenn in Ihrem Kubernetes-Cluster die Workload Identity Federation for GKE aktiviert ist.

Bei Ausführung in GKE ruft Managed Service for Prometheus automatisch Anmeldedaten aus der Umgebung anhand des Compute Engine-Standarddienstkontos ab. Das Standarddienstkonto hat standardmäßig die erforderlichen Berechtigungen monitoring.metricWriter und monitoring.viewer. Wenn Sie Workload Identity Federation for GKE nicht verwenden und zuvor eine dieser Rollen aus dem Standardknotendienstkonto entfernt haben, müssen Sie diese fehlenden Berechtigungen wieder hinzufügen, bevor Sie fortfahren.

Wenn Sie nicht GKE ausführen, finden Sie weitere Informationen unter Anmeldedaten explizit angeben.

Dienstkonto für die Workload Identity Federation for GKE konfigurieren

Sie können diesen Abschnitt überspringen, wenn in Ihrem Kubernetes-Cluster die Workload Identity Federation for GKE nicht aktiviert ist.

Managed Service for Prometheus erfasst Messwertdaten mithilfe der Cloud Monitoring API. Wenn in Ihrem Cluster die Workload Identity Federation for GKE verwendet wird, müssen Sie Ihrem Kubernetes-Dienstkonto die Berechtigung für die Monitoring API erteilen. In diesem Abschnitt wird Folgendes beschrieben:

  • Dediziertes Google Cloud-Dienstkonto gmp-test-sa erstellen
  • Google Cloud-Dienstkonto an das Standard-Kubernetes-Dienstkonto im Test-Namespace NAMESPACE_NAME binden
  • Dem Google Cloud-Dienstkonto die erforderliche Berechtigung gewähren

Dienstkonto erstellen und binden

Dieser Schritt wird an mehreren Stellen in der Dokumentation zu Managed Service for Prometheus aufgeführt. Wenn Sie diesen Schritt bereits als Teil einer vorherigen Aufgabe ausgeführt haben, müssen Sie ihn nicht wiederholen. Fahren Sie mit Dienstkonto autorisieren fort.

Mit der folgenden Befehlssequenz wird das Dienstkonto gmp-test-sa erstellt und an das Standard-Kubernetes-Dienstkonto im Namespace NAMESPACE_NAME gebunden:

gcloud config set project PROJECT_ID \
&&
gcloud iam service-accounts create gmp-test-sa \
&&
gcloud iam service-accounts add-iam-policy-binding \
  --role roles/iam.workloadIdentityUser \
  --member "serviceAccount:PROJECT_ID.svc.id.goog[NAMESPACE_NAME/default]" \
  gmp-test-sa@PROJECT_ID.iam.gserviceaccount.com \
&&
kubectl annotate serviceaccount \
  --namespace NAMESPACE_NAME \
  default \
  iam.gke.io/gcp-service-account=gmp-test-sa@PROJECT_ID.iam.gserviceaccount.com

Wenn Sie einen anderen GKE-Namespace oder ein anderes GKE-Dienstkonto verwenden, passen Sie die Befehle entsprechend an.

Dienstkonto autorisieren

Gruppen zusammengehöriger Berechtigungen werden in Rollen zusammengefasst und Sie weisen die Rollen einem Hauptkonto zu, in diesem Beispiel dem Google Cloud-Dienstkonto. Weitere Informationen zu Monitoring-Rollen finden Sie unter Zugriffssteuerung.

Mit dem folgenden Befehl werden dem Google Cloud-Dienstkonto gmp-test-sa die Monitoring API-Rollen zugewiesen, die zum Schreiben von Messwertdaten erforderlich sind.

Wenn Sie dem Google Cloud-Dienstkonto im Rahmen der vorherigen Aufgabe bereits eine bestimmte Rolle zugewiesen haben, müssen Sie dies nicht noch einmal tun.

gcloud projects add-iam-policy-binding PROJECT_ID\
  --member=serviceAccount:gmp-test-sa@PROJECT_ID.iam.gserviceaccount.com \
  --role=roles/monitoring.metricWriter

Fehlerbehebung der Konfiguration von Workload Identity Federation for GKE

Wenn Sie Probleme mit der Workload Identity Federation for GKE haben, lesen Sie die Dokumentation zum Prüfen der Workload Identity Federation for GKE-Einrichtung und zur Fehlerbehebung bei der Workload Identity Federation for GKE.

Da Tippfehler und partielle Kopierfunktionen die häufigsten Fehlerquellen bei der Konfiguration von Workload Identity Federation for GKE sind, empfehlen wir dringend die bearbeitbaren Variablen und anklickbaren Symbole, die in die Codebeispiele in dieser Anleitung eingebettet sind.

Workload Identity Federation for GKE in Produktionsumgebungen

Das in diesem Dokument beschriebene Beispiel bindet das Google Cloud-Dienstkonto an das Standard-Kubernetes-Dienstkonto und gewährt dem Google Cloud-Dienstkonto alle erforderlichen Berechtigungen zur Verwendung der Monitoring API.

In einer Produktionsumgebung können Sie einen feiner abgestimmten Ansatz mit einem Dienstkonto für jede Komponente nutzen, das jeweils nur minimale Berechtigungen hat. Weitere Informationen zum Konfigurieren von Dienstkonten für die Verwaltung von Workload Identity finden Sie unter Workload Identity Federation for GKE verwenden.

Selbst bereitgestellte Erfassung einrichten

In diesem Abschnitt wird beschrieben, wie Sie eine Beispielanwendung einrichten und ausführen, die eine selbst bereitgestellte Erfassung verwendet.

Beispielanwendung bereitstellen

Die Beispielanwendung gibt Folgendes aus: der Zählermesswert example_requests_total und den example_random_numbers Histogramm-Messwert (unter anderem) am Port metrics. Das Manifest für die Anwendung definiert drei Replikate.

Führen Sie den folgenden Befehl aus, um die Beispielanwendung bereitzustellen:

kubectl -n NAMESPACE_NAME apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/prometheus-engine/v0.13.0/examples/example-app.yaml

Prometheus-Ersatzbinärdatei ausführen

Zur Aufnahme der von der Beispielanwendung ausgegebenen Messwertdaten stellen Sie die verzweigte Version des Prometheus-Servers bereit, die für die Extraktion der Messwerte der Arbeitslast und ihres eigenen Messwertendpunkts konfiguriert ist.

  1. Führen Sie den folgenden Befehl aus, um den verzweigten Server bereitzustellen:

    kubectl -n NAMESPACE_NAME apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/prometheus-engine/v0.13.0/examples/prometheus.yaml
    

    Der bereitgestellte Prometheus-Server ist eine schlanke Fork der vorgelagerten Prometheus-Binärdatei. Er verhält sich wie ein Standard-Prometheus-Server, nimmt aber auch Daten in Managed Service for Prometheus auf.

    Das obige Manifest stellt ein einfaches Arbeitsbeispiel dar, das Daten an den globalen Datenspeicher, Monarch, sendet. Es wird keine lokale Kopie der Daten dauerhaft gespeichert. Informationen zur Funktionsweise der vordefinierten Konfiguration und zu ihrer Erweiterung finden Sie in der Open-Source-Konfigurationsdokumentation für Prometheus.

    Das vordefinierte Image funktioniert nur auf Linux-Knoten. Wenn Sie Ziele extrahieren möchten, die auf Windows-Knoten ausgeführt werden, stellen Sie entweder den Server auf einem Linux-Knoten bereit und konfigurieren Sie ihn so, dass Endpunkte auf den Windows-Knoten extrahiert werden oder erstellen Sie die Binärdatei für Windows selbst.

  2. Prüfen Sie, ob die Pods für den Prometheus-Server und die Beispielanwendung erfolgreich bereitgestellt wurden:

    kubectl -n NAMESPACE_NAME get pod
    

    Wenn die Bereitstellung erfolgreich war, sieht die Ausgabe in etwa so aus:

    NAME                            READY   STATUS    RESTARTS   AGE
    prom-example-84c6f547f5-fglbr   1/1     Running   0          5m
    prom-example-84c6f547f5-jnjp4   1/1     Running   0          5m
    prom-example-84c6f547f5-sqdww   1/1     Running   0          5m
    prometheus-test-0               2/2     Running   1          3m
    

Wenn Sie GKE ausführen, können Sie Folgendes lesen:

Wenn die Ausführung außerhalb von GKE erfolgt, müssen Sie ein Dienstkonto erstellen und es zum Schreiben Ihrer Messwertdaten autorisieren. Dies wird im folgenden Abschnitt beschrieben.

Anmeldedaten explizit angeben

Bei der Ausführung in GKE ruft der erfassende Prometheus-Server automatisch Anmeldedaten aus der Umgebung anhand des Dienstkontos des Knotens oder der Einrichtung von Workload Identity Federation for GKE ab. In Nicht-GKE-Kubernetes-Clustern müssen Anmeldedaten explizit mit Flags oder der Umgebungsvariablen GOOGLE_APPLICATION_CREDENTIALS für den erfassenden Prometheus-Server bereitgestellt werden.

  1. Legen Sie den Kontext auf Ihr Zielprojekt fest:

    gcloud config set project PROJECT_ID
    
  2. Erstellen Sie ein Dienstkonto:

    gcloud iam service-accounts create gmp-test-sa
    

    Mit diesem Schritt wird das Dienstkonto erstellt, das Sie möglicherweise bereits in der Anleitung für Workload Identity Federation for GKE erstellt haben.

  3. Gewähren Sie die erforderlichen Berechtigungen für das Dienstkonto:

    gcloud projects add-iam-policy-binding PROJECT_ID\
      --member=serviceAccount:gmp-test-sa@PROJECT_ID.iam.gserviceaccount.com \
      --role=roles/monitoring.metricWriter
    

  4. Erstellen Sie einen Schlüssel für das Dienstkonto und laden Sie ihn herunter:

    gcloud iam service-accounts keys create gmp-test-sa-key.json \
      --iam-account=gmp-test-sa@PROJECT_ID.iam.gserviceaccount.com
    
  5. Fügen Sie dem Nicht-GKE-Cluster die Schlüsseldatei als Secret hinzu:

    kubectl -n NAMESPACE_NAME create secret generic gmp-test-sa \
      --from-file=key.json=gmp-test-sa-key.json
    

  6. Öffnen Sie die Prometheus-StatefulSet.Ressource zur Bearbeitung:

    kubectl -n NAMESPACE_NAME edit statefulset prometheus-test
    
    1. Fügen Sie der Ressource den fett formatierten Text hinzu:

      apiVersion: apps/v1
      kind: StatefulSet
      metadata:
        namespace: NAMESPACE_NAME
        name: example
      spec:
        template
          containers:
          - name: prometheus
            args:
            - --export.credentials-file=/gmp/key.json
      ...
            volumeMounts:
            - name: gmp-sa
              mountPath: /gmp
              readOnly: true
      ...
          volumes:
          - name: gmp-sa
            secret:
              secretName: gmp-test-sa
      ...
      

    2. Speichern Sie die Datei und schließen Sie den Editor. Nachdem die Änderung angewendet wurde, werden die Pods neu erstellt und beginnen mit der Authentifizierung beim Messwert-Backend mit dem angegebenen Dienstkonto.

    Anstelle der Verwendung der in diesem Beispiel festgelegten Flags können Sie den Schlüsseldateipfad mithilfe der Umgebungsvariable GOOGLE_APPLICATION_CREDENTIALS festlegen.

    Weitere Themen für die selbst bereitgestellte Erfassung

    In diesem Abschnitt wird Folgendes beschrieben:

    • Daten filtern, die Sie für den verwalteten Dienst exportieren
    • Vorhandene Bereitstellungskonfigurationen konvertieren
    • Führen Sie die Prometheus-Binärdatei im Hochverfügbarkeitsmodus aus.
    • Prometheus-Ersatzbinärdatei erstellen und ausführen
    • Managed Service for Prometheus außerhalb von Google Cloud ausführen.

    Exportierte Messwerte filtern

    Wenn Sie viele Daten erheben, möchten Sie möglicherweise verhindern, dass einige Zeitachsen an Managed Service for Prometheus gesendet werden, um Kosten niedrig zu halten.

    Sie können in Ihrer Prometheus-Scraping-Konfiguration reguläre Messwert-Relabeling-Konfigurationen verwenden. Mit Relabeling-Konfigurationen können Labels basierend auf Labelübereinstimmungen zum Zeitpunkt der Aufnahme ignoriert werden.

    Manchmal möchten Sie Daten lokal aufnehmen, aber nicht in Managed Service for Prometheus exportieren. Zum Filtern exportierter Messwerte können Sie das Flag --export.match verwenden.

    Das Flag gibt einen oder mehrere PromQL-Serienselektoren an und kann mehrmals verwendet werden. Eine Zeitreihe wird für Prometheus in den verwalteten Dienst exportiert, wenn sie alle Selektoren in mindestens einem der Flags erfüllt. Das heißt, wenn die Berechtigung bestimmt wird, werden die Voraussetzungen in einem einzelnen Flag mit AND verknüpft, während die Bedingungen in separaten Flags mit OR verknüpft werden. Im folgenden Beispiel werden zwei Instanzen des Flags verwendet:

    ./prometheus \
      --export.match='{job="prometheus"}' \
      --export.match='{__name__=~"job:.+"}' \
      ...
    

    Diese Änderung sorgt dafür, dass nur Messwerte für den Job "prometheus" sowie Messwerte, die von Aufzeichnungsregeln erzeugt werden, die auf der Jobebene aggregieren (wenn den Best Practices zur Benennung gefolgt wird), exportiert werden. Beispiele für alle anderen Zeitachsen werden herausgefiltert. Standardmäßig sind keine Selektoren angegeben und alle Zeitachsen werden exportiert.

    Das Flag --export.match hat dieselbe Semantik wie der Parameter match[] für die Prometheus-Föderation. Daher können Sie die Föderationseinrichtungen zu Managed Service for Prometheus migrieren. Verwenden Sie dazu die Selektoren von Ihrem Föderationsserver direkt als Flags auf den Prometheus-Servern, auf denen Ihr Prometheus-Föderationsserver das Scraping durchführt. Das Exportieren von Messwerten von einem Föderationsserver in den verwalteten Dienst wird nicht unterstützt.

    Wenn Sie Messwerte vom Typ histogram in einen Filter aufnehmen möchten, müssen Sie den Wert _count, _sum- und _bucket-Messwerte angeben. Sie können dies auch mit einem Platzhalterabgleich tun, z. B. mit dem Auslöser {__name__=~"histogram_metric_.+"}.

    Wenn du die prometheus-operator-Bibliothek verwendest, lege beliebige --export.match-Flags mit der Umgebungsvariable EXTRA_ARGS des Container fest. Weitere Informationen finden Sie unter Verwendung mit Prometheus-Operator.

    Sie können Filter-Flags mit lokal ausgeführten Regeln zur Aufzeichnung und Aggregation von Daten kombinieren, bevor Sie sie an Monarch senden, wodurch die Kardinalität und Kosten reduziert werden. Weitere Informationen finden Sie unter Kostenkontrolle und -zuordnung.

    Auf der Cloud Monitoring-Seite Messwertverwaltung können Sie den Betrag steuern, den Sie für abrechenbare Messwerte ausgeben, ohne die Beobachtbarkeit zu beeinträchtigen. Die Seite Messwertverwaltung enthält folgende Informationen:

    • Aufnahmevolumen für byte- und probenbasierte Abrechnung für Messwertdomains und einzelne Messwerte
    • Daten zu Labels und zur Kardinalität von Messwerten
    • Anzahl der Lesevorgänge für jeden Messwert.
    • Verwenden Messwerten in Benachrichtigungsrichtlinien und benutzerdefinierten Dashboards
    • Rate von Messwert-Schreibfehlern

    Mit der Messwertverwaltung können Sie auch unnötige Messwerte ausschließen, sodass keine Kosten für die Datenaufnahme anfallen. Weitere Informationen zur Seite Messwertverwaltung finden Sie unter Messwertnutzung ansehen und verwalten.

    Verwendung mit Prometheus-Operator

    Die Managed Service for Prometheus Prometheus-Binärdatei kann auch mit einer vorhandenen GKE-Prometheus-Bereitstellung verwendet werden, die vom prometheus-operator verwaltet wird.

    Wenn Sie die Binärdatei des verwalteten Dienstes verwenden möchten, ersetzen Sie die Image-Spezifikation in der Prometheus-Ressource:

      apiVersion: monitoring.coreos.com/v1
      kind: Prometheus
      metadata:
        name: NAMESPACE_NAME
        namespace: gmp-system
      spec:
        image: gke.gcr.io/prometheus-engine/prometheus:v2.45.3-gmp.9-gke.0
        ...
        replicas: 1
        serviceAccountName: default
        version: v2.35.0
        ...
    

    Wenn Sie sich in einem Cluster der Workload Identity Federation for GKE befinden und sich der Namespace oder das Dienstkonto in Ihrer Ressource unterscheidet, wiederholen Sie die Anleitung zur Workload Identity Federation for GKE für den zusätzlichen Namespace und das Kubernetes-Dienstkontopaar.

    Bei der Ausführung in einem Nicht-GKE-Kubernetes-Cluster müssen Sie Anmeldedaten manuell angeben. So geben Sie Anmeldedaten an:

    1. Fügen Sie eine entsprechende Dienstkonto-Schlüsseldatei als Secret hinzu, wie unter Anmeldedaten explizit angeben beschrieben.

    2. Ändern Sie die Prometheus-Ressource, um den fett formatierten Text hinzuzufügen:

        apiVersion: monitoring.coreos.com/v1
        kind: Prometheus
        metadata:
          namespace: gmp-test
          name: example
        spec:
          ...
          secrets:
          - gmp-test-sa
          containers:
          - name: prometheus
            env:
            - name: GOOGLE_APPLICATION_CREDENTIALS
              value: /gmp/key.json
            volumeMounts:
            - name: secret-gmp-test-sa
              mountPath: /gmp
              readOnly: true
      

    Sie können die Umgebungsvariable EXTRA_ARGS des Containers festlegen, um zusätzliche Flags hinzuzufügen, z. B. die Flags zur Messwertfilterung. Dies erfolgt über eine Umgebungsvariable, da der Abschnitt args der Containerspezifikation vom Prometheus-Operator verwaltet wird.

    Verwendung mit kube-prometheus

    Sie können Bereitstellungen konfigurieren, die mit der beliebten kube-prometheus-Bibliothek erstellt wurden, um Managed Service for Prometheus zu verwenden.

    Da kube-prometheus einige enge interne Abhängigkeiten von seinen Standard-Namespaces und -Dienstkonten hat, sollten Sie nur die Mindestanzahl von Feldern ändern, die zum Senden von Daten an Managed Service for Prometheus erforderlich ist.

    Ersetzen Sie in manifests/prometheus-prometheus.yaml die Image-Spezifikation und deaktivieren Sie die Hochverfügbarkeitssammlung, indem Sie replicas auf 1 reduzieren:

        apiVersion: monitoring.coreos.com/v1
        kind: Prometheus
        ...
        spec:
          image: gke.gcr.io/prometheus-engine/prometheus:v2.45.3-gmp.9-gke.0
          ...
          replicas: 1
          version: v2.35.0
          ...
      

    Wenn die Ausführung in GKE erfolgt und Sie das Standarddienstkonto auf dem Knoten nicht geändert haben, sollten durch das Anwenden der geänderten Manifeste sofort Daten an Managed Service for Prometheus gesendet werden. Andernfalls müssen Sie möglicherweise ein Dienstkonto konfigurieren und anwenden. Bei der Ausführung in GKE und der Verwendung von Workload Identity müssen Sie möglicherweise das Dienstkonto prometheus-k8s im Namespace monitoring erstellen und autorisieren. Folgen Sie der Anleitung im Abschnitt „prometheus-operator“ bei der Ausführung auf einem Nicht-GKE-Kubernetes-Cluster.

    Beachten Sie, dass kube-prometheus standardmäßig viele Messwerte erfasst, die in einer verwalteten Kubernetes-Umgebung wie GKE häufig nicht erforderlich sind. Um Kosten für die Datenaufnahme zu sparen, können Sie kube-prometheus so anpassen, dass nur relevante Messwerte extrahiert und exportierte Messwerte aggressiv gefiltert werden.

    Weitere Vorschläge finden Sie unter Kostenkontrolle und Quellenangabe.

    Bereitstellung mit Hochverfügbarkeit

    Die Prometheus-Ersatzbinärdatei bietet eine integrierte Unterstützung für eine hochverfügbare Sammlung unter Verwendung von Leader-Bestimmung. Replizierte Prometheus-Server im Hochverfügbarkeitsmodus erfassen wie üblich Messwerte und werten Regeln aus, aber nur einer davon sendet Daten an Google Cloud Managed Service for Prometheus.

    Replikate desselben Prometheus-Servers müssen immer identische Konfigurationen haben, einschließlich derselben external_labels. Diese Anforderung unterscheidet sich von anderen Systemen, die ein spezielles externes Label wie __replica__ verwenden, um Replikate explizit zu unterscheiden.

    Der Kubernetes API-Server ist ein unterstütztes Backend zur Wahl eines Leaders. Er kann durch Festlegen der folgenden Flags aktiviert werden:

    ./prometheus
      ...
      --export.ha.backend=kube \
      --export.ha.kube.namespace=LEASE_NAMESPACE \
      --export.ha.kube.name=LEASE_NAME
    

    Die Werte LEASE_NAMESPACE und LEASE_NAME geben die Freigaberessource an, über die die Leader-Auswahl erfolgt. Alle Prometheus-Server, die auf dieselbe Ressource verweisen, gehören zum selben Replikatset. Das Kubernetes-Dienstkonto der Prometheus-Bereitstellung benötigt die Berechtigung zum Lesen und Schreiben der entsprechenden Lease-Ressource. Wenn Sie den Prometheus-Server außerhalb eines Kubernetes-Clusters ausführen, können Sie eine explizite Konfiguration mithilfe des Flags --export.ha.kube.config angeben.

    Danach können Sie den Wert für replicas auf 2 oder mehr erhöhen.

    Reservierte Labels

    Managed Service for Prometheus verwendet sechs reservierte Labels, um eine Ressource in Monarch eindeutig zu identifizieren:

    • project_id: Die Kennung des Google Cloud-Projekts, das Ihrem Messwert zugeordnet ist. Erforderlich.
    • location: Der physische Standort (Google Cloud-Region), an dem die Daten gespeichert werden. Dieser Wert ist in der Regel die Region Ihres GKE-Clusters. Wenn Daten aus einer AWS- oder lokalen Bereitstellung erhoben werden, ist der Wert möglicherweise die nächstgelegene Cloud-Projektregion. Erforderlich.
    • cluster: Der Name des Kubernetes-Clusters, der Ihrem Messwert zugeordnet ist. Wenn nicht in Kubernetes ausgeführt wird, kann dies als beliebige Hierarchieebene verwendet werden, z. B. wie eine Instanzgruppe. Optional, wird aber dringend empfohlen.
    • namespace: Der Name des Kubernetes-Namespace, der Ihrem Messwert zugeordnet ist. Wenn er nicht in Kubernetes ausgeführt wird, kann er als beliebige Hierarchieebene verwendet werden z. B. als Untergruppe von Instanzen. Optional, wird aber dringend empfohlen.
    • job: Das Joblabel des Prometheus-Ziels, sofern bekannt. Kann für Ergebnisse der Regelauswertung leer sein. Erforderlich und wird in der Regel automatisch von Prometheus hinzugefügt.
    • instance: Das Instanzlabel des Prometheus-Ziels, sofern bekannt. Kann für Ergebnisse der Regelauswertung leer sein. Erforderlich und wird in der Regel automatisch von Prometheus hinzugefügt. wenn sie manuell festgelegt oder ein neues Label hinzugefügt wurde nicht hartcodierte Werte wie localhost verwenden, da kann führen zu Zeitreihenkonflikten.

    Bei der Ausführung in Google Cloud werden die project_id, location und clusterLabels allen Messwerten automatisch hinzugefügt.

    Obwohl dies bei der Ausführung in Google Cloud nicht empfohlen wird, können Sie die Die Labels project_id, location, cluster und namespace mithilfe der global.external_labels Abschnitts Ihrer Prometheus-Konfiguration überschreiben. Weitere Informationen finden Sie unter Selbst bereitgestellte Erfassung außerhalb von Google Cloud ausführen

    Wenn Sie reservierte Labels als Messwertlabels verwenden, wird die selbst bereitgestellte Erfassung das Messwertlabel als Wert für den reservierten Label verwenden. Dies kann eine gewisse Flexibilität bieten, kann aber auch zu Fehlern führen, wenn Sie verwenden beispielsweise das Label location, um auf etwas anderes als Google Cloud-Region zu verweisen.

    Binärdateibereitstellungen

    Wenn die Ausführung in einer nicht containerisierten Umgebung erfolgen soll, können Sie die Prometheus-Ersatzbinärdatei direkt erstellen.

    Quelle erstellen

    Wenn Sie bereits einen Prozess zum Kompilieren von Prometheus haben, können Sie unser GitHub-Repository transparent in Ihren Prozess einfügen. Managed Service for Prometheus hat eine eigene Versions-Tag-Erweiterung, um zwischen Releases und vorgelagerten Releases zu unterscheiden.

    Zum Erstellen der einfachen Binärdatei müssen die Go-Toolchain und die neuesten Versionen von NPM/Yarn auf dem Computer installiert sein. Weitere Informationen finden Sie in der Anleitung für vorgelagerte Builds.

    1. Klonen Sie das Repository:

      git clone https://github.com/GoogleCloudPlatform/prometheus &&
      cd prometheus
      
    2. Sehen Sie sich das gewünschte Versions-Tag an:

      git checkout v2.45.3-gmp.9
      
    3. Führen Sie die folgenden Befehle aus, um einen Managed Service for Prometheus-Tarball zu erstellen:

      make build && make tarball
      

    Der resultierende Tarball und die resultierenden Binärdateien sind in Bezug auf Verzeichnisstruktur und Funktionalität vollständig mit ihren vorgelagerten Varianten kompatibel.

    Limits für das Erstellen und Aktualisieren von Messwerten und Labels

    Managed Service for Prometheus erzwingt beim Erstellen neuer Messwerte und beim Hinzufügen neuer Messwertlabels zu vorhandenen Messwerten ein Ratenlimit pro Minute. Diese Ratenbegrenzung wird normalerweise nur erreicht, wenn Sie zum ersten Mal eine Einbindung in Managed Service for Prometheus vornehmen, z. B. beim Migrieren einer vorhandenen, ausgereiften Prometheus-Bereitstellung, um die selbst bereitgestellte Sammlung zu verwenden. Dies ist keine Ratenbeschränkung für die Datenaufnahme. Dieses Ratenlimit gilt nur, wenn noch-nie-dagewesene Messwerte erstellt oder neue Messwerte zu vorhandenen Messwerten hinzugefügt werden.

    Dieses Kontingent ist fest, aber alle Probleme sollten automatisch behoben werden, wenn neue Messwerte und Messwertlabels bis zum Limit pro Minute erstellt werden.

    Weitere Informationen finden Sie unter Fehlerbehebung.

    Selbst bereitgestellte Sammlung außerhalb von Google Cloud ausführen

    In Compute Engine-Umgebungen, GKE-Umgebungen oder auf einem Computer, auf dem Sie gcloud login mit einem ausreichend autorisierten Konto ausgeführt haben, können Sie eine selbst bereitgestellte Sammlung ohne weitere Konfiguration ausführen. Außerhalb von Google Cloud müssen Sie Anmeldedaten, eine project_id, in dem die Messwerte enthalten sind, und einen location (Google Cloud-Region), in dem die Messwerte gespeichert werden, explizit angeben. Sie sollten auch die Labels cluster und namespace festlegen, auch wenn die Ausführung in einem nicht-Kubernetes-Umgebung stattfindet.

    Sie können einen Dienstkontoschlüssel mit dem Flag --export.credentials-file oder der Umgebungsvariable GOOGLE_APPLICATION_CREDENTIALS angeben, wie unter Anmeldedaten explizit angeben beschrieben.

    Wir empfehlen die Auswahl von project_id basierend auf Ihrem geplanten Mandantenmodell für Lesevorgänge. Wählen Sie ein Projekt aus, um Messwerte basierend darauf zu speichern, wie Sie Lesevorgänge später über Messwertbereiche organisieren möchten. Wenn dies für Sie nicht relevant ist, können Sie alles in einem Projekt ablegen.

    Für location empfehlen wir, die Google Cloud-Region auszuwählen, die Ihrer Bereitstellung am nächsten ist. Je weiter die ausgewählte Google Cloud-Region von Ihrer Bereitstellung entfernt ist, desto mehr Schreiblatenz haben Sie und desto mehr sind Sie von potenziellen Netzwerkproblemen betroffen. Sehen Sie sich diese Liste der Regionen in mehreren Clouds an. Wenn es Ihnen nicht wichtig ist, können Sie alles in einer einzigen Google Cloud-Region zusammenfassen. Sie können global nicht als Standort verwenden.

    Bei Ausführung in einer Kubernetes-Umgebung die Werte cluster und namespace festlegen auf den lokalen Cluster und Namespace. Wenn die Ausführung außerhalb von Kubernetes erfolgt, setzen Sie sie auf Werte die hierarchisch sinnvoll sind. Beispiel: In einer VM-basierten Umgebung, die auf AWS ausgeführt wird, setzen Sie den Wert cluster auf __aws__ und den Wert namespace auf die Instanz-ID. Sie können die Instanz-ID dynamisch eingeben, indem Sie eine Regel zur Labelerstellung verwenden, die den lokalen Metadatenserver aufruft.

    Als minimales Arbeitsbeispiel können Sie eine lokale, selbst überwachende Prometheus-Binärdatei mit dem folgenden Befehl ausführen:

    ./prometheus \
      --config.file=documentation/examples/prometheus.yaml \
      --export.label.project-id=PROJECT_ID \
      --export.label.location=REGION \
      --export.label.cluster=CLUSTER_NAME \
    

    In diesem Beispiel wird davon ausgegangen, dass Sie die Variable REGION auf einen Wert wie us-central1 gesetzt haben.

    Es wird jedoch empfohlen, die export-Ziellabels für den verwalteten Dienst im Abschnitt global.external_labels Ihrer Prometheus-Konfiguration festzulegen. In Kubernetes-Umgebungen können Sie beispielsweise die folgende Konfiguration verwenden:

    global:
      external_labels:
        project_id: PROJECT_ID
        location: REGION
        cluster: CLUSTER_NAME
        namespace: local-testing
    
    scrape_configs:
      ...
    

    Für die Ausführung von Managed Service for Prometheus außerhalb von Google Cloud fallen Gebühren für die Datenübertragung an. Für die Übertragung von Daten in Google Cloud fallen Gebühren an. Es können Gebühren für die Übertragung von Daten aus einer anderen Cloud anfallen. Sie können diese Kosten minimieren, indem Sie die Komprimierung mit dem Flag --export.compression=gzip aktivieren.

    Wie geht es weiter?