Alertes: erreurs basées sur les journaux dans les sujets Pub/Sub

1. Introduction

Dernière mise à jour:21 juin 2023

Alertes sur les erreurs basées sur les journaux pour la disponibilité

Les alertes basées sur les journaux permettent de déterminer la disponibilité d'une application en surveillant des événements ou modèles spécifiques dans les journaux*.* En étant alerté en cas d'indisponibilité ou d'autres problèmes rencontrés par les utilisateurs, vous pouvez prendre des mesures pour minimiser l'impact sur vos utilisateurs et vos clients.

Bien que les tests de disponibilité fournissent un instantané général de la disponibilité, il peut être plus précis d'utiliser les messages d'erreur dérivés des journaux comme indicateurs de types d'indisponibilités plus spécifiques et d'avoir une idée de la proportion d'utilisateurs qui rencontrent un problème.

Les erreurs peuvent avoir différentes causes, qu'il s'agisse d'erreurs d'utilisateur, de maintenance du système ou de mises à niveau, et même de facteurs externes au système, comme le mauvais temps. La clé d'une alerte n'est pas d'essayer d'anticiper toutes les causes possibles, mais plutôt de choisir quelques symptômes clés qui peuvent servir de point de départ au dépannage.

Sujets Pub/Sub comme canal de notification d'alerte

Un sujet Pub/Sub peut être utilisé comme canal de notification Google Cloud Monitoring pour envoyer des alertes à un abonnement Pub/Sub. Vous pouvez ainsi intégrer vos alertes Cloud Monitoring à d'autres systèmes, y compris des services de notification tiers.

Pour utiliser un sujet Pub/Sub comme canal de notification, vous devez d'abord créer un sujet et un abonnement Pub/Sub. Vous devez ensuite créer un canal de notification Cloud Monitoring qui utilise le sujet Pub/Sub comme destination.

Lorsqu'une alerte est déclenchée, Cloud Monitoring envoie un message au sujet Pub/Sub. L'abonné de l'abonnement Pub/Sub peut alors traiter le message et prendre les mesures appropriées.

Objectifs de l'atelier

Dans cet atelier de programmation, vous allez déployer une application, créer un sujet Pub/Sub et créer une alerte basée sur les journaux qui recherche les erreurs dans une partie spécifique de l'application et utilise le sujet Pub/Sub comme canal de notification.

Points abordés

  • Créer un sujet Pub/Sub
  • Créer une alerte basée sur les journaux

Cet atelier de programmation porte sur la création d'une alerte en cas d'erreur. Les concepts et le code d'application non pertinents ne sont pas abordés, mais vous sont fournis afin que vous puissiez simplement les copier et les coller.

Prérequis

  • Un compte Google Cloud disposant des autorisations nécessaires pour:
  • Déployer des applications Cloud Run
  • Créer des sujets Pub/Sub
  • Créer des alertes

2. Configuration

Sélectionner ou créer un projet Google Cloud

Pour sélectionner un projet existant, utilisez le menu déroulant:

b35bf95b8bf3d5d8.png

Pour créer un projet dans Google Cloud, procédez comme suit:

  1. Accédez à la console Google Cloud Platform.
  2. Cliquez sur le bouton Créer un projet.
  3. Saisissez le nom de votre projet.
  4. Sélectionnez un compte de facturation pour votre projet.
  5. Cliquez sur le bouton Créer.

Votre projet est créé et vous êtes redirigé vers le tableau de bord du projet. Vous pouvez alors commencer à utiliser les services Google Cloud.

Vous trouverez ci-dessous des informations supplémentaires sur chaque étape:

  • Nom:le nom de votre projet doit être unique au sein de votre organisation.
  • Compte de facturation:vous pouvez utiliser un compte de facturation existant ou en créer un.
  • Créer:une fois que vous avez saisi toutes les informations requises, cliquez sur le bouton Créer pour créer votre projet.

Pour en savoir plus, consultez la documentation Google Cloud sur la création de projets.

3. Déployer l'application API

En quoi consiste l'exemple d'application ou d'API ?

