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 peuvent être utilisées pour déterminer la disponibilité d'une application en surveillant des événements ou des modèles spécifiques dans les journaux. En étant alerté des pannes ou d'autres problèmes rencontrés par les utilisateurs, vous pouvez prendre des mesures pour minimiser leur impact sur vos utilisateurs et vos clients.
Bien que les vérifications du temps d'activité fournissent un aperçu général de la disponibilité, il peut être plus précis d'utiliser les messages d'erreur issus des journaux comme indicateurs de types d'indisponibilité plus spécifiques et pour avoir une idée de la proportion d'utilisateurs qui rencontrent un problème.
Les erreurs peuvent avoir de nombreuses causes, allant des erreurs des utilisateurs à la maintenance et aux mises à niveau des systèmes, en passant par des facteurs externes au système, comme les intempéries. La clé des alertes 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 pour le 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. Cela vous permet d'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é Pub/Sub peut ensuite 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 pour les erreurs. 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 suivantes :
- 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 :

Pour créer un projet dans Google Cloud, procédez comme suit :
- Accédez à la console Google Cloud Platform.
- Cliquez sur le bouton Créer un projet.
- Saisissez le nom de votre projet.
- Sélectionnez un compte de facturation pour votre projet.
- Cliquez sur le bouton Créer.
Votre projet sera créé et vous serez redirigé vers le tableau de bord du projet. Vous pourrez ensuite commencer à utiliser les services Google Cloud.
Voici quelques 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 d'API
Quel est l'objet de l'application ou de l'API exemple ?
Notre application est une application simple de l'API Inventory qui expose un point de terminaison d'API REST avec quelques opérations permettant de lister les articles de l'inventaire et d'obtenir le nombre d'articles spécifiques en stock.
Une fois l'API déployée et en supposant qu'elle soit hébergée sur https://<somehost>, nous pouvons accéder aux points de terminaison de l'API comme suit :
https://<somehost>/inventory
Tous les produits et leurs niveaux de stock disponibles seront listés.
https://<somehost>/inventory/{productid}
Vous obtiendrez ainsi un seul enregistrement avec l'ID du produit et le niveau de stock disponible pour ce produit.
Les données de réponse renvoyées sont au format JSON.
Remarque : Cette application API est uniquement destinée à des fins de démonstration et ne représente pas une implémentation d'API sécurisée et robuste. Il est destiné à nous fournir une application rapide pour explorer l'objectif principal de l'atelier, à savoir les opérations Google Cloud.
Exemple de données et de requête/réponse API
Pour plus de simplicité, l'application n'est pas alimentée par une base de données au niveau du backend. Il contient trois exemples d'ID de produits et leurs niveaux de stock disponibles.
Identifiant de produit | Niveau d'inventaire disponible |
I-1 | 10 |
I-2 | 20 |
I-3 | 30 |
Vous trouverez ci-dessous un exemple de requête et de réponse de l'API :
Requête API | Réponse de l'API |
https://<somehost>/inventory | [ { "I-1": 10, "I-2": 20, "I-3": 30 }] |
https://<somehost>/inventory/I-1 | { "productid": "I-1", "qty": 10} |
https://<somehost>/inventory/I-2 | { "productid": "I-2", "qty": 20} |
https://<somehost>/inventory/I-200 | { "productid": I-200, "qty": -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 :

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

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 réaliser toutes les activités 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 intitulé "cloud-code-sample-repository" sera créé dans ce dossier.
(Facultatif) Exécuter l'application sur Cloud Shell
Pour exécuter l'application en local, procédez comme suit :
- Depuis le terminal, accédez à la version Python de l'API à l'aide de la commande suivante :
$ cd cloud-code-sample-repository
$ cd python-flask-api
- Dans le terminal, saisissez la commande suivante (au moment de la rédaction, Cloud Shell est fourni avec Python 3.9.x installé. Nous utiliserons la version par défaut. Si vous prévoyez de l'exécuter localement sur votre ordinateur portable, vous pouvez utiliser Python 3.8 ou une version ultérieure :
$ python app.py
- Vous pouvez exécuter la commande suivante pour démarrer le serveur Python en local.

Cliquez sur "Prévisualiser sur le port 8080". 5. Une fenêtre de navigateur s'ouvre. Une erreur 404 s'affiche, mais ce n'est pas grave. Modifiez l'URL pour qu'elle ne contienne que "/inventory" après le nom d'hôte.
Par exemple, sur mon ordinateur, 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 :

- 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 d'API sur Cloud Run. Le processus impliquait l'utilisation du client de ligne de commande gcloud pour exécuter la commande permettant de déployer le code sur Cloud Run.
Dans le terminal, exécutez la commande gcloud suivante :
$ gcloud run deploy --source .
Plusieurs questions vous seront posées. Voici quelques-uns des points abordés :
- Nom du service (python-flask-api) : vous pouvez conserver ce nom par défaut ou en choisir un autre, par exemple my-inventory-api.
- API [run.googleapis.com] not enabled on project [613162942481]. Voulez-vous activer et réessayer (cela prendra quelques minutes) ? (y/N)? O
- Veuillez spécifier une région : choisissez 31 (us-west-1).
- API [artifactregistry.googleapis.com] not enabled on project [613162942481]. Voulez-vous activer et réessayer (cela prendra quelques minutes) ? (y/N)? O
- Le déploiement à partir de 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].
- Do you want to continue (Y/n)? O
- Autoriser les appels non authentifiés vers [my-inventory-api] (y/N) ? O
Cela lancera le processus de conteneurisation de votre code source, de transfert vers Artifact Registry, puis de déploiement du service et de la révision Cloud Run. Soyez patient pendant ce processus (qui peut prendre trois à quatre minutes). Une fois terminé, l'URL du service s'affiche.
Voici un exemple d'exécution :

