Beobachtbarkeit von Anwendungen mit Prometheus in GKE


In dieser Anleitung erfahren Sie, wie Sie Aktivitätsprüfungen für Anwendungsmikrodienste einrichten, die mit Open-Source-Prometheus in Google Kubernetes Engine (GKE) bereitgestellt werden.

In dieser Anleitung wird Open-Source-Prometheus verwendet. Jeder GKE Autopilot-Cluster stellt jedoch automatisch Managed Service for Prometheus bereit, die vollständig verwaltete, projektübergreifende Multi-Cloud-Lösung von Google Cloud für Prometheus-Messwerte. Mit Managed Service for Prometheus können Sie Ihre Arbeitslasten mithilfe von Prometheus global überwachen und Benachrichtigen dazu senden, ohne Prometheus manuell in großem Umfang verwalten und betreiben zu müssen.

Sie können auch Open-Source-Tools wie Grafana verwenden, um die von Prometheus erfassten Messwerte zu visualisieren.

Lernziele

  • Erstellen Sie einen Cluster.
  • Stellen Sie Prometheus bereit.
  • Stellen Sie die Beispielanwendung Bank of Anthos bereit.
  • Konfigurieren Sie Prometheus-Aktivitätsprüfungen.
  • Konfigurieren Sie Prometheus-Benachrichtigungen.
  • Konfigurieren Sie Alertmanager, um Benachrichtigungen in einem Slack-Kanal zu erhalten.
  • Simulieren Sie einen Ausfall, um Prometheus zu testen.

Kosten

In diesem Dokument verwenden Sie die folgenden kostenpflichtigen Komponenten von Google Cloud:

Mit dem Preisrechner können Sie eine Kostenschätzung für Ihre voraussichtliche Nutzung vornehmen. Neuen Google Cloud-Nutzern steht möglicherweise eine kostenlose Testversion zur Verfügung.

Nach Abschluss der in diesem Dokument beschriebenen Aufgaben können Sie weitere Kosten vermeiden, indem Sie die erstellten Ressourcen löschen. Weitere Informationen finden Sie unter Bereinigen.

Hinweis

  1. Melden Sie sich bei Ihrem Google Cloud-Konto an. Wenn Sie mit Google Cloud noch nicht vertraut sind, erstellen Sie ein Konto, um die Leistungsfähigkeit unserer Produkte in der Praxis sehen und bewerten zu können. Neukunden erhalten außerdem ein Guthaben von 300 $, um Arbeitslasten auszuführen, zu testen und bereitzustellen.
  2. Klicken Sie in der Google Cloud Console auf der Projektauswahlseite auf Projekt erstellen, um mit der Erstellung eines neuen Google Cloud-Projekts zu starten.

    Zur Projektauswahl

  3. Die Abrechnung für das Google Cloud-Projekt muss aktiviert sein.

  4. GKE API aktivieren.

    Aktivieren Sie die API

  5. Klicken Sie in der Google Cloud Console auf der Projektauswahlseite auf Projekt erstellen, um mit der Erstellung eines neuen Google Cloud-Projekts zu starten.

    Zur Projektauswahl

  6. Die Abrechnung für das Google Cloud-Projekt muss aktiviert sein.

  7. GKE API aktivieren.

    Aktivieren Sie die API

  8. Installieren Sie die Helm API.

Umgebung vorbereiten

In dieser Anleitung verwenden Sie Cloud Shell zum Verwalten von Ressourcen, die in Google Cloud gehostet werden.

  1. Legen Sie die Standardumgebungsvariablen fest:

    gcloud config set project PROJECT_ID
    gcloud config set compute/region COMPUTE_REGION
    

    Dabei gilt:

    • PROJECT_ID: Ihre Google Cloud-Projekt-ID.
    • PROJECT_ID: die Compute Engine-Region für den Cluster. In dieser Anleitung ist die Region us-central1. In der Regel sollten Sie eine Region in Ihrer Nähe haben.
  2. Klonen Sie das in dieser Anleitung verwendete Beispiel-Repository:

    git clone https://github.com/GoogleCloudPlatform/bank-of-anthos.git
    cd bank-of-anthos/
    
  3. Erstellen Sie einen Cluster.

    gcloud container clusters create-auto CLUSTER_NAME \
        --release-channel=CHANNEL_NAME \
        --region=COMPUTE_REGION
    

    Dabei gilt:

    • CLUSTER_NAME: ein Name für den neuen Cluster.
    • CHANNEL_NAME: der Name einer Release-Version.

