Démarrage rapide

Dans ce guide de démarrage rapide, vous allez utiliser Cloud Shell pour déployer un exemple d'application sur un cluster Google Kubernetes Engine (GKE). L'application est écrite en Python. Après le déploiement, vous utilisez curl pour émettre une requête HTTP. Cette action entraîne la capture et l'envoi d'une trace à votre projet Google Cloud. Enfin, vous utilisez l'interface Cloud Trace pour afficher les informations de latence de la trace que vous avez générée.

Avant de commencer

  1. Connectez-vous à votre compte Google.

    Si vous n'en possédez pas déjà un, vous devez en créer un.

  2. Dans Cloud Console, sur la page de sélection du projet, sélectionnez ou créez un projet Cloud.

    Accéder à la page de sélection du projet

  3. Vérifiez que la facturation est activée pour votre projet Google Cloud. Découvrez comment vérifier que la facturation est activée pour votre projet.

Télécharger et déployer votre application

Pour télécharger et déployer l'application, procédez comme suit :

  1. Pour ouvrir Cloud Shell, cliquez sur Activer Cloud Shell dans la barre d'outils de Google Cloud Console :

    Activer Cloud Shell

    Après quelques instants, une session Cloud Shell s'ouvre dans Google Cloud Console :

    Session Cloud Shell

  2. Pour télécharger le code source depuis GitHub, exécutez la commande suivante :

    git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git
    
  3. Pour activer l'API Google Kubernetes Engine, exécutez la commande suivante dans Cloud Shell :

    gcloud services enable container.googleapis.com
    
  4. Pour créer le cluster GKE nommé demo, exécutez la commande suivante dans Cloud Shell :

    gcloud container clusters create demo --zone us-west1-b
    

    Cette commande nécessite 3 à 5 minutes. Une fois l'opération terminée, votre projet Google Cloud contient le cluster GKE nommé demo. Vous devez être autorisé à créer des clusters disposant d'un accès externe dans votre projet Google Cloud. Si Google Cloud se trouve dans une organisation ou dans un dossier, vous ne disposez peut-être pas de ces autorisations même si vous êtes le propriétaire du projet. Si cette commande échoue, contactez votre administrateur système.

  5. Pour vérifier que la création a réussi, exécutez la commande kubectl suivante :

    kubectl get nodes
    

    Voici un exemple de résultat de cette commande :

    NAME                                  STATUS   ROLES    AGE   VERSION
    gke-demo-default-pool-24680f3d-bzvg   Ready    <none>   26m   v1.14.10-gke.27
    gke-demo-default-pool-24680f3d-hfnq   Ready    <none>   26m   v1.14.10-gke.27
    gke-demo-default-pool-24680f3d-qnh6   Ready    <none>   26m   v1.14.10-gke.27
    
  6. Déployez l'exemple d'application en exécutant la commande suivante :

    cd python-docs-samples/trace/cloud-trace-demo-app && ./setup.sh
    

    Le script setup.sh, qui fait partie de ce projet, configure trois services différents nommés cloud-trace-demo-a, cloud-trace-demo-b et cloud-trace-demo-c. Étant donné que le script de configuration configure un service à la fois, la configuration nécessite plusieurs minutes. Voici un exemple de ce que le script imprime sur Cloud Shell lors de son exécution :

     Creating service a
     deployment.apps/cloud-trace-demo-a unchanged
     service/cloud-trace-demo-a unchanged
     Fetching the external IP of service a
     Passing external IP for the first service 34.82.132.95 to the second service template
     deployment.apps/cloud-trace-demo-b created
     service/cloud-trace-demo-b created
     Fetching the external IP of service b
     Passing external IP for the service b 35.230.0.131 to the service c
     deployment.apps/cloud-trace-demo-c created
     service/cloud-trace-demo-c created
     

Créer une trace

Une trace décrit le temps nécessaire à une application pour effectuer une seule opération. Chaque trace comprend un ou plusieurs délais. Un délai décrit le temps nécessaire pour effectuer une sous-opération complète. Par exemple, une trace peut décrire le temps nécessaire pour traiter une requête entrante d'un utilisateur et renvoyer une réponse. Un délai peut décrire la durée requise pour un appel RPC particulier. Pour en savoir plus, consultez le modèle de données de Cloud Trace.

Pour créer une trace, exécutez la commande suivante :

