Observabilité des applications avec Prometheus sur GKE


Ce tutoriel explique comment utiliser la version Open Source de Prometheus afin de configurer des vérifications d'activité pour des microservices d'application déployés sur Google Kubernetes Engine (GKE).

Ce tutoriel utilise Prometheus Open Source. Cependant, chaque cluster GKE Autopilot déploie automatiquement Managed Service pour Prometheus, la solution multicloud et multiprojets entièrement gérée deGoogle Cloudpour les métriques Prometheus. Managed Service pour Prometheus vous permet de surveiller vos charges de travail et d'envoyer des alertes à l'échelle mondiale à l'aide de Prometheus, sans avoir à gérer et exploiter manuellement Prometheus à grande échelle.

Vous pouvez également utiliser des outils Open Source tels que Grafana pour visualiser les métriques collectées par Prometheus.

Objectifs

  • créer un cluster ;
  • déployer Prometheus ;
  • déployer l'exemple d'application Bank of Anthos ;
  • configurer des vérifications d'activité Prometheus ;
  • configurer des alertes Prometheus ;
  • configurer Alertmanager pour recevoir une notification dans un canal Slack ;
  • simuler une interruption pour tester Prometheus.

Coûts

Dans ce document, vous utilisez les composants facturables suivants de Google Cloud :

Pour obtenir une estimation des coûts en fonction de votre utilisation prévue, utilisez le simulateur de coût.

Les nouveaux utilisateurs de Google Cloud peuvent bénéficier d'un essai gratuit.

Une fois que vous avez terminé les tâches décrites dans ce document, vous pouvez éviter de continuer à payer des frais en supprimant les ressources que vous avez créées. Pour en savoir plus, consultez la section Effectuer un nettoyage.