Prometheus bereitstellen

Verwenden Sie das Beispiel-Helm-Diagramm, um Prometheus zu installieren:

helm repo add bitnami https://charts.bitnami.com/bitnami
helm install tutorial bitnami/kube-prometheus \
    --version 8.2.2 \
    --values extras/prometheus/oss/values.yaml \
    --wait

Mit diesem Befehl wird Prometheus mit den folgenden Komponenten installiert:

  • Prometheus-Operator:: eine beliebte Methode zum Bereitstellen und Konfigurieren von Open-Source-Prometheus.
  • Alertmanager: verwaltet vom Prometheus-Server gesendete Benachrichtigungen und leitet sie an Anwendungen wie Slack weiter.
  • Blackbox-Exporter: ermöglicht es Prometheus, Endpunkte mit HTTP, HTTPS, DNS, TCP, ICMP und gRPC zu prüfen.

Bank of Anthos bereitstellen

Stellen Sie die Bank of Anthos-Beispielanwendung bereit:

kubectl apply -f extras/jwt/jwt-secret.yaml
kubectl apply -f kubernetes-manifests

Slack-Benachrichtigungen

Zum Einrichten von Slack-Benachrichtigungen müssen Sie eine Slack-Anwendung erstellen, eingehende Webhooks für die Anwendung aktivieren und die Anwendung in einem Slack-Arbeitsbereich installieren.

Slack-Anwendung erstellen

  1. Um einem Slack-Arbeitsbereich beizutreten, registrieren Sie sich entweder mit Ihrer E-Mail-Adresse oder nutzen eine von einem Workspace-Administrator gesendete Einladung.

  2. Melden Sie sich bei Slack an. Verwenden Sie hierfür den Namen Ihres Arbeitsbereichs und die Anmeldedaten für Ihr Slack-Konto.

  3. Erstellen Sie eine neue Slack-App:

    1. Klicken Sie im Dialogfeld Anwendung erstellen auf Neu erstellen.
    2. Geben Sie einen Anwendungsnamen an und wählen Sie Ihren Slack-Arbeitsbereich aus.
    3. Klicken Sie auf Create App (App erstellen).
    4. Klicken Sie unter Features und Funktionen hinzufügen auf Eingehende Webhooks.
    5. Klicken Sie auf die Schaltfläche Eingehende Webhooks aktivieren.
    6. Klicken Sie im Abschnitt Webhook-URLs für Ihren Arbeitsbereich auf Neuen Webhook zu Arbeitsbereich hinzufügen.
    7. Wählen Sie auf der angezeigten Autorisierungsseite einen Kanal aus, um Benachrichtigungen zu erhalten.
    8. Klicken Sie auf Zulassen.
    9. Ein Webhook für Ihre Slack-Anwendung wird im Abschnitt Webhook-URLs für Ihren Arbeitsbereich angezeigt. Speichern Sie die URL für eine spätere Verwendung.

Alertmanager konfigurieren

Erstellen Sie ein Kubernetes-Secret, um die Webhook-URL zu speichern:

kubectl create secret generic alertmanager-slack-webhook --from-literal webhookURL=SLACK_WEBHOOK_URL
kubectl apply -f extras/prometheus/oss/alertmanagerconfig.yaml

Ersetzen Sie SLACK_WEBHOOK_URL durch die URL des Webhooks aus dem vorherigen Abschnitt.

