Affichez la latence des requêtes d'application

Découvrez comment collecter et afficher les données de latence de vos applications:

  1. Créer un cluster Google Kubernetes Engine (GKE) à l'aide de la Google Cloud CLI

  2. Téléchargez et déployez un exemple d'application sur votre cluster.

  3. Créer une trace en envoyant une requête HTTP à l'exemple d'application

  4. Affichez les informations de latence de la trace que vous avez créée.

  5. effectuer un nettoyage.


Pour obtenir des instructions détaillées sur cette tâche directement dans la console Google Cloud, cliquez sur Visite guidée :

Visite guidée


Avant de commencer

  1. Les contraintes de sécurité définies par votre organisation peuvent vous empêcher d'effectuer les étapes suivantes. Pour obtenir des informations de dépannage, consultez la page Développer des applications dans un environnement Google Cloud limité.

  2. Connectez-vous à votre compte Google Cloud. Si vous débutez sur Google Cloud, créez un compte pour évaluer les performances de nos produits en conditions réelles. Les nouveaux clients bénéficient également de 300 $ de crédits gratuits pour exécuter, tester et déployer des charges de travail.
  3. Dans Google Cloud Console, sur la page de sélection du projet, sélectionnez ou créez un projet Google Cloud.

    Accéder au sélecteur de projet

  4. Vérifiez que la facturation est activée pour votre projet Google Cloud.

  5. Activer les API Google Kubernetes Engine and Cloud Trace.

    Activer les API

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

    Accéder au sélecteur de projet

  7. Vérifiez que la facturation est activée pour votre projet Google Cloud.

  8. Activer les API Google Kubernetes Engine and Cloud Trace.

    Activer les API

Créer un cluster GKE

  1. Dans la barre d'outils, cliquez sur Activer Cloud Shell, puis effectuez les étapes suivantes dans Cloud Shell.

  2. Créez un cluster :

    gcloud container clusters create cloud-trace-demo --zone us-central1-c
    

    La commande précédente, qui prend plusieurs minutes, crée un cluster standard nommé cloud-trace-demo dans la zone us-central1-c.

  3. Configurez kubectl pour actualiser automatiquement ses identifiants afin d'utiliser la même identité que la Google Cloud CLI:

    gcloud container clusters get-credentials cloud-trace-demo --zone us-central1-c
    
  4. Vérifiez l'accès à votre cluster:

    kubectl get nodes
    

    Voici un exemple de sortie pour cette commande :

    NAME                                              STATUS   ROLES    AGE   VERSION
    gke-cloud-trace-demo-default-pool-063c0416-113s   Ready    <none>   78s   v1.22.12-gke.2300
    gke-cloud-trace-demo-default-pool-063c0416-1n27   Ready    <none>   79s   v1.22.12-gke.2300
    gke-cloud-trace-demo-default-pool-063c0416-frkd   Ready    <none>   78s   v1.22.12-gke.2300
    

Télécharger et déployer une application

Téléchargez et déployez une application Python, qui utilise le framework Flask et le package OpenTelemetry. L'application est décrite dans la section À propos de l'application de cette page.

Dans Cloud Shell, procédez comme suit:

  1. Clonez une application Python depuis GitHub:

    git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git
    
  2. Exécutez la commande suivante pour déployer l'exemple d'application:

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

    L'exécution du script setup.sh prend plusieurs minutes.

    Le script configure trois services à l'aide d'une image prédéfinie, puis attend que toutes les ressources soient provisionnées. Les charges de travail sont nommées cloud-trace-demo-a, cloud-trace-demo-b et cloud-trace-demo-c.

    Voici un exemple de sortie pour cette commande :

    deployment.apps/cloud-trace-demo-a is created
    service/cloud-trace-demo-a is created
    deployment.apps/cloud-trace-demo-b is created
    service/cloud-trace-demo-b is created
    deployment.apps/cloud-trace-demo-c is created
    service/cloud-trace-demo-c is created
    
    Wait for load balancer initialization complete......
    Completed.
    

Créer des données de trace

Une trace décrit le temps nécessaire à une application pour effectuer une seule opération.

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

curl $(kubectl get svc -o=jsonpath='{.items[?(@.metadata.name=="cloud-trace-demo-a")].status.loadBalancer.ingress[0].ip}')

La réponse de la commande précédente se présente comme suit:

Hello, I am service A
And I am service B
Hello, I am service C

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