Notre application est une application d'API Inventory simple qui expose un point de terminaison d'API REST en quelques opérations pour répertorier les articles en stock et obtenir un nombre spécifique d'articles.

Une fois l'API déployée et en supposant qu'elle est hébergée sur https://<somehost>, nous pouvons accéder aux points de terminaison de l'API comme suit:

https://<somehost>/inventory

Tous les articles ainsi que les niveaux de stock disponibles s'affichent.

https://<somehost>/inventory/{productid}

Vous obtiendrez ainsi un enregistrement unique avec l'ID du produit et le niveau d'inventaire disponible pour ce produit.

Les données de réponse renvoyées sont au format JSON.

Remarque: Cette application d'API est fournie à titre de démonstration uniquement. Elle ne constitue pas une implémentation d'API robuste et sécurisée. L'objectif est de disposer d'une application rapide permettant de découvrir l'objectif principal de cet atelier, à savoir Google Cloud Operations.

Exemples de données et requête/réponse API

Pour simplifier les choses, l'application n'est pas alimentée par une base de données au niveau du backend. Il contient trois exemples d'ID produit et leurs niveaux d'inventaire disponibles.

Identifiant de produit

Disponibilité de l'inventaire

I-1

10

I-2

20

I-3

30

Des exemples de requête et de réponse API sont présentés ci-dessous:

Requête API

Réponse de l'API

https://&lt;somehost&gt;/inventory

[ { &quot;I-1&quot;: 10, &quot;I-2&quot;: 20, &quot;I-3&quot;: 30 }]

https://&lt;somehost&gt;/inventory/I-1

{ &quot;productid&quot;: &quot;I-1&quot;, &quot;qty&quot;: 10}

https://&lt;somehost&gt;/inventory/I-2

{ &quot;productid&quot;: &quot;I-2&quot;, &quot;qty&quot;: 20}

https://&lt;somehost&gt;/inventory/I-200

{ &quot;productid&quot;: I-200, &quot;qty&quot;: -1}

Cloner le dépôt

Bien que Google Cloud puisse être utilisé à distance depuis votre ordinateur portable, nous allons nous servir de Google Cloud Shell pour cet atelier de programmation, un environnement de ligne de commande exécuté dans le cloud.

Depuis la console GCP, cliquez sur l'icône Cloud Shell de la barre d'outils située dans l'angle supérieur droit :

bce75f34b2c53987.png

Le provisionnement et la connexion à l'environnement prennent quelques instants seulement. Une fois l'opération terminée, le résultat devrait ressembler à ceci :

f6ef2b5f13479f3a.png

Cette machine virtuelle contient tous les outils de développement dont vous avez besoin. Elle comprend un répertoire d'accueil persistant de 5 Go et s'exécute sur Google Cloud, ce qui améliore nettement les performances du réseau et l'authentification. Vous pouvez effectuer tous les exercices de cet atelier dans un simple navigateur.

Configurer gcloud

Dans Cloud Shell, définissez l'ID de votre projet et enregistrez-le en tant que variable PROJECT_ID.

PROJECT_ID=[YOUR-PROJECT-ID]

gcloud config set project $PROJECT_ID

Exécutez maintenant la commande suivante:

$ git clone https://github.com/rominirani/cloud-code-sample-repository.git

Un dossier nommé "cloud-code-sample-repository" est créé dans ce dossier.

(Facultatif) Exécuter l'application sur Cloud Shell

Pour exécuter l'application en local, procédez comme suit:

  1. Depuis le terminal, accédez à la version Python de l'API via la commande suivante:

$ cd cloud-code-sample-repository

$ cd python-flask-api

  1. Dans le terminal, saisissez la commande suivante. Au moment de la rédaction de ce document, Python 3.9.x est installé dans Cloud Shell. Nous utiliserons la version par défaut. Si vous prévoyez de l'exécuter localement sur votre ordinateur portable, vous pouvez opter pour Python 3.8 ou version ultérieure) :

$ python app.py

  1. Vous pouvez exécuter la commande suivante pour démarrer le serveur Python localement.

1f798fbddfdc2c8e.png 46edf454cc70c5a6.png