Prometheus konfigurieren

  1. Prüfen Sie das folgende Manifest:

    # Copyright 2023 Google LLC
    #
    # Licensed under the Apache License, Version 2.0 (the "License");
    # you may not use this file except in compliance with the License.
    # You may obtain a copy of the License at
    #
    #      http://www.apache.org/licenses/LICENSE-2.0
    #
    # Unless required by applicable law or agreed to in writing, software
    # distributed under the License is distributed on an "AS IS" BASIS,
    # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    # See the License for the specific language governing permissions and
    # limitations under the License.
    ---
    apiVersion: monitoring.coreos.com/v1
    kind: Probe
    metadata:
      name: frontend-probe
    spec:
      jobName: frontend
      prober:
        url: tutorial-kube-prometheus-blackbox-exporter:19115
        path: /probe
      module: http_2xx
      interval: 60s
      scrapeTimeout: 30s
      targets:
        staticConfig:
          labels:
            app: bank-of-anthos
          static:
            - frontend:80
    ---
    apiVersion: monitoring.coreos.com/v1
    kind: Probe
    metadata:
      name: userservice-probe
    spec:
      jobName: userservice
      prober:
        url: tutorial-kube-prometheus-blackbox-exporter:19115
        path: /probe
      module: http_2xx
      interval: 60s
      scrapeTimeout: 30s
      targets:
        staticConfig:
          labels:
            app: bank-of-anthos
          static:
            - userservice:8080/ready
    ---
    apiVersion: monitoring.coreos.com/v1
    kind: Probe
    metadata:
      name: balancereader-probe
    spec:
      jobName: balancereader
      prober:
        url: tutorial-kube-prometheus-blackbox-exporter:19115
        path: /probe
      module: http_2xx
      interval: 60s
      scrapeTimeout: 30s
      targets:
        staticConfig:
          labels:
            app: bank-of-anthos
          static:
            - balancereader:8080/ready
    ---
    apiVersion: monitoring.coreos.com/v1
    kind: Probe
    metadata:
      name: contacts-probe
    spec:
      jobName: contacts
      prober:
        url: tutorial-kube-prometheus-blackbox-exporter:19115
        path: /probe
      module: http_2xx
      interval: 60s
      scrapeTimeout: 30s
      targets:
        staticConfig:
          labels:
            app: bank-of-anthos
          static:
            - contacts:8080/ready
    ---
    apiVersion: monitoring.coreos.com/v1
    kind: Probe
    metadata:
      name: ledgerwriter-probe
    spec:
      jobName: ledgerwriter
      prober:
        url: tutorial-kube-prometheus-blackbox-exporter:19115
        path: /probe
      module: http_2xx
      interval: 60s
      scrapeTimeout: 30s
      targets:
        staticConfig:
          labels:
            app: bank-of-anthos
          static:
            - ledgerwriter:8080/ready
    ---
    apiVersion: monitoring.coreos.com/v1
    kind: Probe
    metadata:
      name: transactionhistory-probe
    spec:
      jobName: transactionhistory
      prober:
        url: tutorial-kube-prometheus-blackbox-exporter:19115
        path: /probe
      module: http_2xx
      interval: 60s
      scrapeTimeout: 30s
      targets:
        staticConfig:
          labels:
            app: bank-of-anthos
          static:
            - transactionhistory:8080/ready
    

    Dieses Manifest beschreibt Prometheus-Aktivitätsprüfungen und enthält die folgenden Felder:

    • spec.jobName: Der Jobname, der den extrahierten Messwerten zugewiesen ist.
    • spec.prober.url: die Dienst-URL des Blackbox-Exporters. Dazu gehört der Standardport für den Blackbox-Exporter, der im Helm-Diagramm definiert ist.
    • spec.prober.path: der Pfad der Messwerterfassung.
    • spec.targets.staticConfig.labels: die Labels, die allen Messwerten zugewiesen sind, die aus den Zielen extrahiert werden.
    • spec.targets.staticConfig.static: die Liste von zu prüfenden Hosts.
  2. Wenden Sie das Manifest auf Ihren Cluster an:

    kubectl apply -f extras/prometheus/oss/probes.yaml
    
  3. Prüfen Sie das folgende Manifest:

    # Copyright 2023 Google LLC
    #
    # Licensed under the Apache License, Version 2.0 (the "License");
    # you may not use this file except in compliance with the License.
    # You may obtain a copy of the License at
    #
    #      http://www.apache.org/licenses/LICENSE-2.0
    #
    # Unless required by applicable law or agreed to in writing, software
    # distributed under the License is distributed on an "AS IS" BASIS,
    # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    # See the License for the specific language governing permissions and
    # limitations under the License.
    ---
    apiVersion: monitoring.coreos.com/v1
    kind: PrometheusRule
    metadata:
      name: uptime-rule
    spec:
      groups:
      - name: Micro services uptime
        interval: 60s
        rules:
        - alert: BalancereaderUnavaiable
          expr: probe_success{app="bank-of-anthos",job="balancereader"} == 0
          for: 1m
          annotations:
            summary: Balance Reader Service is unavailable
            description: Check Balance Reader pods and it's logs
          labels:
            severity: 'critical'
        - alert: ContactsUnavaiable
          expr: probe_success{app="bank-of-anthos",job="contacts"} == 0
          for: 1m
          annotations:
            summary: Contacs Service is unavailable
            description: Check Contacs pods and it's logs
          labels:
            severity: 'warning'
        - alert: FrontendUnavaiable
          expr: probe_success{app="bank-of-anthos",job="frontend"} == 0
          for: 1m
          annotations:
            summary: Frontend Service is unavailable
            description: Check Frontend pods and it's logs
          labels:
            severity: 'critical'
        - alert: LedgerwriterUnavaiable
          expr: probe_success{app="bank-of-anthos",job="ledgerwriter"} == 0
          for: 1m
          annotations:
            summary: Ledger Writer Service is unavailable
            description: Check Ledger Writer pods and it's logs
          labels:
            severity: 'critical'
        - alert: TransactionhistoryUnavaiable
          expr: probe_success{app="bank-of-anthos",job="transactionhistory"} == 0
          for: 1m
          annotations:
            summary: Transaction History Service is unavailable
            description: Check Transaction History pods and it's logs
          labels:
            severity: 'critical'
        - alert: UserserviceUnavaiable
          expr: probe_success{app="bank-of-anthos",job="userservice"} == 0
          for: 1m
          annotations:
            summary: User Service is unavailable
            description: Check User Service pods and it's logs
          labels:
            severity: 'critical'
    

    Dieses Manifest beschreibt einen PrometheusRule und enthält die folgenden Felder:

    • spec.groups.[*].name: der Name der Regelgruppe.
    • spec.groups.[*].interval: wie oft Regeln in der Gruppe ausgewertet werden.
    • spec.groups.[*].rules[*].alert: der Name der Benachrichtigung.
    • spec.groups.[*].rules[*].expr: der PromQL-Ausdruck, der ausgewertet wird.
    • spec.groups.[*].rules[*].for: die Zeitspanne, in der Benachrichtigungen zurückgegeben werden müssen, bevor sie als ausgelöst gelten.
    • spec.groups.[*].rules[*].annotations: eine Liste von Annotationen, die jeder Benachrichtigung hinzugefügt werden sollen. Dies gilt nur für Benachrichtigungsregeln.
    • spec.groups.[*].rules[*].labels: die Labels, die hinzugefügt oder überschrieben werden sollen.
  4. Wenden Sie das Manifest auf Ihren Cluster an:

    kubectl apply -f extras/prometheus/oss/rules.yaml
    

