Verwaltete Regelauswertung

Google Cloud Managed Service for Prometheus unterstützt die mit Prometheus kompatible Regelauswertung. In diesem Dokument wird beschrieben, wie Sie die verwaltete Regelauswertung einrichten.

Regelauswertung

Managed Service for Prometheus bietet eine Regelevaluator-Komponente, mit der Sie Regeln im Kontext eines globalen Prometheus-Back-Ends sicher schreiben können. Dadurch wird verhindert, dass Sie Daten von anderen Nutzern in größeren Organisationen beeinträchtigen. Die Komponente wird bei der Ausführung in Kubernetes-Clustern automatisch als Teil der verwalteten Erfassung bereitgestellt.

Rules

Der verwaltete Regelevaluator verwendet die Rules-Ressource zum Konfigurieren von Aufzeichnungs- und Benachrichtigungsregeln. Hier ist eine beispielhafte Rules-Ressource:

apiVersion: monitoring.googleapis.com/v1alpha1
kind: Rules
metadata:
  namespace: gmp-test
  name: example-rules
spec:
  groups:
  - name: example
    interval: 30s
    rules:
    - record: job:up:sum
      expr: sum without(instance) (up)
    - alert: AlwaysFiring
      expr: vector(1)

Das Format des .spec.groups-Elements ist mit dem vorgelagerten Prometheus-rule_group-Array identisch. Die in Rules definierten Benachrichtigungs- und Aufzeichnungsregeln sind auf den Namespace der Ressource beschränkt – gmp-test im Beispiel. Rules werden garantiert nicht anhand von Messwertdaten ausgewertet, die außerhalb des Projekts, des Clusters und des Namespace generiert wurden. Dadurch wird gewährleistet, dass Benachrichtigungs- oder Aufzeichnungsregeln nicht versehentlich Messwerte von Anwendungen auswerten, die Sie vielleicht gar nicht kennen. Informationen zum Auswerten von Zeitachsen über mehrere Namespaces hinweg finden Sie unter ClusterRules.

Führen Sie folgenden Befehl aus, um die Beispielregeln auf Ihren Cluster anzuwenden:

kubectl apply -n gmp-test -f https://raw.githubusercontent.com/GoogleCloudPlatform/prometheus-engine/v0.1.1/examples/rules.yaml

Nach einigen Minuten ist der Messwert job:up:sum verfügbar. Die Benachrichtigung AlwaysFiring wird ebenfalls ausgelöst. Informationen zum Senden von Benachrichtigungen an einen Alertmanager finden Sie unter Alertmanager-Konfiguration.

Umwandlung von Prometheus-Regeln in Rules

Die Regelressource bietet eine kompatible Schnittstelle zu Prometheus-Regeln, um einen nahtlosen Migrationspfad zum Einbinden vorhandener Regeln in die verwaltete Regelauswertung zu bieten. Sie können Ihre vorhandenen Regeln in eine Regelressource aufnehmen. Im Folgenden ist beispielsweise eine Prometheus-Regel dargestellt:

groups:
- name: example
  interval: 30s
  rules:
  - record: job:up:sum
    expr: sum without(instance) (up)
  - alert: AlwaysFiring
    expr: vector(1)

Die entsprechende Regelressource mit der ursprünglichen Prometheus-Regel in Fettschrift sieht so aus:

apiVersion: monitoring.googleapis.com/v1alpha1
kind: Rules
metadata:
  namespace: gmp-test
  name: prometheus-example-rules
spec:
  groups:
  - name: example
    interval: 30s
    rules:
    - record: job:up:sum
      expr: sum without(instance) (up)
    - alert: AlwaysFiring
      expr: vector(1)

ClusterRules

Mit der ClusterRules-Ressource können Sie Aufnahme- und Benachrichtigungsregeln konfigurieren, die alle Zeitachsen auswerten können, die von allen Namespaces in einem bestimmten Cluster an Managed Service for Prometheus gesendet werden. Die Spezifikation ist mit der Spezifikation von Rules identisch. Die vorherige Beispiel-Prometheus-Regel wird zur folgenden ClusterRules-Ressource:

apiVersion: monitoring.googleapis.com/v1alpha1
kind: ClusterRules
metadata:
  name: example-rules
spec:
  groups:
  - name: example
    interval: 30s
    rules:
    - record: job:up:sum
      expr: sum without(instance) (up)
    - alert: AlwaysFiring
      expr: vector(1)

Wir empfehlen, ClusterRules-Ressourcen nur für horizontale Messwerte zu verwenden, die beispielsweise von einem Service Mesh erzeugt wurden. Verwenden Sie für Messwerte einzelner Bereitstellungen Rules-Ressourcen, um sicherzustellen, dass die Auswertung keine unbeabsichtigten Daten enthält.

Anmeldedaten explizit angeben

Bei der Ausführung in GKE ruft der Regelevaluator automatisch Anmeldedaten aus der Umgebung anhand des Compute Engine-Standarddienstkontos oder der Workload Identity-Einrichtung ab.

In Nicht-GKE-Kubernetes-Clustern müssen Anmeldedaten explizit über die OperatorConfig-Ressource im gmp-public-Namespace bereitgestellt werden.

  1. Erstellen Sie ein Dienstkonto:

    gcloud iam service-accounts create gmp-test-sa
    

  2. 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.viewer \
    && \
    gcloud projects add-iam-policy-binding PROJECT_ID\
      --member=serviceAccount:gmp-test-sa@PROJECT_ID.iam.gserviceaccount.com \
      --role=roles/monitoring.metricWriter
    

  3. 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
    
  4. Fügen Sie dem Nicht-GKE-Cluster die Schlüsseldatei als Secret hinzu:

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

  5. Öffnen Sie die OperatorConfig-Ressource zum Bearbeiten:

    kubectl -n gmp-public edit operatorconfig config
    

  6. Fügen Sie der Ressource den fett formatierten Text hinzu:

    apiVersion: monitoring.googleapis.com/v1alpha1
    kind: OperatorConfig
    metadata:
      namespace: gmp-public
      name: config
    rules:
      credentials:
        name: gmp-test-sa
        key: key.json
    

  7. 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-Back-End mit dem angegebenen Dienstkonto.

Alertmanager-Konfiguration

Mit der OperatorConfig-Ressource können Sie den verwalteten Regelevaluator konfigurieren, um Benachrichtigungen an einen selbst bereitgestellten Prometheus-Alertmanager zu senden. So konfigurieren Sie den Regelevaluator:

  1. Öffnen Sie die OperatorConfig-Ressource zum Bearbeiten:

    kubectl -n gmp-public edit operatorconfig config
    
  2. Konfigurieren Sie die Ressource, um Benachrichtigungen an Ihren Alertmanager-Dienst zu senden:

    apiVersion: monitoring.googleapis.com/v1alpha1
    kind: OperatorConfig
    metadata:
      namespace: gmp-public
      name: config
    rules:
      alerting:
        alertmanagers:
        - name: SERVICE_NAME
          namespace: SERVICE_NAMESPACE
          port: PORT_NAME
    

Befindet sich Ihr Alertmanager in einem anderen Cluster als Ihr Regelevaluator, müssen Sie möglicherweise eine Endpoints-Ressource einrichten. Wenn Ihre OperatorConfig beispielsweise besagt, dass Alertmanager-Endpunkte im Endpoints-Objekt ns=alertmanager/name=alertmanager gefunden werden, können Sie dieses Objekt manuell oder programmatisch selbst erstellen und mit erreichbaren IP-Adressen aus dem anderen Cluster befüllen. Unter AlertmanagerEndpoints-Konfiguration finden Sie bei Bedarf Optionen zur Autorisierungskonfiguration.

Auswertung globaler Regeln

Wenn Regeln für mehrere Projekte oder Cluster gelten sollen, müssen Sie den Regelevaluator selbst bereitstellen. Sie können den verwalteten und den selbst bereitgestellten Regelevaluator gleichzeitig ausführen.