Visualizza la latenza delle richieste di app

Scopri come raccogliere e visualizzare i dati sulla latenza delle tue applicazioni:

  1. Per creare un cluster Google Kubernetes Engine (GKE) usa Google Cloud CLI.

  2. Scarica ed esegui il deployment di un'applicazione di esempio nel cluster.

  3. Crea una traccia inviando una richiesta HTTP all'applicazione di esempio.

  4. Visualizza le informazioni sulla latenza della traccia che hai creato.

  5. Eseguire la pulizia.


Per seguire le indicazioni dettagliate per questa attività direttamente nella console Google Cloud, fai clic su Aiuto:

Aiuto


Prima di iniziare

  1. I vincoli di sicurezza definiti dalla tua organizzazione potrebbero impedirti di completare i passaggi seguenti. Per informazioni sulla risoluzione dei problemi, consulta Sviluppare applicazioni in un ambiente Google Cloud vincolato.

  2. Accedi al tuo account Google Cloud. Se non conosci Google Cloud, crea un account per valutare le prestazioni dei nostri prodotti in scenari reali. I nuovi clienti ricevono anche 300 $di crediti gratuiti per l'esecuzione, il test e il deployment dei carichi di lavoro.
  3. Nella pagina del selettore di progetti della console Google Cloud, seleziona o crea un progetto Google Cloud.

    Vai al selettore progetti

  4. Assicurati che la fatturazione sia attivata per il tuo progetto Google Cloud.

  5. Abilita le API Google Kubernetes Engine and Cloud Trace.

    Abilita le API

  6. Nella pagina del selettore di progetti della console Google Cloud, seleziona o crea un progetto Google Cloud.

    Vai al selettore progetti

  7. Assicurati che la fatturazione sia attivata per il tuo progetto Google Cloud.

  8. Abilita le API Google Kubernetes Engine and Cloud Trace.

    Abilita le API

crea un cluster GKE

  1. Nella barra degli strumenti, fai clic su Attiva Cloud Shell, quindi esegui i passaggi seguenti in Cloud Shell.

  2. Crea un cluster:

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

    Il comando precedente, il cui completamento richiede diversi minuti, crea un cluster standard con il nome cloud-trace-demo nella zona us-central1-c.

  3. Configura kubectl per aggiornare automaticamente le sue credenziali in modo da utilizzare la stessa identità di Google Cloud CLI:

    gcloud container clusters get-credentials cloud-trace-demo --zone us-central1-c
    
  4. Verifica l'accesso al cluster:

    kubectl get nodes
    

    Un output di esempio di questo comando è:

    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
    

Scarica ed esegui il deployment di un'applicazione

Scarica ed esegui il deployment di un'applicazione Python, che usa il framework Flask e il pacchetto OpenTelemetry. L'applicazione è descritta nella sezione Informazioni sull'app di questa pagina.

In Cloud Shell, segui questi passaggi:

  1. Clona un'app Python da GitHub:

    git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git
    
  2. Esegui questo comando per eseguire il deployment dell'applicazione di esempio:

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

    Il completamento dello script setup.sh richiede diversi minuti.

    Lo script configura tre servizi utilizzando un'immagine predefinita, quindi attende il provisioning di tutte le risorse. I carichi di lavoro sono denominati cloud-trace-demo-a, cloud-trace-demo-b e cloud-trace-demo-c.

    Un output di esempio di questo comando è:

    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.
    

Crea dati di traccia

Una trace descrive il tempo necessario a un'applicazione per completare una singola operazione.

Per creare una traccia, esegui questo comando in Cloud Shell:

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

La risposta del comando precedente è simile alla seguente:

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

Puoi eseguire il comando curl più volte per generare più tracce.