curl $(kubectl get svc cloud-trace-demo-c -ojsonpath='{.status.loadBalancer.ingress[0].ip}')

La commande curl génère une requête HTTP GET et envoie la requête au service nommé cloud-trace-demo-c. Une fois cette requête terminée, Helloworld! est imprimé dans l'interface système.

Vous pouvez exécuter la commande curl plusieurs fois pour générer plusieurs traces.

Afficher les données de trace

Pour ouvrir l'interface Cloud Trace, dans Google Cloud Console, cliquez sur Menu de navigation et sélectionnez Trace, ou cliquez sur le bouton suivant :

Accéder à Stackdriver Trace

Fenêtre Présentation

La fenêtre Vue d'ensemble est la vue par défaut dans Trace. Cette fenêtre affiche des données de latence et des informations récapitulatives, y compris un rapport d'analyse. Si vous avez créé un nouveau projet, le volet le plus intéressant de la fenêtre Présentation est celui intitulé Traces récentes :

Volet Traces récentes affichant les traces les plus récentes et leur latence.

Ce volet répertorie les traces les plus récentes et leur latence. Pour afficher les détails d'une trace, cliquez sur son lien.

Fenêtre Liste de traces

Dans le volet de navigation de Trace, cliquez sur Liste de traces :

Fenêtre Liste de traces pour le démarrage rapide.

Cette fenêtre affiche un graphique et une table. Chaque point du graphique représente une trace. Chaque point correspond également à une ligne dans la table. Dans la capture d'écran précédente, plusieurs traces sont répertoriées, ce qui indique que la commande curl a été exécutée plusieurs fois.

Pour afficher les détails d'une trace, sélectionnez un point dans le graphique ou une ligne dans la table. Cette action l'ouverture de deux volets qui affichent les détails de la trace sélectionnée :

Affichage en cascade pour le démarrage rapide.

Un volet affiche la trace dans un graphique en cascade et le volet affiche ses détails. Chaque ligne du graphique en cascade correspond à un délai. Les détails du délai, tels que ses libellés de trace, sa méthode et ses informations récapitulatives sur la latence de la commande, sont affichés dans le tableau de détails. Pour afficher les détails d'un délai, cliquez sur la ligne correspondante dans le graphique en cascade. Notez que les délais concernent trois adresses IP différentes, qui correspondent aux adresses IP des trois services. À partir de cette trace, vous pouvez constater qu'une requête HTTP reçue par le nom de service cloud-trace-demo-c est transmise au service cloud-trace-demo-b, puis cloud-trace-demo-a.

Le tableau des détails peut inclure un lien vers les données envoyées à Cloud Logging. Pour afficher les informations dans l'interface Cloud Logging, cliquez sur Afficher. La capture d'écran suivante illustre un exemple de journal généré par des données de trace :

LogEntry pour une trace du démarrage rapide.

Notez que les adresses IP affichées dans la vue en cascade correspondent aux adresses IP des services nommés cloud-trace-demo-a et cloud-trace-demo-b.

Fenêtre Rapports d'analyse

Pour afficher ou créer un rapport, dans le volet de navigation Trace, cliquez sur Rapports d'analyse. Trace crée automatiquement des rapports quotidiens. Pour ce projet, les données sont insuffisantes pour créer un rapport.

À propos de l'application

L'exemple d'application utilisé dans ce guide de démarrage rapide est disponible dans un dépôt GitHub. Ce dépôt contient des informations sur l'utilisation de l'application dans des environnements autres que Cloud Shell. L'exemple d'application est écrit en Python, utilise le framework Flask et les packages OpenCensus, et s'exécute sur un cluster Google Kubernetes Engine.

Les auteurs de l'application ont choisi d'utiliser le framework Flask, car son utilisation simplifie le développement d'applications et parce qu'ils voulaient utiliser le middleware OpenCensus Flask. Vous n'avez pas besoin d'utiliser le framework Flask si vous utilisez Python.

Instrumentation