Cliquez sur "Prévisualiser" sur le port 8080. 5. Une fenêtre de navigateur s'ouvre. Une erreur 404 s'affiche. Ce n'est pas un problème. Modifiez l'URL et remplacez-la par /inventory après le nom d'hôte.

Par exemple, sur ma machine, cela ressemble à ceci:

https://8080-cs-557561579860-default.cs-asia-southeast1-yelo.cloudshell.dev/inventory

La liste des articles d'inventaire s'affiche, comme expliqué précédemment:

709d57ee2f0137e4.png

  1. Vous pouvez arrêter le serveur maintenant en accédant au terminal et en appuyant sur Ctrl-C .

Déployer l'application

Nous allons maintenant déployer cette application API dans Cloud Run. Processus impliquant l'utilisation du client de ligne de commande gcloud pour exécuter la commande permettant de déployer le code sur Cloud Run.

Depuis le terminal, exécutez la commande gcloud suivante:

$ gcloud run deploy --source .

Vous allez être amené à répondre à plusieurs questions, dont certains sont mentionnés ci-dessous:

  1. Nom du service (python-flask-api): utilisez cette valeur par défaut ou choisissez un nom du type my-inventory-api
  2. API [run.googleapis.com] non activée sur le projet [613162942481]. Voulez-vous l'activer et réessayer (cela prendra quelques minutes) ? (y/N)? O
  3. Veuillez indiquer une région: choisissez 31 (us-west-1).
  4. L'API [artifactregistry.googleapis.com] n'est pas activée sur le projet [613162942481]. Voulez-vous l'activer et réessayer (cela prendra quelques minutes) ? (y/N)? O
  5. Le déploiement depuis la source nécessite un dépôt Docker Artifact Registry pour stocker les conteneurs créés. Un dépôt nommé [cloud-run-source-deploy] sera créé dans la région [us-west1].
  6. Do you want to continue (Y/n)? O
  7. Autoriser les appels non authentifiés à [my-inventory-api] (y/N) ? O

À terme, cela lancera le processus consistant à récupérer votre code source, à le conteneuriser, à le transférer vers Artifact Registry, puis à déployer le service et la révision Cloud Run. Soyez patient tout au long de ce processus (cela peut prendre trois à quatre minutes). Le processus devrait se terminer avec l'URL du service qui vous est présentée.

Un exemple d'exécution est présenté ci-dessous:

87ba8dbf88e8cfa4.png

Tester l'application

Maintenant que nous avons déployé l'application sur Cloud Run, vous pouvez accéder à l'application API comme suit:

  1. Notez l'URL de service obtenue à l'étape précédente. Par exemple, sur ma configuration, il s'affiche sous la forme https://my-inventory-api-bt2r5243dq-uw.a.run.app. Appelons-la <SERVICE_URL>.
  2. Ouvrez un navigateur et accédez aux trois URL suivantes pour les points de terminaison de l'API:
  3. <SERVICE_URL>/inventory
  4. <SERVICE_URL>/inventory/I-1
  5. <SERVICE_URL>/inventory/I-100

Elle doit être conforme aux spécifications que nous avions fournies dans une section précédente, avec des exemples de requêtes et de réponses d'API.

Obtenir les détails du service à partir de Cloud Run

Nous avons déployé notre service d'API sur Cloud Run, un environnement de calcul sans serveur. Nous pouvons accéder au service Cloud Run via la console Google Cloud à tout moment.

Dans le menu principal, accédez à Cloud Run. La liste des services en cours d'exécution dans Cloud Run s'affiche. Le service que vous venez de déployer doit s'afficher. En fonction du nom que vous avez sélectionné, un message semblable au suivant doit s'afficher:

2633965c4bc957cc.png

Cliquez sur le nom du service pour afficher les détails. Des exemples de détails sont présentés ci-dessous:

33042ae64322ce07.png

Notez l'URL, qui n'est rien d'autre que l'URL du service que vous pouvez insérer dans le navigateur et accéder à l'API Inventory que nous venons de déployer. Consultez les métriques et d'autres informations.

Commençons par la suite Google Cloud Operations.

4. Créer un sujet Pub/Sub pour recevoir la notification d'alerte

