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 de Google Cloud pour 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 une chaîne Slack ;
  • simuler une interruption pour tester Prometheus.

Coûts

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

Obtenez une estimation des coûts en fonction de votre utilisation prévue à l'aide du 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. Connectez-vous à votre compte Google Cloud. Si vous débutez sur Google Cloud, créez un compte pour évaluer les performances de nos produits en conditions réelles. Les nouveaux clients bénéficient également de 300 $ de crédits gratuits pour exécuter, tester et déployer des charges de travail.
  2. Dans Google Cloud Console, sur la page de sélection du projet, cliquez sur Créer un projet pour commencer à créer un projet Google Cloud.

    Accéder au sélecteur de projet

  3. Vérifiez que la facturation est activée pour votre projet Google Cloud.

  4. Activez l'API GKE

    Activer l'API

  5. Dans Google Cloud Console, sur la page de sélection du projet, cliquez sur Créer un projet pour commencer à créer un projet Google Cloud.

    Accéder au sélecteur de projet

  6. Vérifiez que la facturation est activée pour votre projet Google Cloud.

  7. Activez l'API GKE

    Activer l'API

  8. Installez l'API Helm

Préparer l'environnement

Dans ce tutoriel, vous utilisez Cloud Shell pour gérer les ressources hébergées sur Google 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. Pour créer une application Slack, procédez comme suit :

    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

    Supprimez un projet Google Cloud :

    gcloud projects delete PROJECT_ID

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