Visualizza i dati sulla latenza

  1. Nel pannello di navigazione della console Google Cloud, seleziona Trace e poi Esplora Trace:

    Vai a Esplora Trace

    Ogni traccia è rappresentata da un punto sul grafico e da una riga nella tabella.

    Nello screenshot seguente sono mostrate più tracce:

    Finestra di Esplora Trace per la guida rapida.

  2. Per visualizzare una traccia in dettaglio, seleziona un punto nel grafico o una riga nella tabella.

    Il grafico a dispersione viene aggiornato e il punto selezionato viene evidenziato con un cerchio disegnato intorno al punto, mentre tutti gli altri punti che rappresentano tutte le altre tracce sono attenuati.

    Un grafico di Gantt mostra informazioni sulla traccia selezionata. La prima riga nel grafico di Gantt è per la traccia ed esiste una riga per ogni intervallo nella traccia. Un span descrive il tempo necessario per eseguire un'operazione secondaria completa.

    Ulteriori dettagli su ogni intervallo sono mostrati nel riquadro dei dettagli.

  3. Per visualizzare informazioni dettagliate su un intervallo, seleziona l'intervallo nel grafico di Gantt.

Informazioni sull'applicazione

L'applicazione di esempio utilizzata in questa guida rapida è disponibile in un repository GitHub. Questo repository contiene informazioni su come utilizzare l'applicazione in ambienti diversi da Cloud Shell. L'applicazione di esempio è scritta in Python, utilizza il framework Flask e i pacchetti OpenTelemetry ed viene eseguita su un cluster GKE.

Strumentazione

Il file app.py nel repository GitHub contiene la strumentazione necessaria per acquisire e inviare i dati di traccia al tuo progetto Google Cloud:

  • L'applicazione importa diversi pacchetti 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'applicazione gestisce le richieste web con il contesto di traccia e traccia automaticamente le richieste e i gestori di Flask ad altri servizi:

    app = flask.Flask(__name__)
    FlaskInstrumentor().instrument_app(app)
    RequestsInstrumentor().instrument()
  • L'applicazione configura l'esportatore Cloud Trace come provider di tracce, in modo da propagare il contesto della traccia nel formato 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__)
  • Il seguente snippet di codice mostra come inviare richieste in Python. OpenTelemetry propaga implicitamente il contesto della traccia con le tue richieste in uscita:

    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
    
    

Come funziona l'applicazione

Per chiarezza, in questa sezione cloud-trace-demo è omesso dai nomi dei servizi. Ad esempio, il servizio cloud-trace-demo-c viene indicato come c.

Questa applicazione crea tre servizi denominati a, b e c. Il servizio a è configurato per chiamare il servizio b, mentre il servizio b è configurato per chiamare il servizio c. Per maggiori dettagli sulla configurazione dei servizi, consulta i file YAML nel repository GitHub.

Quando hai inviato una richiesta HTTP al servizio a in questa guida rapida, hai utilizzato il seguente comando curl:

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

Il comando curl funziona come segue:

  1. kubectl recupera l'indirizzo IP del servizio denominato cloud-trace-demo-a.
  2. Il comando curl invia quindi la richiesta HTTP al servizio a.
  3. Il servizio a riceve la richiesta HTTP e ne invia una al servizio b.
  4. Il servizio b riceve la richiesta HTTP e ne invia una al servizio c.
  5. Il servizio c riceve la richiesta HTTP dal servizio b e restituisce la stringa Hello, I am service C al servizio b.
  6. Il servizio b riceve la risposta dal servizio c, la aggiunge alla stringa And I am service B e restituisce il risultato al servizio a.
  7. Il servizio a riceve la risposta dal servizio b e la aggiunge alla stringa Hello, I am service A.
  8. La risposta del servizio a viene stampata in Cloud Shell.

Esegui la pulizia

Per evitare che al tuo account Google Cloud vengano addebitati costi relativi alle risorse utilizzate in questa pagina, segui questi passaggi.

Se hai creato un nuovo progetto, ma non ne hai più bisogno, elimina il progetto.

Se hai utilizzato un progetto esistente:

  1. Per eliminare il cluster, in Cloud Shell esegui questo comando:

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

Passaggi successivi