Pour créer un sujet Pub/Sub, vous pouvez suivre ces étapes dans la console Google Cloud:

  1. Recherchez Pub/Sub dans le champ de recherche, puis accédez à Pub/Sub. 935028bd8f6328ef.png
  2. S'il n'est pas déjà affiché, cliquez sur l'onglet Thèmes. 7fd8bf91386a88fd.png
  3. Cliquez sur le bouton Create Topic (Créer un sujet). cd9d197f9023c41b.png
  4. Saisissez un nom reconnaissable pour votre thème.

173f313b4a3c4934.png

  1. Cliquez sur le bouton Créer. ca9a02477da21a44.png
  2. Copiez le nom du sujet à l'aide du bouton de copie de l'icône. Vous en aurez besoin pour la section suivante.

20848252ee83df93.png

5. Créer une règle d'alerte pour les erreurs

Explorer les journaux d'erreurs

Pour afficher les journaux d'erreurs de l'application:

Cliquez sur l'onglet Journalisation.

Une interface de journal s'affiche, dans laquelle vous pouvez sélectionner/désélectionner différentes ressources (projet, ressource Google Cloud, noms de service, etc.) ainsi que des niveaux de journalisation pour filtrer les messages de journal selon vos besoins.

6605b68395185b89.png

Simulez quelques requêtes non valides envoyées au service Inventory en fournissant des ID produit autres que I-1, I-2 ou I-3. Par exemple, une requête incorrecte est:

https://&lt;SERVICE_URL&gt;/inventory/I-999

Nous allons maintenant rechercher tous les avertissements générés par notre API, lorsqu'un identifiant produit incorrect est fourni dans la requête.

Créer une règle d'alerte personnalisée basée sur les journaux pour les erreurs

Supposons que nous souhaitons surveiller l'apparition d'un message d'erreur très spécifique pour une partie de l'application. Supposons que nous remarquions un grand nombre d'erreurs lors de la recherche d'identifiants produit. Ce problème est symptomatique de plusieurs problèmes possibles (lien incorrect, incohérence dans la base de données ou énumération de notre site par un robot). Il serait difficile, voire impossible, d'imaginer toutes les causes potentielles, mais l'application qui envoie ce message même une fois constitue un problème de haut niveau dont nous souhaitons être informés. Pour émettre des alertes, nous devons créer une règle basée sur les données de nos journaux d'erreurs.

  1. Dans la zone de requête, insérez les paramètres de requête suivants:

resource.type=&quot;cloud_run_revision&quot;

textPayload =~ "AVERTISSEMENT dans l'application: Demande d'inventaire reçue pour un ID de produit incorrect"

Voici un exemple :

f672154cfebf0051.png

  1. Cliquez sur "Exécuter la requête". Toutes les requêtes qui sont arrivées et qui présentent ce problème s'affichent alors.

77c190e3a2fab6bf.png

  1. Pour convertir ce qui précède en alerte, cliquez sur le bouton Créer une alerte qui apparaît dans l'explorateur de journaux, juste en dessous du champ de requête, à droite:

4cd3fcf142189376.png

  1. Le formulaire permettant de créer une règle d'alerte basée sur les journaux s'affiche.

b82446854bad87fc.png

  1. Utilisez la requête initiale pour les journaux à inclure dans l'alerte:

resource.type="cloud_run_revision"

textPayload =~ "WARNING in app: Received inventory request for incorrect productid"

764227db73ec3de6.png

  1. Définissez la fréquence des notifications et la durée de l'incident. Pour les besoins de cet exemple, vous pouvez utiliser les valeurs minimales pour chaque élément:

bb3d96448ec998a1.png

  1. Enfin, dans la section "Qui doit être informé ?", sélectionnez le canal de notification Pub/Sub que vous avez créé précédemment:

3593c48c29d4b76c.png

  1. Cliquez sur Enregistrer. Pour afficher et gérer la règle d'alerte, accédez à la page Alertes, puis consultez la section "Règles" : ca08ea380fb37c91.png

6. Félicitations

Félicitations, vous avez bien configuré votre test de disponibilité pour envoyer des alertes à Pub/Sub !