Mantieni tutto organizzato con le raccolte Salva e classifica i contenuti in base alle tue preferenze.
Guida rapida: traccia la latenza delle app con Cloud Trace

Monitora la latenza delle app con Cloud Trace

Scopri come utilizzare Cloud Trace:

  1. Eseguire il deployment di un'applicazione di esempio in un cluster Google Kubernetes Engine (GKE).

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

  3. Utilizza l'interfaccia di Cloud Trace per visualizzare le informazioni di latenza della traccia che hai creato.

Prima di iniziare

Alcuni passaggi di questo documento potrebbero non funzionare correttamente se la tua organizzazione applica vincoli al tuo ambiente Google Cloud. In questo caso, potresti non riuscire a completare attività come la creazione di indirizzi IP pubblici o delle chiavi degli account di servizio. Se effettui una richiesta che restituisce un errore sui vincoli, scopri come sviluppare applicazioni in un ambiente Google Cloud con restrizioni.

Crea un progetto con fatturazione abilitata:

  1. 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.
  2. Nella pagina del selettore dei progetti in Google Cloud Console, seleziona o crea un progetto Google Cloud.

    Vai al selettore progetti

  3. Assicurati che la fatturazione sia attivata per il tuo progetto Cloud. Scopri come verificare se la fatturazione è abilitata su un progetto.

  4. Nella pagina del selettore dei progetti in Google Cloud Console, seleziona o crea un progetto Google Cloud.

    Vai al selettore progetti

  5. Assicurati che la fatturazione sia attivata per il tuo progetto Cloud. Scopri come verificare se la fatturazione è abilitata su un progetto.

Scarica ed esegui il deployment dell'applicazione

Per scaricare ed eseguire il deployment dell'applicazione:

  1. Per aprire Cloud Shell, fai clic su Attiva Cloud Shell nella barra degli strumenti della console Google Cloud:

    Attiva Cloud Shell.

    Dopo qualche istante, viene aperta una sessione di Cloud Shell all'interno della console Google Cloud.

  2. Per scaricare il codice sorgente da GitHub, esegui il comando seguente:

    git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git
    
  3. Abilita l'API Google Kubernetes Engine utilizzando il seguente comando:

    gcloud services enable container.googleapis.com
    
  4. Per creare il cluster GKE denominato cloud-trace-demo nella zona us-central1-c, esegui i comandi seguenti in Cloud Shell:

    ZONE=us-central1-c
    gcloud container clusters create cloud-trace-demo \
       --zone $ZONE
    

    Il completamento di questo comando richiede alcuni minuti. Una volta completato correttamente, il progetto Google Cloud contiene il cluster GKE denominato cloud-trace-demo. Devi avere l'autorizzazione per creare cluster con accesso esterno nel tuo progetto Google Cloud.

  5. Aggiorna le credenziali del cluster GKE eseguendo questo comando:

    gcloud container clusters get-credentials cloud-trace-demo --zone $ZONE
    
  6. Verifica l'accesso al cluster eseguendo il comando seguente:

    kubectl get nodes
    

    Un esempio di output 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
    
  7. Esegui il deployment dell'applicazione di esempio eseguendo questo comando:

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

    Lo script setup.sh configura tre servizi dell'applicazione utilizzando un'immagine predefinita. I carichi di lavoro sono denominati cloud-trace-demo-a, cloud-trace-demo-b e cloud-trace-demo-c. Lo script di configurazione attende il provisioning di tutte le risorse, quindi il completamento della configurazione potrebbe richiedere diversi minuti.

    Un esempio di output 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. You can access the demo at http://34.82.132.95/
    

Crea una traccia

Una trace descrive il tempo necessario per completare una singola operazione da parte di un'applicazione. Ogni traccia è composta da uno o più intervalli. Uno intervallo descrive il tempo necessario per eseguire un'operazione secondaria completa. Ad esempio, una traccia potrebbe descrivere quanto tempo occorre per elaborare una richiesta in arrivo da un utente e restituire una risposta. Uno intervallo potrebbe descrivere la durata di una particolare chiamata RPC. Per ulteriori informazioni, consulta il modello dei dati di Cloud Trace.

