Dopo aver eseguito il deployment di Extensible Service Proxy (ESP) o Extensible Service Proxy V2 (ESPv2) e del codice backend dell'API, il proxy intercetta tutte le richieste ed esegue i controlli necessari prima di inoltrarle al backend dell'API. Quando il backend risponde, il proxy raccoglie e segnala la telemetria. Un dato di telemetria acquisito dal proxy è la traccia, tramite Cloud Trace.
Questa pagina spiega come:
- Visualizzare le tracce nella Google Cloud console.
- Stimare il costo di Trace.
- Configurare il proxy per disattivare il campionamento delle tracce.
Visualizzazione delle tracce
Una traccia monitora una richiesta in entrata all'API e i vari eventi (ad esempio chiamate RPC o sezioni di codice strumentate), insieme ai tempi precisi di ogni evento. Questi eventi sono rappresentati come intervalli nella traccia.
Per visualizzare le tracce del tuo progetto, vai alla pagina Cloud Trace in Google Cloud console:
Nella pagina Esplora tracce, puoi eseguire il drill-down per visualizzare una singola traccia e gli intervalli creati da ESP in una traccia. Puoi utilizzare il filtro per visualizzare le tracce di una singola API o operazione.
Le tracce e gli intervalli creati per l'API variano a seconda che l'API utilizzi ESPv2 o ESP. Di seguito è riportato un riepilogo dei formati di traccia per ogni implementazione.
Per ulteriori informazioni sulla pagina Esplora tracce, consulta Trovare ed esplorare le tracce.
Intervalli creati da ESPv2
ESPv2 crea tracce nel seguente formato:

ESPv2 crea almeno due intervalli per traccia:
- Un intervallo
ingress OPERATION_NAMEper l'intera richiesta e risposta. - Un intervallo
router BACKEND egressper il tempo in cui ESPv2 attende che il backend elabori la richiesta e risponda. È incluso l'hop di rete tra ESPv2 e il backend.
A seconda della configurazione dell'API, ESPv2 potrebbe creare intervalli aggiuntivi:
- Se l'API richiede l'autenticazione, ESPv2 memorizza nella cache la chiave pubblica necessaria per l'autenticazione per 5 minuti. Se la chiave pubblica non è nella cache, ESPv2 la recupera e la memorizza nella cache e crea un intervallo
JWT Remote PubKey Fetch. - Se l'API richiede una chiave API, ESPv2 memorizza nella cache le informazioni necessarie per convalidare la chiave API. Se le informazioni non sono nella cache, ESPv2 chiama Service Control e crea un intervallo
Service Control remote call: Check.
In generale, ESPv2 crea intervalli solo per le chiamate di rete che bloccano la richiesta in entrata. Le richieste non bloccanti non verranno tracciate. Qualsiasi elaborazione locale creerà eventi temporali anziché intervalli. Ad esempio:
- L'applicazione delle quote richiede chiamate remote, ma le chiamate non vengono eseguite nel percorso di una richiesta API e non avranno intervalli associati nella traccia.
- Le chiavi API vengono memorizzate nella cache da ESPv2 per un breve periodo di tempo. Tutte le richieste che utilizzano la cache avranno un evento temporale associato nella traccia.
Intervalli creati da ESP
ESP crea tracce nel seguente formato:

