1. Introduction
Dans cet atelier de programmation, vous apprendrez à exploiter les outils de journalisation et de surveillance disponibles pour tous les développeurs qui travaillent avec Cloud Functions. Ces outils sont fournis avec chaque fonction Cloud que vous déployez dans tous les langages compatibles. Ils devraient vous permettre d'être plus productif lors de l'écriture et de l'exploitation de votre code sans serveur.
Vous allez utiliser une fonction Cloud déclenchée par HTTP, mais tout ce que vous aborderez s'applique également à d'autres langages et à Cloud Functions déclenchés par d'autres événements.
2. Préparation
Configuration de l'environnement au rythme de chacun
- Connectez-vous à Cloud Console, puis créez un projet ou réutilisez un projet existant. (Si vous n'avez pas encore de compte Gmail ou G Suite, vous devez en créer un.)
Mémorisez l'ID du projet. Il s'agit d'un nom unique permettant de différencier chaque projet Google Cloud (le nom ci-dessus est déjà pris ; vous devez en trouver un autre). Il sera désigné par le nom PROJECT_ID
tout au long de cet atelier de programmation.
- Vous devez ensuite activer la facturation dans Cloud Console pour pouvoir utiliser les ressources Google Cloud.
L'exécution de cet atelier de programmation est très peu coûteuse, voire gratuite. Veillez à suivre les instructions de la section "Nettoyer" qui indique comment désactiver les ressources afin d'éviter les frais une fois ce tutoriel terminé. Les nouveaux utilisateurs de Google Cloud peuvent participer au programme d'essai sans frais pour bénéficier d'un crédit de 300 $.
Cloud Shell
Si Cloud Functions et ses fonctionnalités de journalisation et de surveillance peuvent être utilisés à distance depuis votre ordinateur portable, vous allez utiliser Cloud Shell, un environnement de ligne de commande exécuté dans Google Cloud.
Cette machine virtuelle basée sur Debian contient tous les outils de développement dont vous aurez besoin. Elle intègre 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. Cela signifie que tout ce dont vous avez besoin pour cet atelier de programmation est un navigateur (oui, tout fonctionne sur un Chromebook).
- Pour activer Cloud Shell à partir de Cloud Console, cliquez simplement sur Activer Cloud Shell (l'opération de provisionnement et la connexion à l'environnement ne devraient prendre que quelques minutes).
Une fois connecté à Cloud Shell, vous êtes normalement déjà authentifié et le projet PROJECT_ID
est sélectionné :
gcloud auth list
Résultat de la commande
Credentialed accounts: - <myaccount>@<mydomain>.com (active)
gcloud config list project
Résultat de la commande
[core] project = <PROJECT_ID>
Si, pour une raison quelconque, le projet n'est pas défini, exécutez simplement la commande suivante :
gcloud config set project <PROJECT_ID>
Vous recherchez votre PROJECT_ID
? Vérifiez l'ID que vous avez utilisé pendant les étapes de configuration ou recherchez-le dans le tableau de bord Cloud Console :
Par défaut, Cloud Shell définit certaines variables d'environnement qui pourront s'avérer utiles pour exécuter certaines commandes dans le futur.
echo $GOOGLE_CLOUD_PROJECT
Résultat de la commande
<PROJECT_ID>
- Pour finir, définissez la configuration du projet et de la zone par défaut :
gcloud config set compute/zone us-central1-f
Vous pouvez choisir parmi différentes zones. Pour en savoir plus, consultez la page Régions et zones.
3. Déployer une fonction Cloud simple
Pour avoir un élément à surveiller, créez une application "Hello, World" Cloud Functions. Dans le menu de gauche de la console Google Cloud, cliquez sur Cloud Functions, puis sur Créer une fonction.
Saisissez "hello-monitor" comme nom de votre nouvelle fonction Cloud.
Conservez les valeurs par défaut du code source. (Vous pouvez toutefois choisir un autre langage/environnement d'exécution si vous le souhaitez.)
Pour finir, cliquez sur Créer.
Votre fonction Cloud doit être listée avec une coche verte à côté, ce qui signifie qu'elle est prête à être appelée.
4. Tester la fonction Cloud et envoyer du trafic à l'aide d'un générateur de charge
Maintenant que la fonction Cloud a été déployée, testez-la à partir de la ligne de commande.
Tout d'abord, à l'aide de Cloud Shell, émettez la commande suivante:
$ gcloud functions describe hello-monitor
Cela devrait renvoyer une description de la fonction Cloud, y compris une URL pour httpsTrigger
, qui est le point de terminaison HTTP(S) permettant d'appeler la fonction Cloud. Il doit se présenter comme suit: https://<region>-<project-id>.cloudfunctions.net/hello-monitor.
Pour déclencher la fonction Cloud, il suffit désormais d'utiliser la commande curl
sur cette URL.
$ curl https://<region>-<project-id>.cloudfunctions.net/hello-monitor Hello World!
Utilisez maintenant Vegeta, un simple outil de test de charge HTTP. Pour l'installer, saisissez simplement la commande suivante à partir de Cloud Shell :
$ go get -u github.com/tsenart/vegeta
Pour envoyer du trafic vers votre fonction Cloud (cinq requêtes par seconde pendant quelques minutes), utilisez la commande suivante:
$ echo "GET https://<region>-<project-id>.cloudfunctions.net/hello-monitor" \ | vegeta attack -rate=5 -duration=120s \ > results.bin
5. Parcourir les journaux
Dans la vue détaillée de la fonction Cloud, cliquez sur Afficher les journaux.
Vous devriez être redirigé vers la section Stackdriver Logging de votre projet, qui n'affiche que vos journaux Cloud Functions.
Toutes les requêtes adressées à votre fonction Cloud doivent renvoyer un code d'état 200.
Lorsque vous affichez les journaux, vous pouvez effectuer les opérations suivantes:
- Filtrez par niveau de journalisation (dans votre cas, tous les journaux sont au niveau
debug
). - Sélectionnez une période spécifique (relative ou absolue).
- Activez la diffusion des journaux (avec Lecture en haut de l'écran).
- Copiez un lien vers l'entrée de journal (pour le partager avec les membres de l'équipe).
- Afficher une entrée de journal dans le contexte d'une ressource
- Épinglez une entrée de journal (en tant que repère visuel).
- Exportez les journaux vers BigQuery, Cloud Storage ou Pub/Sub (ou téléchargez-les simplement sous forme de fichiers JSON ou CSV).
6. Mettre à jour la fonction
Dans la console Cloud, accédez à la vue Informations sur la fonction et observez le pic que vous avez créé avec votre testeur de charge concernant le nombre d'appels par seconde et leur durée d'exécution.
Stackdriver Trace est un autre outil plus détaillé permettant d'observer la latence et les appels RPC. Toutefois, avant de pouvoir l'utiliser, vous devez apporter quelques modifications à vos fonctions Cloud. Procédez comme suit :
- Ajoutez le package
node-emoji
qui sauve des vies en tant que dépendance. - Mettez à jour le code de la fonction pour utiliser le module node-emoji et introduire une certaine latence.
- Ajoutez une variable d'environnement afin d'activer Stackdriver Trace pour Cloud Functions.
Dans Informations sur la fonction, cliquez sur Modifier pour modifier la fonction.
Modifiez le fichier package.json
afin d'ajouter une dépendance pour le package node-emoji
.
{
"name": "sample-http",
"version": "0.0.1",
"dependencies": {
"node-emoji": "^1.8.1"
}
}
Modifiez la fonction en remplaçant le contenu de index.js
par ce qui suit:
const emoji = require('node-emoji');
exports.helloWorld = (req, res) => {
let message = req.query.message || req.body.message || 'Hello World!';
// add some latency, functions are too quick!
setTimeout(function() {
message += emoji.random().emoji;
res.status(200).send(message);
}, (3 * 100)); // 300ms
};
Cela ajoute un emoji aléatoire au message renvoyé par la fonction Cloud après une pause de 300 millisecondes.
Enfin, ajoutez une variable d'environnement de la fonction Cloud appelée GOOGLE_CLOUD_TRACE_ENABLED
et définissez-la sur true
comme suit:
Cliquez sur Enregistrer.
Retournez dans Cloud Shell et rappelez la commande permettant de générer une charge sur la fonction Cloud que vous venez de déployer:
$ echo "GET https://<region>-<project-id>.cloudfunctions.net/hello-monitor" \ | vegeta attack -rate=5 -duration=120s \ > results.bin
Vous êtes maintenant prêt à observer la liste des traces produites sans aucune autre configuration ni bibliothèque de traçage spécifique dans votre code.
7. Tracer la fonction Cloud mise à jour
Dans le menu de gauche, accédez à Liste de traces (sous Stackdriver Trace).
La capture d'écran suivante doit s'afficher:
Il est donc évident que la latence introduite dans votre fonction Cloud est en effet mesurée à 300 millisecondes.
Chaque point du graphique est une requête pour laquelle vous pouvez afficher des informations détaillées, telles que l'horodatage, la méthode et l'état HTTP, ses étiquettes, un lien vers l'entrée de journal correspondante et tout appel RPC ultérieur effectué par la fonction Cloud.
Pour effectuer un zoom avant, il vous suffit de cliquer sur le graphique et de le faire glisser.
Pour faire un zoom arrière, cliquez sur Annuler le zoom en haut de la page.
Comme vous avez déployé une seule fonction Cloud, le graphique n'affiche que les requêtes GET
sur l'URI hello-monitor
, mais vous pouvez filtrer les traces par méthode HTTP (GET, POST, DELETE) par état HTTP (2XX, 3XX) ou à l'aide du filtre de requête.
Accédez à Vue d'ensemble dans le menu de gauche:
Sur cette page de présentation, vous trouverez les traces récentes et d'autres insights.
Vous pouvez également créer des rapports personnalisés en fonction d'un filtre de requête URI, d'une méthode HTTP, d'un état HTTP et d'une période. Il vous permet même de comparer les valeurs générées à une référence temporelle.
Si vous parvenez à configurer les bonnes périodes avec suffisamment de points de données, vous pouvez générer un rapport indiquant le changement de latence important entre la fonction Cloud initiale et la nouvelle.
Ce rapport personnalisé permet de déterminer quand un problème de performances a été introduit et de suivre un indicateur de niveau de service (SLI), comme la latence des requêtes de l'utilisateur final.
8. Il est temps de nettoyer les ressources
Voilà qui conclut cet atelier de programmation.
Bien que Cloud Functions et les outils Stackdriver soient des plates-formes sans serveur qui n'entraînent aucun coût lorsqu'ils ne sont pas utilisés, soyez un bon citoyen du cloud et supprimez votre fonction Cloud. Il suffit de sélectionner hello-monitor
dans Overview (Aperçu) sous Cloud Functions, puis de cliquer sur Delete (Supprimer).
9. Étape suivante
Voici quelques lectures complémentaires:
/