Dopo aver eseguito il deployment di Extensible Service Proxy (ESP) o Extensible Service Proxy V2 (ESPv2) e del codice di backend dell'API, il proxy intercetta tutte le richieste ed esegue tutti i controlli necessari prima di inoltrare la richiesta al backend dell'API. Quando di risposta, il proxy raccoglie e segnala i dati di telemetria. Uno dei dati di telemetria acquisiti dal proxy è il monitoraggio, utilizzando Cloud Trace.
In questa pagina viene spiegato come:
- Visualizza le tracce nella console Google Cloud.
- Stima i costi per Trace.
- Configura il proxy per disattivare il campionamento delle tracce.
Visualizzazione delle tracce
Una traccia monitora una richiesta in arrivo alla tua API e i vari eventi (ad esempio chiamate RPC o sezioni di codice sottoposte a ispezione), nonché i relativi tempi esatti. Questi eventi sono rappresentati come intervalli nella traccia.
Per visualizzare le tracce del tuo progetto, vai alla pagina Cloud Trace nella console Google Cloud:
Nella pagina Esplora tracce puoi visualizzare in dettaglio una singola traccia e controllare gli intervalli creati da ESP in una traccia. Puoi utilizzare il filtro per visualizzare le tracce per una singola API o operazione.
Le tracce e gli intervalli creati per l'API saranno diversi a seconda che l'API utilizza ESPv2 o ESP. Un riepilogo della traccia di seguito per ciascuna implementazione.
Per ulteriori informazioni nella pagina Explorer Trace, vedi Trovare ed esplorare le tracce.
Intervalli creati da ESPv2
ESPv2 crea le tracce nel seguente formato:
ESPv2 crea almeno due intervalli per traccia:
- Un intervallo
ingress OPERATION_NAME
per l'intera richiesta e risposta. - Un intervallo
router BACKEND egress
per il tempo necessario a ESPv2 per elaborare la richiesta e rispondere. Sono inclusi l'hop di rete tra ESPv2 e il backend.
A seconda della configurazione dell'API, ESPv2 potrebbe creare ulteriori intervalli:
- Se la tua 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 uno spazio
JWT Remote PubKey Fetch
. - Se la tua API richiede una chiave API, ESPv2 memorizza nella cache le informazioni di cui ha bisogno per convalidare la chiave API. Se le informazioni
non è 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 locale l'elaborazione creerà eventi temporali anziché sulle sezioni. Ad esempio:
- L'applicazione della quota richiede chiamate remote, ma queste non si verificano 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. Qualsiasi richiesta che utilizzano la cache avranno un evento temporale associato nella traccia.
Span creati da ESP
ESP crea tracce nel seguente formato:
L'ESP crea almeno quattro intervalli per traccia:
- Un intervallo per l'intera richiesta e risposta.
- Uno spazio
CheckServiceControl
per la chiamata al metodoservices.check
di Controllo servizio per ottenere la configurazione dell'API. - Un intervallo
QuotaControl
per verificare se è presente quota configurate nell'API. - Un intervallo
Backend
che monitora il tempo trascorso nel codice di backend dell'API.
A seconda della configurazione dell'API, ESP crea intervalli aggiuntivi:
- Se l'API richiede l'autenticazione, ESP crea uno span
CheckAuth
in 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, l'ESP la recupera e la memorizza nella cache e crea uno spazioHttpFetch
. - Se l'API richiede una chiave API, ESP crea una
CheckServiceControlCache
intervallo in ogni traccia. L'ESP memorizza nella cache le informazioni di cui ha bisogno per convalidare la chiave API. Se le informazioni non sono nella cache, l'ESP chiama Service Control e crea uno spanCall ServiceControl server
. - Se hai impostato una quota per la tua API, ESP crea un
QuotaServiceControlCache
intervallo in ogni traccia. Cache ESP 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 della traccia
L'ESP esegue il campionamento di un numero ridotto di richieste alla tua 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 per la tua API determina la frequenza di campionamento. Se non ricevi richieste entro un secondo, ESP non invia alcuna traccia.
Se il numero di richieste in un secondo è:
- Minore o uguale a 999, l'ESP invia 1 traccia.
- Tra 1000 e 1999, l'ESP invia 2 tracce.
- Tra 2000 e 2999, l'ESP invia 3 tracce.
- e così via.
In sintesi, puoi stimare la frequenza di campionamento con la
funzione ceiling
:
ceiling(requests per second/1000)
Stima del costo di Trace
Per stimare il costo di Trace, devi stimare il numero di intervalli inviati dall'ESP a Trace in un mese.
Per stimare il numero di intervalli al mese:
- Stima il numero di richieste al secondo alla tua API. Per ottenere questa stima, puoi utilizzare il grafico Richieste negli Endpoint > Pagina Servizi o Cloud Logging. Per ulteriori informazioni, consulta la sezione Monitoraggio dell'API.
- Calcola il numero di tracce che ESP invia a
Trace al secondo:
ceiling(requests per second/1000)
- Stimare il numero di intervalli in una traccia. Per ottenere questa stima, puoi utilizzare le informazioni riportate in Spazi creati dall'ESP o visualizzare la pagina Elenco Trace per vedere le tracce per la tua API.
- Stima il numero di secondi in un mese in cui la tua API riceve traffico. Per Ad esempio, alcune API ricevono richieste solo in determinate ore del giorno e altre API ricevono richieste sporadicamente.
- Moltiplica il numero di secondi del 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 della traccia è massima (5/1000) = 1
- L'API non ha una quota configurata, non richiede una chiave API e non richiede l'autenticazione. Pertanto, il numero di intervalli creati dall'ESP per traccia è 4.
- Questa API riceve richieste solo durante l'orario di lavoro, 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 è di circa 576.000 x 4 = 2.304.000
Dopo aver conosciuto il numero approssimativo di intervalli in un mese, consulta la pagina Prezzi dei traccianti per informazioni dettagliate sui prezzi.
Disabilitazione del campionamento delle tracce in corso...
Se vuoi impedire a ESP di campionare le richieste e di inviare tracce, puoi impostare un'opzione di avvio ESP riavvia ESP. Le tracce inviate da ESP a Cloud Trace sono indipendenti dai grafici visualizzati nella pagina Endpoint > Servizi. I grafici continueranno a essere disponibili se disattivi il campionamento delle tracce.
La sezione seguente presuppone che tu abbia già eseguito il deployment dell'API e o hai familiarità con il processo di deployment. Per maggiori informazioni le informazioni, vedi Deployment del backend dell'API.
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 run
per riavviare l'ESP.
Per riattivare il campionamento delle tracce:
-
Rimuovi
--disable_cloud_trace_auto_sampling
. - Esegui il comando
docker run
per riavviare l'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
Comando
kubectl create
: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 esistono metadati equivalenti delle istanze VM
coppia chiave-valore per l'opzione --disable_cloud_trace_auto_sampling
. Se
vuoi disattivare il campionamento delle tracce, devi eseguire ESP in un contenitore.
Un client può forzare il monitoraggio di una richiesta aggiungendo l'intestazione X-Cloud-Trace-Context
alla richiesta, come descritto in
Forzare il monitoraggio di una richiesta.
Se una richiesta contiene l'intestazione X-Cloud-Trace-Context
, ESP
invia i dati di traccia a Trace anche se l'hai disabilitata
campionamento.
Propagazione del contesto traccia
Per il tracciamento distribuito, un'intestazione della richiesta può contenere un contesto di traccia specifica un ID traccia. L'ID traccia viene utilizzato quando ESPv2 crea nuovi intervalli di traccia e le invia a Cloud Trace. L'ID traccia viene utilizzato per cercare tutte le tracce e unire gli span per una singola richiesta. Se il contesto della traccia non è specificato nella richiesta e la traccia è abilitata, viene generato un ID traccia casuale per tutti gli intervalli di tracce.
Nell'esempio seguente, Cloud Trace correla gli span creati da ESPv2 (1) con gli span creati dal backend (2) per una singola richiesta. In questo modo è possibile eseguire il debug della latenza dei problemi nell'intero sistema:
Per maggiori dettagli, leggi i concetti principali di OpenTelemetry: propagazione del contesto
Intestazioni supportate
ESPv2 supporta le seguenti intestazioni di propagazione del contesto traccia:
traceparent
: l'intestazione di propagazione del contesto traccia W3C standard. Supportato dalla maggior parte dei framework di tracciamento moderni.x-cloud-trace-context
: intestazione della propagazione del contesto della traccia di Google Cloud. Supportata da vecchi framework di tracciamento e alle librerie di Google, ma specifici del fornitore.grpc-trace-bin
: intestazione di propagazione del contesto traccia utilizzata dai backend gRPC con la libreria di monitoraggio OpenCensus.
Se stai creando una nuova applicazione, ti consigliamo di utilizzare la traccia traceparent
la propagazione del contesto. ESPv2 estrae e propaga questa intestazione per impostazione predefinita. Per maggiori dettagli sulla modifica del comportamento predefinito, consulta Opzioni di avvio del monitoraggio ESPv2.