ESP crea almeno quattro intervalli per traccia:
- Un intervallo per l'intera richiesta e risposta.
- Un intervallo
CheckServiceControlper la chiamata al metodoservices.checkdi Service Control per ottenere la configurazione dell'API. - Un intervallo
QuotaControlper verificare se è configurata una quota per l'API. - Un intervallo
Backendche monitora il tempo trascorso nel codice backend dell'API.
A seconda della configurazione dell'API, ESP crea intervalli aggiuntivi:
- Se l'API richiede l'autenticazione, ESP crea un intervallo
CheckAuthin ogni traccia. Per autenticare una richiesta, ESP memorizza nella cache la chiave pubblica necessaria per l'autenticazione per 5 minuti. Se la chiave pubblica non è nella cache, ESP la recupera e la memorizza nella cache e crea un intervalloHttpFetch. - Se l'API richiede una chiave API, ESP crea un intervallo
CheckServiceControlCachein ogni traccia. ESP memorizza nella cache le informazioni necessarie per convalidare la chiave API. Se le informazioni non sono nella cache, ESP chiama Service Control e crea un intervalloCall ServiceControl server. - Se hai impostato una quota per l'API, ESP crea un intervallo
QuotaServiceControlCachein ogni traccia. ESP memorizza nella cache le informazioni necessarie per controllare la quota. Se le informazioni non sono nella cache, ESP chiama Service Control e crea un intervalloCall ServiceControl server.
Frequenza di campionamento delle Trace
ESP campiona un piccolo numero di richieste all'API per ottenere i dati di traccia. Per controllare la frequenza di campionamento, ESP gestisce un contatore delle richieste e un timer. Il numero di richieste al secondo all'API determina la frequenza di campionamento. Se non ci sono richieste entro un secondo, ESP non invia una traccia.
Se il numero di richieste in un secondo è:
- Minore o uguale a 999, ESP invia una traccia.
- Compreso tra 1000 e 1999, ESP invia due tracce.
- Compreso tra 2000 e 2999, ESP invia tre tracce.
- e così via.
In sintesi, puoi stimare la frequenza di campionamento con la
ceiling funzione:
ceiling(requests per second/1000)
Stima del costo di Trace
Per stimare il costo di Trace, devi stimare il numero di intervalli che ESP invia a Trace in un mese.
Per stimare il numero di intervalli al mese:
- Stima il numero di richieste al secondo all'API. Per ottenere questa stima, puoi utilizzare il grafico Richieste nella pagina Endpoint > Servizi o Cloud Logging. Per ulteriori informazioni, consulta Monitorare l'API.
- Calcola il numero di tracce che ESP invia a Trace al secondo:
ceiling(requests per second/1000) - Stima il numero di intervalli in una traccia. Per ottenere questa stima, puoi utilizzare le informazioni in Intervalli creati da ESP o visualizzare la pagina Elenco tracce per visualizzare le tracce dell'API.
- Stima il numero di secondi in un mese in cui l'API riceve traffico. Ad esempio, alcune API ricevono richieste solo in determinati orari del giorno, mentre altre API ricevono richieste sporadicamente.
- Moltiplica il numero di secondi nel mese per il numero di intervalli.
Ad esempio:
- Supponiamo che il numero massimo di richieste al secondo per un'API sia 5.
- La frequenza di campionamento delle tracce è ceiling (5/1000) = 1
- L'API non ha una quota configurata, non richiede una chiave API e non richiede l'autenticazione. Di conseguenza, il numero di intervalli creati da ESP per traccia è 4.
- Questa API riceve richieste solo durante l'orario di apertura, dal lunedì al venerdì. Il numero di secondi in un mese in cui l'API riceve traffico è approssimativamente: 3600 X 8 X 20 = 576.000
- Il numero di intervalli al mese è approssimativamente 576.000 x 4 = 2.304.000
Dopo aver calcolato il numero approssimativo di intervalli in un mese, consulta la pagina dei prezzi di Trace per informazioni dettagliate sui prezzi.
Disattivazione del campionamento delle tracce
Se vuoi impedire a ESP di campionare le richieste e inviare tracce, puoi impostare un'opzione di avvio di ESP e riavviare ESP. Le tracce inviate da ESP a Cloud Trace sono indipendenti dai grafici visualizzati nella pagina Endpoint > Servizi. I grafici continuano a essere disponibili se disattivi il campionamento delle tracce.
La sezione seguente presuppone che tu abbia già eseguito il deployment dell'API e di ESP o che tu conosca la procedura di deployment. Per ulteriori informazioni, consulta Eseguire il deployment del backend API.
App Engine
Per disattivare il campionamento delle tracce ESP nell'ambiente flessibile di App Engine:
- Modifica il file
app.yaml. Nella sezioneendpoints_api_service, aggiungi l'opzionetrace_samplinge imposta il relativo valore sufalse. Ad esempio:endpoints_api_service: name: example-project-12345.appspot.com rollout_strategy: managed trace_sampling: false
Se l'applicazione è basata su microservizi, devi includere
trace_sampling: falsein ogni fileapp.yaml. - Se non hai aggiornato di recente Google Cloud CLI, esegui il seguente comando:
gcloud components update
- Salva il file (o i file)
app.yaml. - Esegui il deployment del codice backend e di ESP in App Engine:
gcloud app deploy
Per riattivare il campionamento delle tracce:
- Rimuovi l'opzione
trace_samplingdaapp.yaml. - Esegui il deployment del codice backend e di ESP in App Engine:
gcloud app deploy
Compute Engine
Per disattivare il campionamento delle tracce ESP in Compute Engine con Docker:
- Connettiti all'istanza VM:
gcloud compute ssh [INSTANCE_NAME]
- Nei flag ESP per il comando
docker run, aggiungi l'opzione--disable_cloud_trace_auto_sampling:sudo docker run \ --name=esp \ --detach \ --publish=80:8080 \ --net=esp_net \ gcr.io/endpoints-release/endpoints-runtime:1 \ --service=[SERVICE_NAME] \ --rollout_strategy=managed \ --backend=[YOUR_API_CONTAINER_NAME]:8080 \ --disable_cloud_trace_auto_sampling
- Esegui il comando
docker runper riavviare ESP.
Per riattivare il campionamento delle tracce:
-
Rimuovi
--disable_cloud_trace_auto_sampling. - Esegui il comando
docker runper riavviare ESP.
GKE
Per disattivare il campionamento delle tracce ESP in GKE:
- Apri il file manifest del deployment, denominato
deployment.yaml, e aggiungi quanto segue alla sezionecontainers:containers: - name: esp image: gcr.io/endpoints-release/endpoints-runtime:1 args: [ "--http_port=8081", "--backend=127.0.0.1:8080", "--service=[SERVICE_NAME]", "--rollout_strategy=managed", "--disable_cloud_trace_auto_sampling" ]
- Avvia il servizio Kubernetes utilizzando il
kubectl createcomando:kubectl create -f deployment.yaml
Per riattivare il campionamento delle tracce:
- Rimuovi l'opzione
--disable_cloud_trace_auto_sampling. - Avvia il servizio Kubernetes:
kubectl create -f deployment.yaml
Se esegui ESP su un'istanza VM di Compute Engine senza un container Docker, non esiste una coppia chiave-valore dei metadati dell'istanza VM equivalente per l'opzione --disable_cloud_trace_auto_sampling. Se vuoi disattivare il campionamento delle tracce, devi eseguire ESP in un container.
Un client può forzare la traccia di una richiesta aggiungendo l'X-Cloud-Trace-Context
intestazione alla richiesta, come descritto in
Forzare la traccia di una richiesta.
Se una richiesta contiene l'intestazione X-Cloud-Trace-Context, ESP invia i dati di traccia a Trace anche se hai disattivato il campionamento delle tracce.
Propagazione del contesto di traccia
Per il tracciamento distribuito, un'intestazione della richiesta può contenere un contesto di traccia che specifica un ID traccia. L'ID traccia viene utilizzato quando ESPv2 crea nuovi intervalli di traccia e li invia a Cloud Trace. L'ID traccia viene utilizzato per cercare tutte le tracce e unire gli intervalli per una singola richiesta. Se non viene specificato alcun contesto di traccia nella richiesta e la traccia è abilitata, viene generato un ID traccia casuale per tutti gli intervalli di traccia.
Nell'esempio seguente, Cloud Trace correla gli intervalli creati da ESPv2 (1) con gli intervalli creati dal backend (2) per una singola richiesta. Questo aiuta a eseguire il debug dei problemi di latenza nell'intero sistema:

Per ulteriori dettagli, consulta Concetti di base di OpenTelemetry: propagazione del contesto
Intestazioni supportate
ESPv2 supporta le seguenti intestazioni di propagazione del contesto di traccia:
traceparent: l'intestazione di propagazione del contesto di traccia W3C standard. Supportata dalla maggior parte dei framework di tracciamento moderni.x-cloud-trace-context: l'intestazione di propagazione del contesto di traccia di GCP. Supportata dai framework di tracciamento precedenti e dalle librerie di Google, ma specifica del fornitore.grpc-trace-bin: Trace di propagazione del contesto di traccia utilizzata dai backend gRPC con la OpenCensus OpenCensus.
Se stai creando una nuova applicazione, ti consigliamo di utilizzare la propagazione del contesto di traccia traceparent. ESPv2 estrae e propaga questa intestazione per impostazione predefinita. Per informazioni dettagliate sulla modifica del comportamento predefinito, consulta Opzioni di avvio del tracciamento ESPv2.