Au cours de cet exercice, vous allez générer des entrées de journal à partir d'une application, les filtrer et les analyser dans Cloud Logging, puis les exporter dans un récepteur BigQuery.
Objectifs
Dans cet atelier, vous allez apprendre à effectuer les tâches suivantes :
Configurer et déployer une application test
Explorer les entrées de journal générées par l'application test
Créer et utiliser une métrique basée sur les journaux
Exporter les journaux de l'application dans BigQuery
Avant de commencer l'atelier
Dans cette tâche, vous allez utiliser Qwiklabs pour initialiser votre atelier.
Pour chaque atelier, nous vous attribuons un nouveau projet Google Cloud et un nouvel ensemble de ressources pour une durée déterminée, sans frais.
Connectez-vous à Qwiklabs dans une fenêtre de navigation privée.
Vérifiez le temps imparti pour l'atelier (par exemple : 01:15:00) : vous devez pouvoir le terminer dans ce délai.
Une fois l'atelier lancé, vous ne pouvez pas le mettre en pause. Si nécessaire, vous pourrez le redémarrer, mais vous devrez tout reprendre depuis le début.
Lorsque vous êtes prêt, cliquez sur Démarrer l'atelier.
Notez vos identifiants pour l'atelier (Nom d'utilisateur et Mot de passe). Ils vous serviront à vous connecter à Google Cloud Console.
Cliquez sur Ouvrir la console Google.
Cliquez sur Utiliser un autre compte, puis copiez-collez les identifiants de cet atelier lorsque vous y êtes invité.
Si vous utilisez d'autres identifiants, des messages d'erreur s'afficheront ou des frais seront appliqués.
Acceptez les conditions d'utilisation et ignorez la page concernant les ressources de récupération des données.
Une fois la connexion initiale effectuée, le tableau de bord du projet s'affiche.
Activer Google Cloud Shell
Google Cloud Shell est une machine virtuelle qui contient de nombreux outils pour les développeurs. Elle comprend un répertoire d'accueil persistant de 5 Go et s'exécute sur Google Cloud.
Google Cloud Shell vous permet d'accéder à vos ressources Google Cloud grâce à une ligne de commande.
Dans la barre d'outils située en haut à droite dans la console Cloud, cliquez sur le bouton "Ouvrir Cloud Shell".
Cliquez sur Continuer.
Le provisionnement et la connexion à l'environnement prennent quelques instants. Une fois connecté, vous êtes en principe authentifié et le projet est défini sur votre ID_PROJET. Par exemple :
gcloud est l'outil de ligne de commande pour Google Cloud. Il est préinstallé sur Cloud Shell et permet la complétion par tabulation.
Vous pouvez lister les noms des comptes actifs à l'aide de cette commande :
Vous pouvez lister les ID de projet à l'aide de cette commande :
gcloud config list project
Résultat :
[core]
project =
Exemple de résultat :
[core]
project = qwiklabs-gcp-44776a13dea667a6
Remarque : Pour consulter la documentation complète sur gcloud, accédez au guide de présentation de la gcloud CLI.
Tâche 1 : Configurer une application test, la déployer et configurer une VM de test de charge
Pour tester la journalisation, l'exportation de journaux et Error Reporting, nous allons déployer l'application HelloLoggingNodeJS que nous avons utilisée au cours d'un exercice précédent sur Cloud Run.
Assurez-vous que les API Cloud Build, Compute Engine et Cloud Run sont activées, car vous en aurez besoin ultérieurement :
Ce dépôt contient une application Node.js de base pour les tests.
Accédez au dossier HelloLoggingNodeJS, puis ouvrez le fichier index.js dans l'éditeur Cloud Shell :
cd HelloLoggingNodeJS
edit index.js
Si une erreur indique que l'éditeur de code n'a pas pu être chargé parce que les cookies tiers sont désactivés, cliquez sur Open in New Window (Ouvrir dans une nouvelle fenêtre) et basculez vers le nouvel onglet.
Prenez quelques minutes pour examiner le code. Il est possible que vous reconnaissiez ce code tiré de certains exemples du module de cours.
Notez qu'il charge la bibliothèque Google Error Reporting et la bibliothèque de débogage.
Faites défiler le code vers le bas. Plusieurs méthodes permettent de générer des journaux, des erreurs et des journaux d'erreurs.
Portez une attention particulière à la route /random-error. Elle génère une erreur environ toutes les 1 000 requêtes. À l'étape suivante, vous allez la modifier pour qu'une erreur s'affiche toutes les 20 requêtes.
Pour augmenter le nombre d'exceptions non détectées sur la route /random-error de 1 sur 1 000 à 1 sur 20, ouvrez le fichier index.js dans l'éditeur Cloud Shell.
Dans le fichier index.js, remplacez les lignes 125 à 135 par ce qui suit :
//Generates an uncaught exception every 20 requests
app.get('/random-error', (req, res) => {
error_rate = parseInt(req.query.error_rate) || 20
let errorNum = (Math.floor(Math.random() * error_rate) + 1);
if (errorNum==1) {
console.log("Called /random-error, and it's about to error");
doesNotExist();
}
console.log("Called /random-error, and it worked");
res.send("Worked this time.");
});
Dans l'éditeur, consultez également le fichier rebuildService.sh. Ce fichier utilise Cloud Build pour créer un conteneur Docker, puis crée (ou met à jour) une application Cloud Run à l'aide du conteneur. Le service Cloud Run est compatible avec l'accès anonyme, contient plusieurs libellés pour les phases et les services, et n'autorise que jusqu'à cinq connexions simultanées sur une instance d'exécution.
Retournez dans la fenêtre Cloud Shell. Si Cloud Shell n'est pas visible, cliquez sur Ouvrir le terminal.
Créez le conteneur et démarrez l'application Cloud Run en exécutant le fichier :
sh rebuildService.sh
Cette opération prend une à deux minutes.
Dans Cloud Shell, le message final contient l'URL de votre nouveau service. Cliquez sur le lien pour tester l'application dans un nouvel onglet. Il renvoie une réponse simple "Hello World!".
Dans la fenêtre de terminal Cloud Shell, créez une variable d'environnement d'URL et définissez sa valeur sur l'URL de votre application :
URL=$(gcloud run services list --platform managed --format="value(URL)" | grep hello-logging)
Vérifiez que la variable a bien été créée en renvoyant sa valeur :
echo $URL
Exécutez une boucle bash while pour générer la charge sur la route random-error de l'application. Assurez-vous que les messages (principalement "Worked this time" [Tâche effectuée cette fois]) commencent à s'afficher. Si ce n'est pas le cas, vérifiez que votre application est en cours d'exécution et que la propriété d'URL est correctement définie :
while true; \
do curl -s $URL/random-error \
-w '\n' ;sleep .1s;done
Tâche 2 : Explorer les fichiers journaux d'une application test
Vous disposez maintenant d'une application déployée sur Cloud Run qui, en fonction de l'URL, peut simplement se connecter, se connecter via Winston ou générer des rapports d'erreurs. Prenez quelques minutes pour explorer ces journaux.
Dans la console Google Cloud, sélectionnez le menu de navigation () puis cliquez sur Logging > Explorateur de journaux.
Activez Afficher la requête et supprimez toutes les requêtes par défaut.
Dans le menu déroulant Ressource, sélectionnez le service Cloud Run en accédant à Révision dans Cloud Run > hello-logging. N'oubliez pas d'appliquer votre sélection. Sinon, les résultats ne seront pas filtrés selon cette ressource.
Cliquez sur Exécuter la requête.
Vous ne voyez probablement que des messages 200 ayant abouti. Comment identifier les erreurs ? Vous pouvez exclure toutes les réponses 200 et voir celles qui restent.
Pour ce faire, cliquez sur l'un des codes d'état 200, puis sélectionnez Masquer les entrées correspondantes.
Bien que cette solution ne soit pas parfaite, elle vous permet de rechercher les messages de journal associés à l'erreur et les traces de piles générées par cette erreur.
Utilisez les champs de journal pour filtrer les messages afin de n'afficher que ceux dont le niveau de gravité est défini sur Erreur.
Les réponses s'affichent maintenant lorsqu'une erreur est générée.
Développez et explorez l'une des entrées. Identifiez le fichier journal contenant les erreurs 500. Lorsque vous avez terminé, effacez le filtre de niveau de gravité "Erreur".
Pour afficher les traces de piles (informations pouvant particulièrement intéresser les développeurs), filtrez le journal d'erreurs standard run.googleapis.com/stderr à l'aide de champs de journal.
Cette opération permet d'afficher les exceptions, mais où celles-ci commencent-elles ?
Il est intéressant de consulter à la fois le journal stderr contenant les traces de piles et le journal des requêtes avec les erreurs d'état 500. Pour cela, suivez ces étapes :
Cliquez sur le Générateur de requêtes et sélectionnez Nom du journal.
Sélectionnez à la fois les journaux des requêtes et stderr de Cloud Run, puis appliquez-les à la requête.
Sélectionnez Exécuter la requête.
Remarque : L'affichage des erreurs d'état 500 prend 10 à 12 minutes.
Prenez quelques minutes pour explorer les journaux affichés. Vous voyez maintenant la réponse renvoyant l'erreur à la requête du client et la prochaine trace de pile envoyée à stderr.
Tâche 3 : Créer et utiliser une métrique basée sur les journaux
Vous venez de consulter le fichier journal du service Cloud Run et d'examiner une entrée d'erreur. Que se passe-t-il si vous effectuez une journalisation personnalisée qui n'est pas nécessairement liée à une erreur et que vous souhaitez créer une métrique personnalisée basée sur celle-ci ? Dans cette partie de l'exercice, vous allez modifier la boucle afin d'appeler la route /score, puis vous allez créer une métrique à partir des scores obtenus.
Dans cette tâche, vous allez :
générer une charge sur le point de terminaison /score ;
explorer les journaux générés par la charge ;
modifier le code pour afficher le message dans un format plus facile à utiliser ;
créer une métrique basée sur les journaux.
Générer une charge sur le point de terminaison /score
Revenez à Cloud Shell ou ouvrez-le à nouveau.
Appuyez sur CTRL+C pour interrompre votre boucle de test.
Modifiez la boucle while pour appeler la route /score, puis redémarrez la boucle. Vérifiez que les nouveaux messages affichent des scores aléatoires :
while true; \
do curl -s $URL/score \
-w '\n' ;sleep .1s;done
Explorer les journaux générés par la charge
Accédez à la console Google Cloud, puis rouvrez la page Logging > Explorateur de journaux.
Supprimez toute requête existante et affichez vos journaux Révision dans Cloud Run > hello-logging à l'aide du menu Ressource.
Cliquez sur Appliquer.
Sélectionnez Exécuter la requête.
Les entrées avec le code d'état 200 doivent provenir de la dernière exécution du test. Si ce n'est pas le cas, actualisez la vue des journaux en cliquant sur Heure actuelle.
Développez l'une des entrées avec un code d'état 200.
Comment savoir si elle provient d'une requête /score ? Pourquoi le score ne s'affiche-t-il pas dans l'entrée de journal ?
Filtrez le journal run.googleapis.com/stdout à l'aide de l'explorateur de champs de journaux.
Vous devriez maintenant voir tous les messages affichés par le code. Pourquoi est-il difficile de créer une métrique affichant les scores de cette entrée ?
Il serait préférable que les messages soient générés sous forme de texte JSON structuré plutôt que sous forme de texte non structuré. Ainsi, vous pourrez facilement consulter et extraire les scores dans notre métrique basée sur les journaux.
Dans la fenêtre du terminal Cloud Shell, appuyez sur CTRL+C pour interrompre la boucle de test while.
Modifier le format du journal pour accéder plus facilement au score
Ouvrez le fichier index.js dans l'éditeur Cloud Shell, puis recherchez le code de la route /score (autour de la ligne 90).
Remplacez la route /score par le code ci-dessous :
//Basic NodeJS app built with the express server
app.get('/score', (req, res) => {
//Random score, the containerID is a UUID unique to each
//runtime container (testing was done in Cloud Run).
//funFactor is a random number 1-100
let score = Math.floor(Math.random() * 100) + 1;
let output = {
message: '/score called',
score: score,
containerID: containerID,
funFactor: funFactor
};
console.log(JSON.stringify(output));
//Basic message back to browser
res.send(`Your score is a ${score}. Happy?`);
});
Notez que le contenu du message correspond désormais aux propriétés de l'objet output et que le message affiché correspond à l'objet JSON concaténé.
Comme vous avez modifié le code, assurez-vous de n'avoir introduit aucune erreur en démarrant l'application en local dans Cloud Shell.
Dans la fenêtre du terminal Cloud Shell, installez les dépendances et démarrez l'application. Vérifiez que vous êtes bien dans le dossier HelloLoggingNodeJS :
export GCLOUD_PROJECT=$DEVSHELL_PROJECT_ID
cd ~/HelloLoggingNodeJS/
npm i
npm start
Si le message "Hello world listening on port 8080" (L'application Hello World écoute sur le port 8080) s'affiche, appuyez sur CTRL+C pour arrêter l'application et passer à l'étape suivante. Si vous constatez des erreurs, corrigez-les et assurez-vous que l'application démarre avant de continuer.
Recréez et redéployez l'application en exécutant à nouveau rebuildService.sh :
sh rebuildService.sh
Attendez que l'application soit recréée et redéployée, puis redémarrez la boucle de test :
while true; \
do curl -s $URL/score \
-w '\n' ;sleep .1s;done
Vérifiez que les messages de scores s'affichent à nouveau.
Dans l'onglet du navigateur affichant l'explorateur de journaux, cliquez sur Heure actuelle pour afficher les journaux les plus récents.
Les entrées doivent être filtrées pour que vous puissiez afficher les journaux Cloud Run stdout de hello-logging.
Développez l'une des entrées et examinez le nouveau format.
Créer une métrique basée sur les journaux de scores
Cliquez sur Créer une métrique et renseignez les champs ci-dessous comme suit :
Type de métrique : Distribution
Nom de la métrique de journal : score_averages
Unités : 1
Nom du champ : jsonPayload.score
Cliquez sur le lien PARAMÈTRES AVANCÉS et renseignez les champs ci-dessous comme suit :
Type : Linéaire
Valeur de début : 0
Nombre de buckets : 20
Largeur des buckets : 5
Cliquez sur Créer une métrique.
Accédez à Monitoring > Dashboards (Monitoring > Tableaux de bord) à l'aide du menu de navigation (). Vous devrez peut-être patienter pendant la création de l'espace de travail.
Cliquez sur + Créer un tableau de bord.
Dans le champ Nom du nouveau tableau de bord, saisissez Score Fun.
Cliquez sur Graphiques en courbes.
Définissez le titre du graphique sur Score Info.
Dans la section Ressource et métrique, sélectionnez Révision dans Cloud Run > Métriques basées sur les journaux > logging/user/score_averages.
Cliquez sur Appliquer.
L'aligneur a été défini par défaut sur le 50e centile. Si ce n'est pas le cas, définissez-le sur le 50e centile (médiane).
Tâche 4 : Exporter les journaux de l'application dans BigQuery
L'exportation de journaux dans BigQuery permet non seulement de stocker les journaux plus longtemps, mais également de les analyser à l'aide de SQL et de la puissance de BigQuery. Dans cette tâche, vous allez configurer une exportation de journaux Cloud Run vers BigQuery et vous en servir pour rechercher les messages d'erreur générés par la route random-error de l'application.
Dans cette tâche, vous allez effectuer l'opération suivante :
Configurer une exportation de journaux dans BigQuery
Configurer un récepteur d'exportations dans BigQuery
Accédez à la fenêtre Cloud Shell avec la boucle while envoyant des charges à notre application et appuyez sur CTRL+C pour interrompre la boucle.
Modifiez la boucle while de manière à envoyer à nouveau la charge sur la route random-error. Réexécutez la boucle :
while true; \
do curl -s $URL/random-error \
-w '\n' ;sleep .1s;done
Utilisez le menu de navigation de la console Google Cloud pour accéder à Logging > Explorateur de journaux.
Supprimez toute requête existante et exécutez une requête pour afficher les journaux Révision dans Cloud Run > hello-logging à l'aide du menu Ressource.
Cliquez sur Appliquer.
Développez une ou deux entrées, et vérifiez qu'elles sont associées aux requêtes /random-error.
Créez un récepteur en accédant à Autres actions > Créer un récepteur.
Configurez le nom du récepteur sur hello-logging-sink.
Cliquez sur Suivant.
Définissez le service du récepteur sur Ensemble de données BigQuery.
Sélectionnez Créer un ensemble de données BigQuery pour l'ensemble de données BigQuery.
Pour l'ID d'ensemble de données, saisissez hello_logging_logs.
Cliquez sur CRÉER UN ENSEMBLE DE DONNÉES.
Cliquez sur Suivant.
Dans Choisissez des journaux à inclure dans le récepteur, cliquez sur Suivant.
Cliquez sur CRÉER UN RÉCEPTEUR. Lorsque vous créez un récepteur, notez qu'il crée un compte de service permettant d'écrire des données dans le nouvel ensemble de données BigQuery.
Accédez à BigQuery à l'aide du menu de navigation.
Dans la section Explorateur, développez le nœud de vos projets et l'ensemble de données hello_logging_logs.
Cliquez sur la table requests.
Dans la boîte de dialogue à onglets située sous la fenêtre de requête, cliquez sur l'onglet Aperçu et explorez les informations de ce journal. Il s'agit d'informations générales axées sur la requête : quelle URL a été demandée, quand et depuis quel emplacement.
Cliquez sur l'onglet Schéma et examinez le schéma de la table générée. Notez que les structures de données imbriquées et répétées sont utilisées pour des colonnes telles que resource et httpRequest.
Sélectionnez la table stderr.
Les erreurs "Standard out" et "Standard" sont couramment utilisées par les applications pour différencier les messages de journal simples des messages associés à une erreur. Les applications Node.js vont vider toutes les informations liées aux exceptions et aux erreurs non détectées dans l'erreur standard.
Remarque : Patientez 5 à 10 minutes si la table stderr ne s'affiche pas.
Prévisualisez à nouveau les données de la table. Vous voyez maintenant les erreurs aléatoires qui affectent différentes parties de la pile d'appel de la requête. Les entrées dont le champ textPayload contient ReferenceError correspondent aux erreurs réelles.
Cliquez sur l'onglet Schema (Schéma) et examinez la structure réelle de la table. Là encore, vous voyez à la fois des champs répétés standards et imbriqués.
Créez et exécutez une requête pour extraire uniquement les champs textPayload commençant par ReferenceError :
Démarrez la requête en cliquant sur le bouton Interroger.
Modifiez la requête SELECT de sorte qu'elle extraie textPayload.
Ajoutez ensuite la clause where.
Remplacez [project-id] par l'ID de votre projet GCP et [date] par la date spécifiée dans le nom de la table :
SELECT
textPayload
FROM
`[project-id].hello_logging_logs.run_googleapis_com_stderr_[date]`
WHERE
textPayload LIKE 'ReferenceError%'
Modifiez la requête pour comptabiliser ces entrées :
Exécutez à nouveau la requête et vérifiez le nombre que vous recevez.
Remplacez [project-id] par l'ID de votre projet GCP et [date] par la date spécifiée dans le nom de la table :
SELECT
count(textPayload)
FROM
`[project-id].hello_logging_logs.run_googleapis_com_stderr_[date]`
WHERE
textPayload LIKE 'ReferenceError%'
Pour vérifier le pourcentage d'erreur, créez une requête qui compare le nombre total de requêtes à celui des requêtes ReferenceError%.
Remplacez [project-id] par l'ID de votre projet GCP et [date] par la date spécifiée dans le nom de la table.
L'erreur est-elle de type 1/1000 ?
SELECT
errors / total_requests
FROM (
SELECT
(
SELECT
COUNT(*)
FROM
`[project-id].hello_logging_logs.run_googleapis_com_requests_[date]`) AS total_requests,
(
SELECT
COUNT(textPayload)
FROM
`[project-id].hello_logging_logs.run_googleapis_com_stderr_[date]`
WHERE
textPayload LIKE 'ReferenceError%') AS errors)
Félicitations !
Dans cet exercice, vous avez utilisé une application test pour générer des journaux, créé des métriques basées sur ces journaux avec leurs données et exporté les journaux dans BigQuery. Bravo.
Terminer l'atelier
Une fois l'atelier terminé, cliquez sur Terminer l'atelier. Google Cloud Skills Boost supprime les ressources que vous avez utilisées, puis efface le compte.
Si vous le souhaitez, vous pouvez noter l'atelier. Sélectionnez un nombre d'étoiles, saisissez un commentaire, puis cliquez sur Envoyer.
Le nombre d'étoiles correspond à votre degré de satisfaction :
1 étoile = très insatisfait(e)
2 étoiles = insatisfait(e)
3 étoiles = ni insatisfait(e), ni satisfait(e)
4 étoiles = satisfait(e)
5 étoiles = très satisfait(e)
Si vous ne souhaitez pas donner votre avis, vous pouvez fermer la boîte de dialogue.
Pour soumettre des commentaires, suggestions ou corrections, veuillez accéder à l'onglet Assistance.
Copyright 2020 Google LLC Tous droits réservés. Google et le logo Google sont des marques de Google LLC. Tous les autres noms d'entreprises et de produits peuvent être des marques des entreprises auxquelles ils sont associés.
Les ateliers créent un projet Google Cloud et des ressources pour une durée déterminée.
Les ateliers doivent être effectués dans le délai imparti et ne peuvent pas être mis en pause. Si vous quittez l'atelier, vous devrez le recommencer depuis le début.
En haut à gauche de l'écran, cliquez sur Démarrer l'atelier pour commencer.
Utilisez la navigation privée
Copiez le nom d'utilisateur et le mot de passe fournis pour l'atelier
Cliquez sur Ouvrir la console en navigation privée
Connectez-vous à la console
Connectez-vous à l'aide des identifiants qui vous ont été attribués pour l'atelier. L'utilisation d'autres identifiants peut entraîner des erreurs ou des frais.
Acceptez les conditions d'utilisation et ignorez la page concernant les ressources de récupération des données.
Ne cliquez pas sur Terminer l'atelier, à moins que vous n'ayez terminé l'atelier ou que vous ne vouliez le recommencer, car cela effacera votre travail et supprimera le projet.
Ce contenu n'est pas disponible pour le moment
Nous vous préviendrons par e-mail lorsqu'il sera disponible
Parfait !
Nous vous contacterons par e-mail s'il devient disponible
Un atelier à la fois
Confirmez pour mettre fin à tous les ateliers existants et démarrer celui-ci
Utilisez la navigation privée pour effectuer l'atelier
Ouvrez une fenêtre de navigateur en mode navigation privée pour effectuer cet atelier. Vous éviterez ainsi les conflits entre votre compte personnel et le compte temporaire de participant, qui pourraient entraîner des frais supplémentaires facturés sur votre compte personnel.
Au cours de cet exercice, vous allez apprendre à générer des messages de journal à partir d'une application, à les filtrer et à les analyser, ainsi qu'à suivre et à corriger les erreurs signalées.
Durée :
0 min de configuration
·
Accessible pendant 90 min
·
Terminé après 90 min