Le fichier app.py du dépôt GitHub contient les outils nécessaires pour capturer et envoyer des données de trace à votre projet Google Cloud :

  • Les instructions d'importation d'application incluent une instruction pour Flask et pour plusieurs packages OpenCensus. Le StackdriverExporter est l'objet qui envoie des données de trace à votre projet Google Cloud :

    from flask import Flask
    from opencensus.ext.flask.flask_middleware import FlaskMiddleware
    from opencensus.ext.stackdriver.trace_exporter import StackdriverExporter
    from opencensus.trace import execution_context
    from opencensus.trace.propagation import google_cloud_format
    from opencensus.trace.samplers import AlwaysOnSampler
  • L'application crée un composant de middleware qui utilise Flask comme framework HTTP :

    propagator = google_cloud_format.GoogleCloudFormatPropagator()
    
    def createMiddleWare(exporter):
        # Configure a flask middleware that listens for each request and applies automatic tracing.
        # This needs to be set up before the application starts.
        middleware = FlaskMiddleware(
            app,
            exporter=exporter,
            propagator=propagator,
            sampler=AlwaysOnSampler())
        return middleware

    Dans cette application, le champ sampler est défini par la méthode OpenCensus AlwaysOnSampler(). Cette méthode renvoie True pour chaque décision d'échantillonnage et garantit que 100 % des requêtes sont tracées. L'échantillonnage de toutes les requêtes n'est pas recommandé dans un environnement de production. Pour en savoir plus, consultez la section Taux d'échantillonnage.

  • Dans la fonction main de l'application, créez le middleware Flask utilisant StackdriverExporter() :

    createMiddleWare(StackdriverExporter())
  • L'application contient une modification supplémentaire qui n'est pas nécessaire, mais plutôt illustrative. Dans l'application, la réponse à la route / inclut l'en-tête X-Cloud-Trace-Context :

    trace_context_header = propagator.to_header(execution_context.get_opencensus_tracer().span_context)
    response = requests.get(
        url,
        params=data,
        headers={
          'X-Cloud-Trace-Context' : trace_context_header}
    )

    L'en-tête X-Cloud-Trace-Context est un en-tête HTTP qui contient des informations sur la trace actuelle, y compris son identifiant. Pour que différents services puissent ajouter des informations de délai à la même trace, ces services doivent pouvoir identifier l'identifiant de trace. Par défaut, le package OpenCensus inclut automatiquement ce contexte dans les en-têtes de réponse.

Fonctionnement de l'application

Pour plus de clarté, dans cette section, cloud-trace-demo est omis des noms de service. Par exemple, le service cloud-trace-demo-c est référencé en tant que c.

Cette application crée trois services nommés a, b et c. Elle configure le service c pour appeler le service b, et le service b pour appeler le service a. Pour en savoir plus sur la configuration des services, consultez les fichiers YAML du dépôt GitHub.

Lorsque vous avez envoyé une requête HTTP au service c dans ce démarrage rapide, vous avez utilisé la commande curl suivante :

curl $(kubectl get svc cloud-trace-demo-c -ojsonpath='{.status.loadBalancer.ingress[0].ip}')

La commande curl fonctionne comme suit :

  1. kubectl récupère l'adresse IP du service nommé cloud-trace-demo-c.
  2. La commande curl envoie ensuite la requête HTTP au service c.
  3. Le service c reçoit la requête HTTP et envoie une requête au service b.
  4. Le service b reçoit la requête HTTP et envoie une requête au service a.
  5. Le service a reçoit la requête et renvoie la chaîne Hello. La chaîne Hello est un mot clé transmis en tant qu'argument par défaut à ce service.
  6. Le service b reçoit la réponse du service a, ajoute la chaîne world, puis renvoie Helloworld. La chaîne world est un mot clé transmis en tant qu'argument par défaut à ce service.
  7. Le service c reçoit la réponse du service b, ajoute !, puis renvoie Helloworld!.
  8. La réponse du service c est imprimée dans Cloud Shell.

Nettoyer

Pour éviter que les ressources utilisées dans ce guide démarrage rapide soient facturées sur votre compte Google Cloud :

  • Si vous avez créé un projet Google Cloud pour ce démarrage rapide, supprimez-le pour ne plus générer de frais. Pour supprimer votre projet, procédez comme suit :

    1. Dans Google Cloud Console, cliquez sur Menu de navigation, puis sélectionnez Accueil.
    2. Dans le volet Informations sur le projet, cliquez sur Accéder aux paramètres du projet.
    3. Dans la fenêtre Paramètres, cliquez sur Arrêter, puis suivez les étapes restantes.
  • Si vous n'avez pas créé de projet Google Cloud pour ce démarrage rapide, supprimez le cluster Google Kubernetes Engine nommé demo en exécutant la commande suivante :

    gcloud container clusters delete demo --zone us-west1-b
    

Étape suivante