Avant de commencer

  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. Installez l'API Helm
  9. Préparer l'environnement

    Dans ce tutoriel, vous utilisez Cloud Shell pour gérer les ressources hébergées surGoogle Cloud.

    1. Définissez les variables d'environnement par défaut :

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

      Remplacez les éléments suivants :

      • PROJECT_ID : ID de votre projet Google Cloud.
      • PROJECT_ID : région Compute Engine du cluster. Pour ce tutoriel, la région est us-central1. En règle générale, vous définissez une région proche de vous.
    2. Clonez l'exemple de dépôt utilisé dans ce tutoriel :

      git clone https://github.com/GoogleCloudPlatform/bank-of-anthos.git
      cd bank-of-anthos/
      
    3. Créez un cluster :

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

      Remplacez les éléments suivants :

    Déployer Prometheus

    Installez Prometheus à l'aide de l'exemple de chart Helm :

    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
    

    Cette commande installe Prometheus avec les composants suivants :

    • Opérateur Prometheus : une méthode populaire pour déployer et configurer Prometheus Open Source.
    • Alertmanager : gère les alertes envoyées par le serveur Prometheus et les achemine vers des applications, telles que Slack.
    • Exportateur par boîte noire : permet aux points de terminaison de vérification de Prometheus d'utiliser HTTP, HTTPS, DNS, TCP, ICMP et gRPC.

    Déployer Bank of Anthos

    Déployez l'exemple d'application Bank of Anthos :

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

    Notifications Slack

    Pour configurer des notifications Slack, vous devez créer une application Slack, activer les webhooks entrants pour l'application et installer l'application dans un espace de travail Slack.

    Créer l'application Slack

    1. Rejoignez un espace de travail Slack en vous inscrivant avec votre adresse e-mail ou en utilisant une invitation envoyée par un administrateur de l'espace de travail.

    2. Connectez-vous à Slack à l'aide du nom de votre espace de travail et des identifiants de votre compte Slack.

    3. Créer une application Slack

      1. Dans la boîte de dialogue Créer une application, cliquez sur À partir de zéro.
      2. Spécifiez un Nom d'application et choisissez votre espace de travail Slack.
      3. Cliquez sur Create App (Créer l'application).
      4. Sous Ajouter des fonctionnalités, cliquez sur Webhooks entrants.
      5. Cliquez sur le bouton Activer les webhooks entrants.
      6. Dans la section URL de webhook pour votre espace de travail, cliquez sur Ajouter un webhook à l'espace de travail.
      7. Sur la page qui s'ouvre, sélectionnez un canal pour recevoir les notifications.
      8. Cliquez sur Autoriser.
      9. Un webhook pour votre application Slack s'affiche dans la section URL de webhook pour votre espace de travail. Enregistrez l'URL pour plus tard.

    Configurer Alertmanager

    Créez un secret Kubernetes pour stocker l'URL du webhook :

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

    Remplacez SLACK_WEBHOOK_URL par l'URL du webhook obtenue à la section précédente.

    Configurer Prometheus

    1. Examinez le fichier manifeste suivant :

      # 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
      

      Ce fichier manifeste décrit les vérifications d'activité Prometheus et inclut les champs suivants :

      • spec.jobName : nom du job attribué aux métriques scrapées.
      • spec.prober.url : URL de service de l'exportateur par boîte noire. Cet élément inclut le port par défaut de l'exportateur par boîte noire, qui est défini dans le chart Helm.
      • spec.prober.path : chemin de collecte des métriques.
      • spec.targets.staticConfig.labels : libellés attribués à toutes les métriques scrapées sur les cibles.
      • spec.targets.staticConfig.static : liste des hôtes à vérifier.
    2. Appliquez le fichier manifeste à votre cluster :

      kubectl apply -f extras/prometheus/oss/probes.yaml
      
    3. Examinez le fichier manifeste suivant :

      # 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'
      

      Ce fichier manifeste décrit une règle PrometheusRule et inclut les champs suivants :

      • spec.groups.[*].name : nom du groupe de règles.
      • spec.groups.[*].interval : fréquence à laquelle les règles du groupe sont évaluées.
      • spec.groups.[*].rules[*].alert : nom de l'alerte.
      • spec.groups.[*].rules[*].expr : expression PromQL à évaluer.
      • spec.groups.[*].rules[*].for : durée pendant laquelle les alertes doivent être renvoyées pour être considérées comme déclenchées.
      • spec.groups.[*].rules[*].annotations : liste d'annotations à ajouter à chaque alerte. Cela n'est valide que pour les règles d'alerte.
      • spec.groups.[*].rules[*].labels : libellés à ajouter ou à écraser.
    4. Appliquez le fichier manifeste à votre cluster :

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

    Simuler une interruption

    1. Simulez une interruption en procédant à un scaling à zéro du déploiement contacts :

      kubectl scale deployment contacts --replicas 0
      

      Un message de notification doit s'afficher dans la chaîne de votre espace de travail Slack. GKE peut prendre jusqu'à cinq minutes pour effectuer le scaling du déploiement.

    2. Restaurez le déploiement de contacts :

      kubectl scale deployment contacts --replicas 1
      

      Un message de notification indiquant la résolution de l'alerte doit s'afficher dans la chaîne de votre espace de travail Slack. GKE peut prendre jusqu'à cinq minutes pour effectuer le scaling du déploiement.

    Effectuer un nettoyage

    Pour éviter que les ressources utilisées lors de ce tutoriel soient facturées sur votre compte Google Cloud, supprimez le projet contenant les ressources, ou conservez le projet et supprimez les ressources individuelles.

    Supprimer le projet

    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.

    Supprimer des ressources individuelles

    1. Supprimez les ressources Kubernetes :

      kubectl delete -f kubernetes-manifests
      
    2. Désinstallez Prometheus :

      helm uninstall tutorial
      
    3. Supprimez le cluster GKE :

      gcloud container clusters delete CLUSTER_NAME --quiet
      

    Étapes suivantes

    • Découvrez Google Cloud Managed Service pour Prometheus, une solution de métriques mondiale, entièrement gérée et basée sur Prometheus, qui est déployée par défaut dans tous les clusters Autopilot.
    • Découvrez des architectures de référence, des schémas et des bonnes pratiques concernant Google Cloud. Consultez notre Cloud Architecture Center.