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 un canal 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. 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

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. 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

    Delete a Google Cloud project:

    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