1. Introduction
Dans cet atelier de programmation, vous allez apprendre à utiliser les outils de journalisation et de surveillance mis à la disposition de 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 lorsque vous écrivez et exécutez votre code sans serveur.

Vous utiliserez une fonction Cloud Functions déclenchée par HTTP, mais tout ce que vous apprendrez s'appliquera également aux autres langages et aux fonctions Cloud Functions déclenchées 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 sans frais. 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
Bien que Cloud Functions, ainsi que ses fonctionnalités de journalisation et de surveillance, puissent ê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 quelque chose à surveiller, créez une fonction Cloud "Hello, World". 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 toutes les valeurs par défaut pour le code source. (Toutefois, vous pouvez choisir une autre langue/un autre environnement d'exécution si vous le souhaitez.)

Pour finir, cliquez sur Créer.

Votre fonction Cloud devrait s'afficher 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 avec succès, testez-la depuis la ligne de commande.
Tout d'abord, à l'aide de Cloud Shell, exécutez la commande suivante :
$ gcloud functions describe hello-monitor
Une description de la fonction Cloud devrait s'afficher, y compris une URL pour httpsTrigger, qui est le point de terminaison HTTP(S) permettant d'appeler la fonction Cloud. Il devrait ressembler à ceci : https://<region>-<project-id>.cloudfunctions.net/hello-monitor.
Le déclenchement de la fonction Cloud devrait maintenant être aussi simple que l'utilisation de la commande curl sur cette URL.
$ curl https://<region>-<project-id>.cloudfunctions.net/hello-monitor Hello World!
Utilisez maintenant Vegeta, un outil simple de test de charge HTTP. Pour l'installer, saisissez simplement la commande suivante dans Cloud Shell :
$ go get -u github.com/tsenart/vegeta
Pour envoyer du trafic à 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 votre fonction Cloud, cliquez sur Afficher les journaux.

Vous devriez être redirigé vers la section Stackdriver Logging de votre projet, qui n'affiche que les journaux de votre fonction Cloud.

Toutes les requêtes adressées à votre fonction Cloud doivent renvoyer un code d'état 200.
Lorsque vous consultez les journaux, vous pouvez effectuer les opérations suivantes :
- Filtrez par niveau de journal (dans votre cas, tous les journaux sont de niveau
debug). - Sélectionnez une période spécifique (relative ou absolue).
- Activez la diffusion des journaux (avec Play
en haut de l'écran). - Copiez un lien vers l'entrée de journal (pour le partager avec les membres de votre équipe).
- Affichez une entrée de journal dans le contexte de la ressource.
- Épinglez une entrée de journal (comme repère visuel).
- Exportez les journaux vers BigQuery, Cloud Storage ou Pub/Sub (ou téléchargez-les simplement au format JSON ou CSV).
6. Mettre à jour la fonction
Dans la console Cloud, accédez à la vue Détails de la fonction et observez le pic que vous avez créé avec votre outil de test de charge dans 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-emojiqui peut vous sauver la vie 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 pour activer Stackdriver Trace pour Cloud Functions.
Dans Détails de la fonction, cliquez sur Modifier pour modifier la fonction.

Modifiez le fichier package.json pour 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 le code suivant :
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 fonction Cloud appelée GOOGLE_CLOUD_TRACE_ENABLED et définissez-la sur true comme suit :

Cliquez sur Enregistrer.
Revenez à Cloud Shell et rappelez la commande permettant de générer une charge sur la fonction Cloud nouvellement déployée :
$ 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 autre exigence de 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).

L'affichage doit ressembler à la capture d'écran suivante :

Vous devriez ainsi constater que la latence introduite dans votre fonction Cloud est bien mesurée à 300 millisecondes.
Chaque point du graphique correspond à 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 libellés, 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.
Étant donné que vous avez déployé une seule fonction Cloud, le graphique n'affiche que les requêtes GET sur l'URI hello-monitor. Toutefois, 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, vous trouverez les traces récentes et d'autres informations.

Vous pouvez également créer des rapports personnalisés en combinant un filtre de requête URI, une méthode HTTP, un état HTTP et une plage de dates. Il vous permet même de comparer les valeurs générées à une référence temporelle.

Si vous parvenez à configurer les plages de temps appropriées avec suffisamment de points de données, vous pouvez générer un rapport qui montre le décalage de latence important entre la fonction Cloud initiale et la nouvelle.


Ce type de rapport personnalisé peut être utilisé pour identifier le moment où un problème de performances a été introduit et pour suivre un indicateur de niveau de service (SLI), tel que la latence des requêtes des utilisateurs finaux.
8. Nettoyer les ressources
Cet atelier de programmation est terminé.
Bien que Cloud Functions et les outils Stackdriver soient des plates-formes sans serveur qui n'entraînent pas de frais lorsqu'elles ne sont pas utilisées, supprimez votre fonction Cloud pour être un bon citoyen du cloud. Il vous suffit de sélectionner hello-monitor dans Présentation sous Cloud Functions, puis de cliquer sur Supprimer.

9. Étape suivante
Pour en savoir plus :
/