Ausfall simulieren

  1. Simulieren Sie einen Ausfall, indem Sie das contacts-Deployment auf null skalieren:

    kubectl scale deployment contacts --replicas 0
    

    In Ihrem Slack-Arbeitsbereich-Kanal sollten Sie eine Benachrichtigung sehen. Es kann bis zu fünf Minuten dauern, bis GKE das Deployment skaliert.

  2. Stellen Sie das contacts-Deployment wieder her:

    kubectl scale deployment contacts --replicas 1
    

    Im Slack-Arbeitsbereich-Kanal sollten Sie eine Benachrichtigung zur Auflösung sehen können. Es kann bis zu fünf Minuten dauern, bis GKE das Deployment skaliert.

Bereinigen

Damit Ihrem Google Cloud-Konto die in dieser Anleitung verwendeten Ressourcen nicht in Rechnung gestellt werden, löschen Sie entweder das Projekt, das die Ressourcen enthält, oder Sie behalten das Projekt und löschen die einzelnen Ressourcen.

Projekt löschen

    Google Cloud-Projekt löschen:

    gcloud projects delete PROJECT_ID

Einzelne Ressourcen löschen

  1. Löschen Sie die Kubernetes-Ressourcen:

    kubectl delete -f kubernetes-manifests
    
  2. Deinstallieren Sie Prometheus:

    helm uninstall tutorial
    
  3. Löschen Sie den GKE-Cluster:

    gcloud container clusters delete CLUSTER_NAME --quiet
    

Nächste Schritte

  • Weitere Informationen zu Google Cloud Managed Service for Prometheus, einer vollständig verwalteten, globalen Messwertlösung auf der Grundlage von Prometheus, die standardmäßig in allen Autopilot-Clustern bereitgestellt wird.
  • Referenzarchitekturen, Diagramme und Best Practices zu Google Cloud kennenlernen. Weitere Informationen zu Cloud Architecture Center