Tester l'application
Maintenant que nous avons déployé l'application sur Cloud Run, vous pouvez accéder à l'application d'API comme suit :
- Notez l'URL du service de l'étape précédente. Par exemple, dans ma configuration, il s'affiche sous la forme
https://my-inventory-api-bt2r5243dq-uw.a.run.app. Appelons-le<SERVICE_URL>. - Ouvrez un navigateur et accédez aux trois URL suivantes pour les points de terminaison de l'API :
<SERVICE_URL>/inventory<SERVICE_URL>/inventory/I-1<SERVICE_URL>/inventory/I-100
Il doit correspondre aux spécifications que nous avons fournies dans une section précédente avec un exemple de requête et de réponse 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 que vous exécutez dans Cloud Run s'affiche. Vous devriez voir le service que vous venez de déployer. Selon le nom que vous avez sélectionné, l'écran qui s'affiche devrait ressembler à ce qui suit :

Cliquez sur le nom du service pour afficher les détails. Vous trouverez ci-dessous les détails de l'échantillon :

Notez l'URL, qui n'est autre que l'URL du service que vous pouvez saisir dans le navigateur pour 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 :
- Recherchez Pub/Sub dans le champ de recherche, puis accédez à Pub/Sub.

- Si ce n'est pas déjà fait, cliquez sur l'onglet Thèmes.

- Cliquez sur le bouton Créer un sujet.

- Saisissez un nom reconnaissable pour votre thème.

- Cliquez sur le bouton Créer.

- Copiez le nom du sujet à l'aide de l'icône de copie. Vous en aurez besoin pour la section suivante.

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. Elle vous permet de sélectionner/désélectionner spécifiquement différentes ressources (projet, ressource Google Cloud, noms de services, etc.), ainsi que des niveaux de journaux pour filtrer les messages de journaux selon vos besoins.

Simulez quelques requêtes non valides au service Inventory en fournissant des ID de produits qui ne sont pas I-1, I-2 et I-3. Par exemple, une requête incorrecte :
https://<SERVICE_URL>/inventory/I-999
Nous allons maintenant rechercher tous les AVERTISSEMENTS générés par notre API lorsqu'un ID de produit incorrect est fourni dans la requête.
Créer une règle d'alerte basée sur les journaux personnalisée pour les erreurs
Supposons que nous voulions surveiller l'apparition d'un message d'erreur très spécifique pour une partie de l'application. Par exemple, si nous constatons un nombre élevé d'erreurs lors de la recherche d'identifiants produit. Ce problème peut être le symptôme de nombreux problèmes (lien incorrect, incohérence de la base de données ou robot énumérant notre site). Bien qu'il soit difficile, voire impossible, d'imaginer toutes les causes potentielles, l'application qui envoie ce message même une seule fois est un problème de haut niveau dont nous voulons être informés. Pour recevoir une alerte à ce sujet, nous devons créer une règle basée sur les données de nos journaux d'erreurs.
- Dans la zone de requête, insérez les paramètres de requête suivants :
resource.type="cloud_run_revision"
textPayload =~ "WARNING in app: Received inventory request for incorrect productid"
Voici un exemple :

- Cliquez sur "Exécuter la requête". Vous verrez alors toutes les demandes reçues qui présentent ce problème.

- Pour convertir la requête ci-dessus en alerte, cliquez sur le bouton Créer une alerte qui s'affiche dans l'explorateur de journaux, juste en dessous du champ de requête, à droite :

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

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

- Définissez la fréquence des notifications et la durée de l'incident. Pour l'exemple, vous pouvez utiliser les valeurs minimales pour chacun :

- Enfin, pour "Qui doit être informé ?", sélectionnez le canal de notification Pub/Sub que vous avez créé précédemment :

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

6. Félicitations
Félicitations, vous avez correctement configuré votre test de disponibilité pour envoyer des alertes à Pub/Sub.