Per creare una traccia inviando una richiesta curl a cloud-trace-demo-a, utilizza il comando seguente:

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

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

L'output è simile al seguente:

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

Visualizza i dati di traccia

Nella console Google Cloud, seleziona Cloud Trace o fai clic sul seguente pulsante:

Vai a Trace

Finestra Panoramica

La finestra Panoramica è la visualizzazione predefinita in Trace. In questa finestra vengono visualizzati dati di latenza e informazioni di riepilogo, incluso un report di analisi. Se hai creato un nuovo progetto, il riquadro più interessante della finestra Panoramica è quello Tracce recenti:

Riquadro delle tracce recenti che mostra le tracce più recenti e la relativa latenza.

Nel riquadro sono elencate le tracce più recenti e la relativa latenza. Per visualizzare i dettagli di una traccia, fai clic sul link.

Finestra elenco tracce

Nel riquadro di navigazione di Trace, fai clic su Elenco Trace:

Finestra dell'elenco di tracce per la guida rapida.

In questa finestra vengono visualizzati un grafico e una tabella. Ogni punto sul grafico rappresenta una traccia. Ogni punto corrisponde anche a una riga della tabella. Nello screenshot precedente sono elencate più tracce, a indicare che il comando curl è stato eseguito più volte.

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

Visualizzazione a cascata con cinque intervalli.

Dopo aver selezionato un punto, viene visualizzato un grafico a cascata in cui ogni riga corrisponde a una sezione. I dettagli dello span, come le etichette di traccia, il metodo e le informazioni di riepilogo sulla latenza dei comandi, sono visualizzati nella tabella dei dettagli. Per visualizzare i dettagli di un intervallo, fai clic sulla riga corrispondente nel grafico a cascata:

Ulteriori dettagli su ciascun intervallo sono riportati nel riquadro dei dettagli.

Finestra Report di analisi

Per visualizzare o creare un report, nel riquadro di navigazione Trace, fai clic su Report Analisi. Trace crea automaticamente report giornalieri. Per questo progetto non sono disponibili dati sufficienti per creare un nuovo report.

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 Google Kubernetes Engine.

Strumentazione

Il file app.py nel repository di 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 strumenta le richieste web con contesto di traccia e traccia automaticamente i gestori e le richieste Flask ad altri servizi:

    app = flask.Flask(__name__)
    FlaskInstrumentor().instrument_app(app)
    RequestsInstrumentor().instrument()
  • L'applicazione configura l'esportatore Cloud Trace come provider di traccia, che propaga il contesto della traccia nel formato Cloud Trace:

    def configure_exporter(exporter):
        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 per 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 viene omesso dai nomi dei servizi. Ad esempio, al servizio cloud-trace-demo-c viene fatto riferimento come c.

Questa applicazione crea tre servizi denominati a, b e c. Il servizio a è configurato per chiamare il servizio b, il servizio b è configurato per chiamare il servizio c. Per i 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 invia una richiesta al servizio b.
  4. Il servizio b riceve la richiesta HTTP e invia una richiesta 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 è 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 Google Cloud per questa guida rapida, eliminalo per interrompere l'accumulo di addebiti. Per eliminare il progetto:

    1. Nella console Google Cloud, fai clic su Menu di navigazione e seleziona Home.
    2. Nel riquadro Informazioni sul progetto, fai clic su Vai alle impostazioni del progetto.
    3. Nella finestra Impostazioni, fai clic su Chiudi e completa i passaggi rimanenti.
  • Se non hai creato un nuovo progetto Google Cloud per questa guida rapida, elimina il cluster Google Kubernetes Engine denominato cloud-trace-demo eseguendo questo comando:

    gcloud container clusters delete cloud-trace-demo --zone $ZONE
    

Passaggi successivi