Afficher les données de latence

  1. Dans le panneau de navigation de la console Google Cloud, sélectionnez Trace, puis Explorateur de traces:

    Accéder à Explorateur de traces

    Chaque trace est représentée par un point dans le graphique et par une ligne dans la table.

    La capture d'écran suivante montre plusieurs traces:

    Fenêtre Explorateur Trace du guide de démarrage rapide.

  2. Pour afficher les détails d'une trace, sélectionnez un point dans le graphique ou une ligne dans la table.

    Le graphique à nuage de points est actualisé et le point que vous avez sélectionné est mis en évidence par un cercle autour de celui-ci. Tous les autres points représentant toutes les autres traces sont grisés.

    Un diagramme de Gantt affiche des informations sur la trace sélectionnée. La première ligne du diagramme de Gantt correspond à la trace, et il existe une ligne pour chaque délai de la trace. Un segment décrit le temps nécessaire pour exécuter une sous-opération complète.

    Le volet des détails affiche des informations supplémentaires sur chaque segment.

  3. Pour afficher des informations détaillées sur un segment, sélectionnez-le dans le diagramme de Gantt.

À 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 OpenTelemetry, et s'exécute sur un cluster GKE.

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 :

  • L'application importe plusieurs packages OpenTelemetry:

    from opentelemetry import trace
    from opentelemetry.exporter.cloud_trace import CloudTraceSpanExporter
    from opentelemetry.instrumentation.flask import FlaskInstrumentor
    from opentelemetry.instrumentation.requests import RequestsInstrumentor
    from opentelemetry.propagate import set_global_textmap
    from opentelemetry.propagators.cloud_trace_propagator import CloudTraceFormatPropagator
    from opentelemetry.sdk.trace import TracerProvider
    from opentelemetry.sdk.trace.export import BatchSpanProcessor
    
  • L'application instrumente les requêtes Web avec le contexte de trace et suit automatiquement les gestionnaires Flask et les requêtes vers d'autres services:

    app = flask.Flask(__name__)
    FlaskInstrumentor().instrument_app(app)
    RequestsInstrumentor().instrument()
  • L'application configure l'exportateur Cloud Trace en tant que fournisseur de traces, qui propage le contexte de trace au format Cloud Trace:

    def configure_exporter(exporter):
        """Configures OpenTelemetry context propagation to use Cloud Trace context
    
        Args:
            exporter: exporter instance to be configured in the OpenTelemetry tracer provider
        """
        set_global_textmap(CloudTraceFormatPropagator())
        tracer_provider = TracerProvider()
        tracer_provider.add_span_processor(BatchSpanProcessor(exporter))
        trace.set_tracer_provider(tracer_provider)
    
    configure_exporter(CloudTraceSpanExporter())
    tracer = trace.get_tracer(__name__)
  • L'extrait de code suivant montre comment envoyer des requêtes en Python. OpenTelemetry propage implicitement le contexte de trace pour vous avec vos requêtes sortantes:

    if endpoint is not None and endpoint != "":
        data = {"body": keyword}
        response = requests.get(
            endpoint,
            params=data,
        )
        return keyword + "\n" + response.text
    else:
        return keyword, 200
    
    

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. Le service a est configuré pour appeler le service b, tandis que le service b est configuré pour appeler le service c. 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 a dans ce démarrage rapide, vous avez utilisé la commande curl suivante :

curl $(kubectl get svc -o=jsonpath='{.items[?(@.metadata.name=="cloud-trace-demo-a")].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-a.
  2. La commande curl envoie ensuite la requête HTTP au service a.
  3. Le service a 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 c.
  5. Le service c reçoit la requête HTTP du service b et renvoie la chaîne Hello, I am service C au service b.
  6. Le service b reçoit la réponse du service c, l'ajoute à la chaîne And I am service B et renvoie le résultat au service a.
  7. Le service a reçoit la réponse du service b et l'ajoute à la chaîne Hello, I am service A.
  8. La réponse du service a est imprimée dans Cloud Shell.

Effectuer un nettoyage

Pour éviter que les ressources utilisées sur cette page soient facturées sur votre compte Google Cloud, procédez comme suit :

Si vous avez créé un projet et que vous n'en avez plus besoin, supprimez-le.

Si vous avez utilisé un projet existant, procédez comme suit:

  1. Pour supprimer votre cluster, exécutez la commande suivante dans Cloud Shell:

    gcloud container clusters delete cloud-trace-demo --zone us-central1-c

Étapes suivantes