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 vonGoogle Cloudfü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 von Prometheus erfasste Messwerte zu visualisieren.

Ziele

  • Erstellen Sie einen Cluster.
  • Stellen Sie Prometheus bereit.
  • Stellen Sie die Beispielanwendung Bank of Anthos bereit.
  • Konfigurieren Sie Prometheus-Aktivitätsprüfungen.
  • Prometheus-Benachrichtigungen konfigurieren
  • Konfigurieren Sie Alertmanager, um Benachrichtigungen in einem Slack-Channel 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.

Hinweise

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, click Create project to begin creating a new Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. Enable the GKE API.

    Enable the API

  5. In the Google Cloud console, on the project selector page, click Create project to begin creating a new Google Cloud project.

    Go to project selector

  6. Make sure that billing is enabled for your Google Cloud project.

  7. Enable the GKE API.

    Enable the API

  8. Installieren Sie die Helm API.
  9. Umgebung vorbereiten

    In dieser Anleitung verwenden Sie Cloud Shell zum Verwalten von Ressourcen, die inGoogle Cloudgehostet werden.

    1. Legen Sie die Standardumgebungsvariablen fest:

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

      Ersetzen Sie Folgendes:

      • 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. Normalerweise sollten Sie eine Region auswählen, die sich in Ihrer Nähe befindet.
    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-Workspace installieren.

    Slack-Anwendung erstellen

    1. Um einem Slack-Workspace 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. Neue Slack-App erstellen

      1. Klicken Sie im Dialogfeld Anwendung erstellen auf Neu erstellen.
      2. Geben Sie einen Anwendungsnamen an und wählen Sie Ihren Slack-Workspace 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 auch der Standardport für den Blackbox-Exporter, der im Helm-Chart 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-Workspace-Kanal sollten Sie eine Benachrichtigung sehen. Es kann bis zu fünf Minuten dauern, bis GKE das Deployment skaliert hat.

    2. Stellen Sie das Deployment contacts wieder her:

      kubectl scale deployment contacts --replicas 1
      

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

    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

    1. In the Google Cloud console, go to the Manage resources page.

      Go to Manage resources

    2. In the project list, select the project that you want to delete, and then click Delete.
    3. In the dialog, type the project ID, and then click Shut down to delete the project.

    Einzelne Ressourcen löschen

    1. Löschen Sie die Kubernetes-Ressourcen:

      kubectl delete -f kubernetes-manifests
      
    2. Prometheus deinstallieren:

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

      gcloud container clusters delete CLUSTER_NAME --quiet
      

    Nächste Schritte