Questa pagina si applica ad Apigee e Apigee hybrid.
Visualizza la documentazione di
Apigee Edge.
Questa pagina mostra i passaggi necessari per configurare la tracciabilità distribuita per il runtime Apigee. Se non hai mai utilizzato sistemi di tracciamento distribuito e vuoi saperne di più, consulta Informazioni sul tracciamento distribuito.
Per ulteriori informazioni sui termini utilizzati in questa pagina, consulta la panoramica di Cloud Trace.
Introduzione
I sistemi di tracciamento distribuito consentono di monitorare una richiesta in un sistema software distribuito su più applicazioni, servizi e database, nonché intermediari come i proxy. Questi sistemi di tracciamento generano report che mostrano il tempo impiegato da una richiesta in ogni passaggio. I report di tracciamento possono anche fornire una visione granulare dei vari servizi chiamati durante una richiesta, consentendo una comprensione più approfondita di ciò che accade in ogni passaggio del sistema software.
Lo strumento di tracciamento in Apigee Edge e lo strumento di debug in Apigee sono utili per la risoluzione dei problemi e il monitoraggio dei proxy API. Tuttavia, questi strumenti non inviano dati a server di tracciamento distribuito come Cloud Trace, Jaeger o un agente di raccolta OpenTelemetry.
Per visualizzare i dati del runtime Apigee in un report di tracciamento distribuito, devi abilitare esplicitamente il tracciamento distribuito nel runtime Apigee. Una volta attivato il tracciamento, il runtime può inviare i dati di tracciamento ai server di tracciamento distribuito e partecipare a una traccia esistente. Di conseguenza, puoi visualizzare i dati all'interno e all'esterno del tuo ecosistema Apigee da un'unica posizione.
Nei report di tracciamento distribuito puoi visualizzare le seguenti informazioni:
- Tempo di esecuzione di un intero flusso.
- L'ora in cui viene ricevuta la richiesta.
- Ora in cui la richiesta viene inviata al target.
- Ora in cui la risposta viene ricevuta dal target.
- Tempo di esecuzione di ogni policy in un flusso.
- Tempo di esecuzione dei callout di servizio e dei flussi di destinazione.
- Ora in cui la risposta viene inviata al client.
Nel report di tracciamento distribuito, puoi visualizzare i dettagli di esecuzione dei flussi come intervalli. Un intervallo si riferisce al tempo impiegato da un flusso in una traccia. Il tempo impiegato per eseguire un flusso viene visualizzato come aggregazione del tempo necessario per eseguire ogni policy nel flusso. Puoi visualizzare ciascuno dei seguenti flussi come intervalli individuali:
| Fase | Endpoint | Flow |
|---|---|---|
| Richiesta | Proxy | Preflow |
| PostFlow | ||
| Target | Preflow | |
| PostFlow | ||
| Risposta | Proxy | Preflow |
| PostFlow | ||
| Target | Preflow | |
| PostFlow |
Una volta attivato il tracciamento distribuito, il runtime Apigee traccerà un insieme di variabili predefinite per impostazione predefinita. Per saperne di più, vedi Variabili di traccia predefinite nel report di tracciamento. Puoi utilizzare la norma TraceCapture per estendere il comportamento di runtime predefinito e tracciare ulteriori variabili di flusso, norme o personalizzate. Per saperne di più, consulta le norme relative a TraceCapture.
Variabili di traccia predefinite nel report di tracciamento
Si applica a: entrambe le configurazioni OpenTelemetry e OpenCensus.
Una volta attivato il tracciamento distribuito, puoi visualizzare il seguente insieme di variabili predefinite nel report di tracciamento. Le variabili sono visibili nei seguenti intervalli:
RESP_SENT: questo intervallo viene aggiunto dopo aver ricevuto una risposta dal server di destinazione. Contiene gli attributi lato target elencati in Variabili nell'intervalloRESP_SENT.PROXY_POST_RESP_SENT: Questo intervallo viene aggiunto dopo l'invio della risposta del proxy al client. Contiene gli attributi lato proxy elencati in Variabili nell'intervalloPROXY_POST_RESP_SENT.EVENT_FLOW_RESPeEVENT_FLOW_END: questi intervalli vengono aggiunti per i proxy API che gestiscono le risposte streaming Server-Sent Events (SSE).EVENT_FLOW_RESPcontrassegna il flusso di risposta SSE (eseguito una volta per messaggio di risposta).EVENT_FLOW_ENDindica la fine dello stream SSE. Questi intervalli attualmente non includono attributi predefiniti. Vengono visualizzati nella traccia come intervalli denominati per rendere visibili le fasi SSE del proxy nel report di tracciamento.
Attributi risorsa predefiniti
Si applica a: solo OpenTelemetry. Questa sezione non si applica alla configurazione di OpenCensus.
Quando utilizzi OpenTelemetry con il protocollo di traccia OTLP, il runtime Apigee collega i seguenti attributi di risorsa della convenzione semantica OpenTelemetry a ogni span emesso:
| Attributo | Descrizione |
|---|---|
service.name |
Valore fisso apigee.googleapis.com. |
service.instance.id |
Identificatore dell'istanza del processore di messaggi che ha emesso lo span. Omesso quando l'identità del pod di runtime non è disponibile. |
cloud.provider |
Sempre gcp. |
cloud.platform |
Sempre gcp_apigee. |
cloud.region |
La regione che ospita il runtime Apigee, con fallback a
global quando non è configurata alcuna regione. |
cloud.resource_id |
Percorso della risorsa Apigee completo nel formato
/apigee.googleapis.com/organizations/ORG/environments/ENV. |
gcp.apigee.organization |
Il nome dell'organizzazione Apigee. |
gcp.apigee.environment |
Il nome dell'ambiente Apigee. |
gcp.project_id |
L'ID progetto Google Cloud . Emesso solo quando l'esportatore è
OPEN_TELEMETRY_CLOUD_TRACE. |
Tipi di span
Si applica a entrambe le configurazioni OpenTelemetry e OpenCensus.
Apigee emette span con i seguenti
valori SpanKind:
SpanKind |
Span emessi con questo tipo |
|---|---|
SERVER |
Lo span del proxy principale (uno per ogni chiamata al proxy), che rappresenta la richiesta in entrata ricevuta dal runtime Apigee. |
INTERNAL |
Tutti gli altri intervalli, inclusi gli intervalli di flusso (ad esempio,
RESP_SENT e PROXY_POST_RESP_SENT) e ogni
intervallo di passaggi dei criteri (ad esempio, AssignMessage, VerifyAPIKey,
ServiceCallout, JavaScript, KeyValueMapOperations). |
Apigee non emette span CLIENT, PRODUCER
o CONSUMER. In particolare, le chiamate in uscita da
Apigee al backend di destinazione non vengono emesse come span
CLIENT separati; la chiamata in uscita è rappresentata all'interno degli
span di flusso INTERNAL esistenti e l'intestazione
traceparent viene propagata alla destinazione in modo che il servizio di destinazione possa emettere il proprio
span SERVER e unirsi alla stessa traccia.
Variabili nell'intervallo RESP_SENT
Le seguenti variabili sono visibili nell'intervallo RESP_SENT.
La colonna Variabile semantica OTEL mostra il nome della convenzione semantica OpenTelemetry utilizzata quando spanSemantics è impostato su OTEL; la colonna Attributo mostra il nome dell'attributo legacy.
| Variabile legacy | Variabile semantica OTEL | Attributo | Descrizione |
|---|---|---|---|
REQUEST_URL |
url.full |
request.url |
L'URL completo della richiesta client in entrata ricevuta dal proxy. |
REQUEST_VERB |
http.request.method |
request.verb |
Verbo HTTP della richiesta client in entrata (ad esempio, GET o POST). |
RESPONSE_STATUS_CODE |
http.response.status_code |
response.status.code |
Codice di stato della risposta restituito dal server di destinazione. |
ROUTE_NAME |
gcp.apigee.route.name |
route.name |
Nome della regola di instradamento che ha selezionato la destinazione per questa richiesta. |
ROUTE_TARGET |
gcp.apigee.route.target |
route.target |
Nome dell'endpoint di destinazione selezionato dalla regola di instradamento. |
TARGET_BASE_PATH |
gcp.apigee.target.basepath |
target.basepath |
La parte del percorso di base dell'URL di destinazione. |
TARGET_HOST |
server.address |
target.host |
Nome host del server di destinazione contattato dal proxy. |
TARGET_IP |
server.address |
target.ip |
Indirizzo IP risolto del server di destinazione. |
TARGET_NAME |
gcp.apigee.target.name |
target.name |
Nome dell'endpoint di destinazione definito nel proxy API. |
TARGET_PORT |
server.port |
target.port |
Porta TCP utilizzata per connettersi al server di destinazione. |
TARGET_RECEIVED_END_TIMESTAMP |
gcp.apigee.target.received_end_timestamp |
target.received.end.timestamp |
Timestamp (in millisecondi dell'epoca) in cui il proxy ha terminato di ricevere la risposta dal server di destinazione. |
TARGET_RECEIVED_START_TIMESTAMP |
gcp.apigee.target.received_start_timestamp |
target.received.start.timestamp |
Timestamp (in millisecondi epoch) in cui il proxy ha iniziato a ricevere la risposta dal server di destinazione. |
TARGET_SENT_END_TIMESTAMP |
gcp.apigee.target.sent_end_timestamp |
target.sent.end.timestamp |
Timestamp (millisecondi epoch) in cui il proxy ha terminato l'invio della richiesta al server di destinazione. |
TARGET_SENT_START_TIMESTAMP |
gcp.apigee.target.sent_start_timestamp |
target.sent.start.timestamp |
Timestamp (millisecondi epoch) in cui il proxy ha iniziato a inviare la richiesta al server di destinazione. |
TARGET_SSL_ENABLED |
gcp.apigee.target.ssl_enabled |
target.ssl.enabled |
Valore booleano che indica se la connessione al server di destinazione ha utilizzato TLS. |
TARGET_URL |
url.full |
target.url |
URL completo del server di destinazione contattato dal proxy. |
Variabili nell'intervallo
PROXY_POST_RESP_SENT
Le seguenti variabili sono visibili nello span
PROXY_POST_RESP_SENT. La colonna Variabile semantica OTEL
mostra il nome della convenzione semantica OpenTelemetry utilizzato quando
spanSemantics è impostato su OTEL; la
colonna Attributo mostra il nome dell'attributo legacy.
| Variabile legacy | Variabile semantica OTEL | Attributo | Descrizione |
|---|---|---|---|
API_PROXY_REVISION |
gcp.apigee.proxy.revision |
apiproxy.revision |
Numero di revisione del proxy API che ha gestito la richiesta. |
APIPROXY_NAME |
gcp.apigee.proxy.name |
apiproxy.name |
Nome del proxy API che ha gestito la richiesta. |
CLIENT_RECEIVED_END_TIMESTAMP |
gcp.apigee.client.received_end_timestamp |
client.received.end.timestamp |
Timestamp (millisecondi epoch) in cui il proxy ha terminato la ricezione della richiesta dal client. |
CLIENT_RECEIVED_START_TIMESTAMP |
gcp.apigee.client.received_start_timestamp |
client.received.start.timestamp |
Timestamp (in millisecondi dell'epoca) in cui il proxy ha iniziato a ricevere la richiesta dal client. |
CLIENT_SENT_END_TIMESTAMP |
gcp.apigee.client.sent_end_timestamp |
client.sent.end.timestamp |
Timestamp (in millisecondi epoch) in cui il proxy ha terminato l'invio della risposta al client. |
CLIENT_SENT_START_TIMESTAMP |
gcp.apigee.client.sent_start_timestamp |
client.sent.start.timestamp |
Timestamp (millisecondi epoch) in cui il proxy ha iniziato a inviare la risposta al client. |
ENVIRONMENT_NAME |
gcp.apigee.environment |
environment.name |
Il nome dell'ambiente Apigee in cui è stato eseguito il proxy. |
FAULT_SOURCE |
gcp.apigee.fault_source |
message.header.X-Apigee-fault-source |
Origine dell'errore quando si verifica un errore durante l'esecuzione del proxy. Valore compilato solo nei flussi di errore. |
IS_ERROR |
gcp.apigee.is_error |
is.error |
Valore booleano che indica se l'esecuzione del proxy è terminata con un flusso di errori. |
MESSAGE_ID |
gcp.apigee.message.id |
message.id |
Identificatore univoco assegnato da Apigee alla richiesta, utile per correlare log e intervalli di traccia. |
MESSAGE_STATUS_CODE |
http.response.status_code |
message.status.code |
Codice di stato della risposta finale, anche per le chiamate senza target e per i flussi di errori. |
PROXY_BASE_PATH |
http.route |
proxy.basepath |
Il percorso di base del proxy API che corrisponde alla richiesta in entrata. |
PROXY_CLIENT_IP |
client.address |
proxy.client.ip |
L'indirizzo IP del client che ha inviato la richiesta al proxy. |
PROXY_NAME |
gcp.apigee.proxy.name |
proxy.name |
Nome dell'endpoint proxy all'interno del proxy API che ha gestito la richiesta. |
PROXY_PATH_SUFFIX |
url.path |
proxy.pathsuffix |
Porzione del percorso dell'URL della richiesta che segue il percorso di base del proxy. |
PROXY_URL |
url.full |
proxy.url |
URL completo dell'endpoint proxy ricevuto dal client. |
Sistemi di tracciamento distribuito supportati
Puoi configurare il runtime Apigee per inviare i dati di traccia ai seguenti sistemi di tracciamento distribuito:
| Sistemi di tracciamento distribuito | Descrizione |
|---|---|
| Cloud Trace con OpenTelemetry | Ideale per gli utenti che vogliono una configurazione semplice con OpenTelemetry e il cui backend di tracciamento principale o unico è Cloud Trace. Per inviare i dati di traccia a Cloud Trace con OpenTelemetry: |
| OpenTelemetry Collector | Gestisci il tuo OpenTelemetry Collector per controllare la raccolta e l'elaborazione dei dati di traccia. Questa opzione è ideale se devi inviare dati a più sistemi (inclusi quelli non Google) o personalizzare il modo in cui i dati vengono elaborati, raggruppati o migliorati. Per inviare i dati di traccia a un agente di raccolta OpenTelemetry, procedi come segue:
Consulta Considerazioni sull'utilizzo di un collettore OpenTelemetry per i requisiti di raggiungibilità della rete, TLS e trasporto che devi soddisfare prima di abilitare questa opzione. |
| Cloud Trace con OpenCensus | Per inviare i dati di traccia a Cloud Trace con OpenCensus: |
| Jaeger con OpenCensus | Per inviare i dati di tracciamento a Jaeger con OpenCensus, attiva il tracciamento distribuito per Jaeger. |
Variabili di ambiente
Le procedure descritte in questa pagina utilizzano le seguenti variabili di ambiente. Ti consigliamo di impostarli nel tuo ambiente prima di iniziare.
TOKEN="Authorization: Bearer $(gcloud auth application-default print-access-token)"ENV_NAME=YOUR_ENVIRONMENT_NAMEPROJECT_ID=YOUR_GOOGLE_CLOUD_PROJECT_ID
Dove:
TOKENdefinisce l'intestazione di autenticazione con un token di connessione. Utilizzi questa intestazione quando chiami le API Apigee. Per ulteriori informazioni, consulta la pagina di riferimento per il comando print-access-token.ENV_NAMEè il nome di un ambiente della tua organizzazione.PROJECT_IDè l'ID del tuo progetto Google Cloud .
Configura il runtime Apigee per OpenTelemetry o OpenCensus
Il runtime Apigee supporta due standard di tracciamento: OpenTelemetry (consigliato per i nuovi deployment) e OpenCensus. Scegli lo standard di tracciamento più adatto al tuo ambiente, poi segui i passaggi di configurazione corrispondenti nella sezione seguente.
Per OpenTelemetry, il runtime Apigee riconosce il formato dell'intestazione del contesto di traccia W3C, incluse le intestazioni traceparent, tracestate e baggage.
Configura i prerequisiti per Cloud Trace (OpenTelemetry)
Il runtime Apigee (ApigeeX) supporta il tracciamento distribuito utilizzando Cloud Trace con OpenTelemetry. Se utilizzi un OpenTelemetry Collector gestito dal cliente, puoi saltare questa sezione e passare ad Abilitazione della tracciabilità distribuita per un OpenTelemetry Collector.
Configura il runtime ApigeeX per Cloud Trace
Per configurare il runtime Apigee per Cloud Trace, nel tuo progetto Google Cloud devono essere abilitate le seguenti API:
- API Cloud Trace (trace.googleapis.com)
- API Telemetry (telemetry.googleapis.com)
- API Service Usage (serviceusage.googleapis.com)
L'abilitazione di queste API consente al tuo progetto Google Cloud di ricevere dati di traccia tramite OpenTelemetry da origini autenticate.
Per abilitare le API:
- Nella console Google Cloud , vai ad API e servizi:
- Fai clic su Abilita API e servizi per aprire la libreria API.
- Dalla libreria API, abilita l'API Cloud Trace, l'API Telemetry e l'API Service Usage. Puoi trovare ogni
API cercandola per nome (ad esempio,
Telemetry API) dalla barra di ricerca della libreria API.
Oltre ad abilitare le API, devi concedere i seguenti ruoli all'account service agent:
roles/telemetry.tracesWriterroles/serviceusage.serviceUsageConsumer
Il account di servizio specifico dipende dall'ambiente Apigee:
- ApigeeX (non ibrido): concedi i ruoli al service agent Apigee, un account di servizio per prodotto e per progetto (P4SA) gestito da Google che Apigee esegue il provisioning automaticamente per il progetto. L'account
service agent ha il formato
service-PROJECT_NUMBER@gcp-sa-apigee.iam.gserviceaccount.com.
Consulta Concedi un ruolo IAM utilizzando la console Google Cloud .
Attiva il tracciamento distribuito (OpenTelemetry)
Prima di attivare la tracciabilità distribuita, crea le variabili di ambiente richieste.
Abilita il tracciamento distribuito per Cloud Trace
L'esempio seguente mostra come abilitare la tracciabilità distribuita per Cloud Trace con OpenTelemetry:
- Esegui questa chiamata API Apigee:
curl -H "$TOKEN" \ -H "Content-Type: application/json" \ https://apigee.googleapis.com/v1/organizations/$PROJECT_ID/environments/$ENV_NAME/traceConfig \ -X PATCH \ -d '{ "exporter":"OPEN_TELEMETRY_CLOUD_TRACE", "endpoint": "'"$PROJECT_ID"'", "samplingConfig": {"sampler": "PROBABILITY","samplingRate": 0.05}, "traceProtocol": "OTLP", "spanSemantics": "OTEL" }'Il corpo della richiesta di esempio è costituito dai seguenti elementi:
- Per supportare Cloud Trace con OpenTelemetry, il parametro
exporterè impostato suOPEN_TELEMETRY_CLOUD_TRACEe il parametrotraceProtocolè impostato suOTLP. samplingRateè impostato su 0,05. Ciò significa che circa il 5% delle chiamate API viene inviato a distributed tracing. Per OpenTelemetry, puoi specificare una frequenza di campionamento fino a1.0(100%). Per ulteriori informazioni, vedi Considerazioni sul rendimento.- Il parametro
endpointè impostato sull'ID progetto Google Cloud che deve ricevere i dati di traccia (una stringa ID progetto semplice, non un URL). - Il parametro
spanSemanticsè facoltativo e controlla la denominazione degli attributi e degli span utilizzati negli span emessi. Valori supportati:LEGACY(impostazione predefinita): utilizza l'attributo Apigee storico e i nomi degli intervalli mostrati nella colonna Attributo delle tabelle delle variabili.OTEL: utilizza i nomi delle convenzioni semantiche OpenTelemetry mostrati nella colonna Variabile semantica OTEL. Richiede chetraceProtocolsiaOTLP.
Una risposta corretta è simile alla seguente:
{ "exporter": "OPEN_TELEMETRY_CLOUD_TRACE", "endpoint": "my-gcp-project-id", "samplingConfig": { "sampler": "PROBABILITY", "samplingRate": 0.05 }, "traceProtocol": "OTLP", "spanSemantics": "OTEL" } - Per supportare Cloud Trace con OpenTelemetry, il parametro
Abilita il tracciamento distribuito per un collettore OpenTelemetry
Per abilitare la tracciabilità distribuita per un agente di raccolta OpenTelemetry gestito dal cliente, esegui questa chiamata API Apigee:
curl -H "$TOKEN" \
-H "Content-Type: application/json" \
https://apigee.googleapis.com/v1/organizations/$PROJECT_ID/environments/$ENV_NAME/traceConfig \
-X PATCH \
-d '{
"exporter":"OPEN_TELEMETRY_COLLECTOR",
"endpoint": "http://my-otel-collector.example.com:4318/v1/traces",
"samplingConfig": {"sampler": "PROBABILITY","samplingRate": 0.05},
"traceProtocol": "OTLP",
"spanSemantics": "OTEL"
}'Il corpo della richiesta di esempio è costituito dai seguenti elementi:
- Per supportare un raccoglitore OpenTelemetry gestito dal cliente, il parametro
exporterè impostato suOPEN_TELEMETRY_COLLECTORe il parametrotraceProtocolè impostato suOTLP. - Il parametro
endpointè impostato sull'URL HTTP/HTTPS completo dell'endpoint di inserimento OTLP di OpenTelemetry Collector (ad esempio,http://my-otel-collector.example.com:4318/v1/traces). A differenza dell'esportatore Cloud Trace, che accetta un ID progetto Google Cloud semplice, l'esportatoreOPEN_TELEMETRY_COLLECTORrichiede un URL completo che includa schema, host, porta e percorso. A differenza dell'endpoint Cloud Trace, il raccoglitore OpenTelemetryendpointè modificabile: puoi riconfigurarlo in un secondo momento con un altroPATCHpertraceConfig. samplingRateè impostato su 0,05. Ciò significa che circa il 5% delle chiamate API viene inviato a distributed tracing. Per ulteriori informazioni, vedi Considerazioni sul rendimento.- Il parametro
otelCollectorSecuritySchemeè facoltativo e il valore predefinito èNONE. Impostalo suMTLSper abilitare mutual TLS tra Apigee e l'agente di raccolta. Per i campimtlsConfigobbligatori e il corpo completo della richiesta API, consulta Configurare mTLS per un agente di raccolta OpenTelemetry.
Una risposta corretta è simile alla seguente:
{
"exporter": "OPEN_TELEMETRY_COLLECTOR",
"endpoint": "http://my-otel-collector.example.com:4318/v1/traces",
"samplingConfig": {
"sampler": "PROBABILITY",
"samplingRate": 0.05
},
"traceProtocol": "OTLP",
"spanSemantics": "OTEL"
}Considerazioni sull'utilizzo di un collettore OpenTelemetry
Prima di attivare la tracciabilità distribuita in un agente di raccolta OpenTelemetry gestito dal cliente, esamina i seguenti requisiti.
Connettività di rete
- Assicurati che Apigee possa raggiungere OpenTelemetry Collector.
- Per raggiungere un agente di raccolta non esposto su internet pubblico, utilizza Private Service Connect (PSC).
- Se nella configurazione è presente un proxy di inoltro, configurarlo in OpenTelemetry Collector. Le connessioni dal processore di messaggi al collettore OpenTelemetry sono sempre dirette.
Protocollo di trasporto
Per i raccoglitori OpenTelemetry è supportato solo il trasporto OTLP/HTTP
(porta 4318 e percorso /v1/traces per convenzione OTLP).
OTLP/gRPC (porta 4317) non è supportato.
TLS e mTLS
Apigee supporta due schemi di sicurezza per la connessione a un collettore OpenTelemetry, impostati tramite otelCollectorSecurityScheme su traceConfig:
- Nessuna sicurezza (HTTP) (
NONE, impostazione predefinita): Apigee si connette all'agente di raccolta tramite HTTP senza mutual TLS. - mTLS (
MTLS): mutual TLS, in modo che l'agente di raccolta possa anche autenticare Apigee come client. Per abilitare mTLS, impostaotelCollectorSecuritySchemesuMTLSsutraceConfige fornisci unmtlsConfigche faccia riferimento ai keystore e ai truststore gestiti da Apigee. Per la configurazione end-to-end, vedi Configura mTLS per un agente di raccolta OpenTelemetry.
Configura mTLS per un agente di raccolta OpenTelemetry
mutual TLS (mTLS) consente a OpenTelemetry Collector di autenticare il runtime Apigee come client, oltre ad Apigee che convalida il certificato server dell'agente di raccolta.
Prima di configurare mTLS, verifica i seguenti prerequisiti:
- Il raccoglitore è configurato per richiedere l'autenticazione del certificato client
(ad esempio, l'impostazione
tls.client_ca_filedi OpenTelemetry Collector) e viene implementato con un file dell'autorità di certificazione (CA) che contiene la catena di certificati che carichi nel passaggio 1 della configurazione. endpointutilizza lo schemahttps://.- Il valore
exporterèOPEN_TELEMETRY_COLLECTORe il valoretraceProtocolèOTLP. mTLS non viene applicato all'esportatoreOPEN_TELEMETRY_CLOUD_TRACE, che esegue l'autenticazione utilizzando Google Cloud OAuth.
Passaggio 1: carica la chiave e il certificato client
Crea un archivio chiavi per il certificato client Apigee che il collector autentica, quindi carica la chiave e il certificato come alias:
curl -H "$TOKEN" \
-H "Content-Type: application/json" \
https://apigee.googleapis.com/v1/organizations/$PROJECT_ID/environments/$ENV_NAME/keystores \
-X POST \
-d '{ "name": "otel-mtls" }'
curl -H "$TOKEN" \
"https://apigee.googleapis.com/v1/organizations/$PROJECT_ID/environments/$ENV_NAME/keystores/otel-mtls/aliases?alias=mp-client&format=keycertfile" \
-X POST \
-F "keyFile=@client.key" \
-F "certFile=@client.crt"Il file client.crt deve essere firmato da un'autorità di certificazione
considerata attendibile da tls.client_ca_file del raccoglitore. Per una
configurazione autofirmata, client.crt può essere lo stesso file che
l'agente di raccolta utilizza come client_ca_file.
Passaggio 2: carica il certificato del server del raccoglitore
Crea un truststore che il runtime Apigee utilizza per convalidare il certificato server del raccoglitore, quindi carica il certificato CA del raccoglitore come alias CERT:
curl -H "$TOKEN" \
-H "Content-Type: application/json" \
https://apigee.googleapis.com/v1/organizations/$PROJECT_ID/environments/$ENV_NAME/keystores \
-X POST \
-d '{ "name": "otel-mtls-truststore" }'
curl -H "$TOKEN" \
"https://apigee.googleapis.com/v1/organizations/$PROJECT_ID/environments/$ENV_NAME/keystores/otel-mtls-truststore/aliases?alias=server-ca&format=keycertfile" \
-X POST \
-F "certFile=@server-ca.pem"Passaggio 3: attiva mTLS su traceConfig
APPLICA UNA PATCH a traceConfig per impostare lo schema di sicurezza su
MTLS e fai riferimento al keystore e al truststore che hai appena
creato:
curl -H "$TOKEN" \
-H "Content-Type: application/json" \
https://apigee.googleapis.com/v1/organizations/$PROJECT_ID/environments/$ENV_NAME/traceConfig \
-X PATCH \
-d '{
"exporter": "OPEN_TELEMETRY_COLLECTOR",
"endpoint": "https://my-otel-collector.example.com:4318/v1/traces",
"traceProtocol": "OTLP",
"spanSemantics": "OTEL",
"otelCollectorSecurityScheme": "MTLS",
"mtlsConfig": {
"keyStore": "otel-mtls",
"keyAlias": "mp-client",
"trustStore": "otel-mtls-truststore"
}
}'L'oggetto mtlsConfig ha tre campi obbligatori:
keyStore: il nome del keystore che contiene la chiave e il certificato client Apigee del passaggio 1 (ad esempio,otel-mtls). Per utilizzare un riferimento Apigee, specificaref://REFERENCE_NAME.keyAlias: il nome dell'alias KEY_CERT all'interno dikeyStore(ad esempio,mp-client).trustStore: il nome del keystore che contiene il certificato CA server del raccoglitore del passaggio 2 (ad es.otel-mtls-truststore). Per utilizzare invece un riferimento Apigee, specificaref://REFERENCE_NAME.
Apigee applica la seguente convalida a
traceConfig quando otelCollectorSecurityScheme è
MTLS:
exporterdeve essereOPEN_TELEMETRY_COLLECTOR.traceProtocoldeve essereOTLP.endpointdeve utilizzare lo schemahttps://.- Tutti e tre i campi
mtlsConfigdevono essere compilati. Se manca un campo, viene restituito l'errore HTTP 400. - Gli archivio chiavi, gli alias e i riferimenti a cui viene fatto riferimento devono già esistere. Le risorse mancanti restituiscono HTTP 400.
Ruotare la chiave o il certificato client
Per ruotare la chiave o il certificato client senza una modifica traceConfig, carica il nuovo materiale della chiave nell'alias mp-client esistente con un PUT:
curl -H "$TOKEN" \
"https://apigee.googleapis.com/v1/organizations/$PROJECT_ID/environments/$ENV_NAME/keystores/otel-mtls/aliases/mp-client" \
-X PUT \
-F "keyFile=@client-v2.key" \
-F "certFile=@client-v2.crt"Il runtime Apigee rileva la modifica della revisione dell'alias alla successiva sincronizzazione della configurazione e ricompila l'esportatore OTLP mTLS con le nuove credenziali. Non è richiesto il riavvio del pod e non vengono eliminate richieste in corso.
Criteri di campionamento
Il runtime Apigee decide se registrare una traccia per ogni richiesta combinando le intestazioni delle richieste in entrata con la configurazione delle tracce dell'ambiente.
Intestazione del contesto della traccia W3C
Nella configurazione di OpenTelemetry, il runtime rispetta l'intestazione
Contesto di traccia W3C traceparent. L'ultimo byte di
traceparent (il byte trace-flags) contiene il flag
sampled: un valore pari a 01 indica che il chiamante
ha già deciso di registrare la traccia, mentre 00 indica che
non l'ha fatto.
Le raccomandazioni
per il flag di campionamento della specifica del contesto di traccia W3C consigliano a un componente di rispettare il flag di campionamento in entrata quando prende una decisione di registrazione e di riflettere una decisione di registrazione definitiva nel flag. Apigee segue questi consigli: rispetta
il flag di campionamento in entrata quando decide se registrare una traccia (vedi
Precedenza dell'intestazione rispetto alla configurazione locale) e
imposta il flag di campionamento nell'intestazione traceparent che propaga ai
servizi downstream per indicare se la richiesta viene registrata. Come
controllo di sicurezza contro il tracciamento indesiderato attivato dal flag in entrata, imposta
sampler su OFF (vedi
Disattivare la configurazione del tracciamento distribuito), che disattiva il tracciamento anche per le richieste il cui
traceparent ha il flag di campionamento impostato.
Precedenza dell'intestazione sulla configurazione locale
Quando una richiesta in entrata include un'intestazione traceparent, il runtime Apigee utilizza il flag di campionamento di questa intestazione anziché il proprio samplingConfig locale. Una richiesta con il flag di campionamento impostato su
01 viene sempre tracciata; una richiesta con il flag impostato su
00 non viene tracciata. samplingConfig a livello di ambiente si applica solo alle richieste che arrivano senza un'intestazione traceparent.
Disattivare la traccia
Per disattivare la tracciabilità per ogni proxy in un ambiente
(esclude gli override del proxy), imposta
sampler su OFF nell'ambiente
traceConfig. Consulta
Disattivare la configurazione
del tracciamento distribuito.
Override per proxy
Per attivare la tracciabilità solo per un sottoinsieme di proxy in un ambiente, lascia
l'ambiente samplingConfig con sampler impostato
su OFF e crea un override per proxy (con
sampler impostato su PROBABILITY e un valore
samplingRate diverso da zero) per ogni proxy che vuoi tracciare. Consulta
Ignora le impostazioni di traccia per i proxy API.
Impatto sul rendimento della frequenza di campionamento
Il samplingRate che configuri influisce direttamente sulle prestazioni
del runtime. Ogni richiesta campionata comporta un lavoro aggiuntivo della CPU sul processore di messaggi (generazione ed esportazione degli span) e aggiunge latenza al percorso della richiesta.
All'aumentare della frequenza di campionamento, aumenta anche il volume del traffico tracciato per MP,
il che può ridurre il throughput e aumentare la latenza finale (p95, p99). L'impatto
aumenta con il volume di traffico: a basse velocità di richiesta il sovraccarico è in genere
trascurabile, mentre ad alte velocità di richiesta un elevato tasso di campionamento può ridurre in modo significativo
la velocità effettiva sostenibile e richiedere una capacità MP aggiuntiva. Nei
benchmark interni, l'esecuzione a samplingRate=1.0 (campionamento al 100%)
in condizioni di traffico intenso e sostenuto ha ridotto il throughput fino a circa il 15%
rispetto all'esecuzione con la tracciabilità disattivata.
Come linea guida generale, mantieni samplingRate basso
(ad esempio, 0.1 o inferiore) in produzione e aumentalo solo
per proxy specifici tramite
override per proxy quando hai bisogno
di una visibilità più approfondita. Per un'analisi dettagliata dell'impatto previsto e
delle indicazioni sulla capacità, consulta
Considerazioni sul rendimento.
Considerazioni sulle prestazioni
Quando abiliti la tracciabilità distribuita per un ambiente runtime Apigee, è previsto un impatto sul rendimento. L'impatto può comportare un aumento dell'utilizzo della memoria, dei requisiti della CPU e della latenza. L'entità dell'impatto dipende dalla complessità del proxy API (ad esempio, il numero di policy), dalla frequenza di campionamento probabilistico (impostata come samplingRate) e, soprattutto, dal volume di traffico tracciato rispetto alla capacità di esportazione degli intervalli per processore di messaggi (MP).
L'MP di Apigee ha una velocità di esportazione dello span finita. Con la configurazione predefinita, un singolo MP può esportare in modo sostenibile circa 820 intervalli al secondo. L'esecuzione di un tipico proxy API genera circa 10 intervalli (pre-flusso proxy, flusso di destinazione, post-flussi, criteri collegati), quindi un singolo MP può tracciare in modo sostenibile circa 82 richieste al secondo con un campionamento del 100%. L'aumento del conteggio delle repliche MP incrementa il limite aggregato in modo lineare.
La seguente tabella riassume l'impatto previsto a
samplingRate=1.0 (probabilità del 100%) in due regimi di traffico:
| Regime di traffico (per MP) | Impatto previsto alle ore samplingRate=1.0 |
Azione consigliata |
|---|---|---|
| Traffico scorrevole (meno di circa 82 richieste tracciate al secondo per MP) | Il throughput diminuisce di circa l'1-2%; la latenza media aumenta di circa l'1%; la latenza p99 aumenta di circa il 15-20%. Trascurabile nella pratica. | È sicuro abilitare l'impostazione al 100%. |
| Traffico intenso (molto al di sopra di circa 82 richieste tracciate al secondo per MP) | Il throughput diminuisce di circa il 14%; la latenza media aumenta di circa il 24%; la latenza p75 aumenta di circa il 52%; il tasso di errore aumenta di circa 1 punto percentuale. | Abbassa samplingRate (ad esempio, a
0.1 o 0.05) o fai lo scale up del numero di repliche MP in modo che ogni MP gestisca un numero inferiore di richieste tracciate al secondo. |
Per gli ambienti con requisiti di traffico elevato e bassa latenza, il
tasso di campionamento probabilistico consigliato è inferiore o uguale al 10%. Se vuoi utilizzare il tracciamento distribuito per la risoluzione dei problemi, valuta la possibilità di aumentare il campionamento probabilistico (samplingRate) solo per proxy API specifici tramite override per proxy.
Configura i runtime Apigee per Cloud Trace (OpenCensus)
Sia il runtime Apigee che il runtime Apigee hybrid supportano il tracciamento distribuito utilizzando Cloud Trace con OpenCensus. Se utilizzi Jaeger, puoi saltare questa sezione e passare ad Abilitare il tracciamento distribuito per Jaeger con OpenCensus.
Configura il runtime Apigee per Cloud Trace
Per configurare il runtime Apigee per Cloud Trace, il tuo progetto Google Cloud deve avere l'API Cloud Trace abilitata.
Per abilitare l'API:
- Nella console Google Cloud , vai ad API e servizi:
- Fai clic su Abilita API e servizi.
- Abilita l'API Cloud Trace.
Configura il runtime di Apigee hybrid per Cloud Trace
Per configurare il runtime di Apigee hybrid per Cloud Trace, abilita l'API Cloud Trace.
Oltre ad attivare l'API, devi aggiungere il account di servizio iam.gserviceaccount.com per utilizzare Cloud Trace con il runtime ibrido. Per aggiungere il service account, insieme al ruolo e alle chiavi roles/cloudtrace.agent richiesti, segui questi passaggi:
- Crea un nuovo account di servizio:
gcloud iam service-accounts create \ apigee-runtime --display-name "Service Account Apigee hybrid runtime" \ --project PROJECT_ID - Aggiungi un'associazione della policy IAM al account di servizio:
gcloud projects add-iam-policy-binding \ PROJECT_ID --member "serviceAccount:apigee-runtime@PROJECT_ID.iam.gserviceaccount.com" \ --role=roles/cloudtrace.agent --project PROJECT_ID - Crea una chiave account di servizio e aggiorna
overrides.yamlcome descritto nei passaggi seguenti. - Crea una chiave dell'account di servizio:
gcloud iam service-accounts keys \ create ~/apigee-runtime.json --iam-account apigee-runtime@PROJECT_ID.iam.gserviceaccount.com - Aggiungi il account di servizio al file
overrides.yaml.envs: - name: ENV_NAME serviceAccountPaths: runtime: apigee-runtime.json synchronizer: apigee-sync.json udca: apigee-udca.json - Applica le modifiche al runtime utilizzando
Helm:
helm upgrade ENV_NAME apigee-env/ \ --namespace APIGEE_NAMESPACE \ --set env=ENV_NAME \ --atomic \ -f overrides.yaml
Attivare il tracciamento distribuito (OpenCensus)
Prima di attivare la tracciabilità distribuita, crea le variabili di ambiente richieste.
Abilita il tracciamento distribuito per Cloud Trace con OpenCensus
Il seguente esempio mostra come attivare il tracciamento distribuito per Cloud Trace con OpenCensus:
- Esegui questa chiamata API Apigee:
curl -H "$TOKEN" \ -H "Content-Type: application/json" \ https://apigee.googleapis.com/v1/organizations/$PROJECT_ID/environments/$ENV_NAME/traceConfig \ -X PATCH \ -d '{ "exporter":"CLOUD_TRACE", "endpoint": "'"$PROJECT_ID"'", "samplingConfig": {"sampler": "PROBABILITY","samplingRate": 0.1} }'Il corpo della richiesta di esempio è costituito dai seguenti elementi:
- Per supportare Cloud Trace, il parametro
exporterè impostato suCLOUD_TRACE. Il parametrotraceProtocol, che non è specificato, ha come valore predefinitoOpenCensus. - Il parametro
endpointè impostato sul progetto Google Cloud in cui vuoi che venga inviata la traccia. samplingRateè impostato su 0,1. Ciò significa che circa il 10% delle chiamate API viene inviato a Distributed Tracing. Per OpenCensus, la frequenza di campionamento massima configurabile è0.5.
Una risposta corretta è simile alla seguente:
{ "exporter": "CLOUD_TRACE", "endpoint": "staging", "samplingConfig": { "sampler": "PROBABILITY", "samplingRate": 0.1 } } - Per supportare Cloud Trace, il parametro
Attiva il tracciamento distribuito per Jaeger con OpenCensus
L'esempio seguente mostra come abilitare la tracciabilità distribuita per Jaeger:
curl -s -H "$TOKEN" \
https://apigee.googleapis.com/v1/organizations/$PROJECT_ID/environments/$ENV_NAME/traceConfig \
-X PATCH \
-H "content-type:application/json" -d '{
"samplingConfig": {
"samplingRate": 0.4,
"sampler": "PROBABILITY"},
"endpoint": "http://DOMAIN:9411/api/v2/spans",
"exporter": "JAEGER"
}'In questo esempio:
- Per supportare Jaeger, il parametro
exporterè impostato suJAEGER. Il parametrotraceProtocol, che non è specificato, ha come valore predefinitoOpenCensus. - Il parametro
endpointè impostato sulla posizione in cui è installato e configurato Jaeger. samplingRateè impostato su 0,4. Ciò significa che circa il 40% delle chiamate API viene inviato a Distributed Tracing.
Quando abiliti la tracciabilità distribuita per un ambiente runtime Apigee, è previsto un impatto sul rendimento. L'impatto
può comportare un aumento della memoria utilizzata, dei requisiti della CPU e della latenza.
L'entità dell'impatto dipenderà in parte dalla complessità del proxy API (ad esempio, il numero di policy) e dalla
frequenza di campionamento probabilistico (impostata come samplingRate). Maggiore è la frequenza di campionamento, maggiore è l'impatto sulle prestazioni.
Per ulteriori informazioni, vedi Considerazioni sul rendimento.
Visualizzare la configurazione del tracciamento distribuito
Per visualizzare la configurazione di tracciamento distribuito esistente nel runtime, accedi al runtime ed esegui questo comando:
curl -H "$TOKEN" \
-H "Content-Type: application/json" \
https://apigee.googleapis.com/v1/organizations/$PROJECT_ID/environments/$ENV_NAME/traceConfigQuando esegui il comando, puoi visualizzare una risposta simile alla seguente:
{
"exporter": "CLOUD_TRACE",
"endpoint": "my-gcp-project-id",
"samplingConfig": {
"sampler": "PROBABILITY",
"samplingRate": 0.1
},
"revisionId": "7",
"updateTime": "2026-06-08T14:25:13.512000Z"
}revisionId aumenta a ogni aggiornamento riuscito e
updateTime riflette il timestamp del server della modifica più recente. Utilizza questi due campi per confermare che il control plane ha accettato un aggiornamento della configurazione. Entrambi vengono restituiti anche dalla risposta PATCH .../traceConfig.
Aggiorna la configurazione del tracciamento distribuito
Il seguente comando mostra come aggiornare la configurazione di tracciamento distribuito esistente per Cloud Trace:
curl -H "$TOKEN" \
-H "Content-Type: application/json" \
https://apigee.googleapis.com/v1/organizations/$PROJECT_ID/environments/$ENV_NAME/traceConfig \
-X PATCH \
-d '{
"samplingConfig": {"sampler": "PROBABILITY","samplingRate": 0.6}
}'Quando esegui il comando, puoi visualizzare una risposta simile alla seguente:
{
"samplingConfig": {
"sampler": "PROBABILITY",
"samplingRate": 0.6
},
"traceProtocol": "OTLP"
}0.6.
Disattiva la configurazione del tracciamento distribuito
L'esempio seguente mostra come disattivare la tracciabilità distribuita configurata per Cloud Trace:
curl -H "$TOKEN" \
-H "Content-Type: application/json" \
https://apigee.googleapis.com/v1/organizations/$PROJECT_ID/environments/$ENV_NAME/traceConfig \
-X PATCH \
-d '{
"samplingConfig": {"sampler": "OFF"}
}'Quando esegui il comando, puoi visualizzare una risposta simile alla seguente:
{
"samplingConfig": {
"sampler": "OFF"
},
"traceProtocol": "OTLP"
}Eseguire l'override delle impostazioni di traccia per i proxy API
Quando abiliti il tracciamento distribuito nel runtime Apigee, tutti i proxy API nel runtime utilizzano la stessa configurazione per il tracciamento. Tuttavia, puoi ignorare la configurazione del tracciamento distribuito per un proxy API o un gruppo di proxy API. In questo modo avrai un controllo più granulare sulla configurazione della tracciatura.
L'esempio seguente esegue l'override della configurazione di tracciamento distribuito per il proxy API hello-world:
curl -s -H "$TOKEN" \
https://apigee.googleapis.com/v1/organizations/$PROJECT_ID/environments/$ENV_NAME/traceConfig/overrides \
-X POST \
-H "content-type:application/json" \
-d '{"apiProxy": "hello-world","samplingConfig": {"sampler": "PROBABILITY","samplingRate": 0.1}}'Puoi ignorare la configurazione per risolvere i problemi specifici di un proxy API senza dover modificare la configurazione di tutti i proxy API.
Aggiornare gli override delle impostazioni di tracciamento
Per aggiornare l'override della configurazione di tracciamento per un proxy API o un gruppo di proxy API, segui questi passaggi:
- Utilizza il seguente comando per recuperare eventuali override esistenti della configurazione di tracciamento:
curl -s -H "$TOKEN" \ https://apigee.googleapis.com/v1/organizations/$PROJECT_ID/environments/$ENV_NAME/traceConfig/overrides \ -X GETQuesto comando dovrebbe restituire una risposta simile alla seguente, che contiene un campo "name" che identifica il proxy o i proxy regolati dall'override:
{ "traceConfigOverrides": [ { "name": "dc8437ea-4faa-4b57-a14f-4b8d3a15fec1", "apiProxy": "proxy1", "samplingConfig": { "sampler": "PROBABILITY", "samplingRate": 0.25 } } ] } - Per aggiornare il proxy, utilizza il valore del campo "name" per inviare una richiesta POST alla configurazione di override per
quel proxy,insieme ai valori dei campi aggiornati. Ad esempio:
curl -s -H "$TOKEN" \ https://apigee.googleapis.com/v1/organizations/$PROJECT_ID/environments/$ENV_NAME/traceConfig/overrides/dc8437ea-4faa-4b57-a14f-4b8d3a15fec1 \ -X POST \ -H "content-type:application/json" \ -d '{"apiProxy": "proxy1","samplingConfig": {"sampler": "PROBABILITY","samplingRate": 0.05}}'
Elimina gli override delle impostazioni di traccia
Per eliminare una sostituzione della configurazione di tracciamento per un proxy API o un gruppo di proxy API, segui questi passaggi:
- Utilizza il seguente comando per recuperare eventuali override esistenti della configurazione di tracciamento:
curl -s -H "$TOKEN" \ https://apigee.googleapis.com/v1/organizations/$PROJECT_ID/environments/$ENV_NAME/traceConfig/overrides \ -X GETQuesto comando dovrebbe restituire una risposta simile alla seguente, che contiene un campo "name" che identifica il proxy o i proxy regolati dall'override:
{ "traceConfigOverrides": [ { "name": "dc8437ea-4faa-4b57-a14f-4b8d3a15fec1", "apiProxy": "proxy1", "samplingConfig": { "sampler": "PROBABILITY", "samplingRate": 0.25 } } ] } - Per eliminare il proxy, utilizza il valore del campo "name" per inviare una richiesta DELETE alla configurazione di override per
quel proxy,insieme ai valori dei campi aggiornati. Ad esempio:
curl -s -H "$TOKEN" \ https://apigee.googleapis.com/v1/organizations/$PROJECT_ID/environments/$ENV_NAME/traceConfig/overrides/dc8437ea-4faa-4b57-a14f-4b8d3a15fec1 \ -X DELETE \
Risolvere i problemi di tracciamento distribuito
Per risolvere i problemi relativi al tracciamento distribuito:
- Verifica la configurazione del tracciamento distribuito utilizzando l'API
traceConfigper assicurarti che corrisponda alle tue esigenze. - Verifica che il account di servizio disponga delle autorizzazioni IAM (ruoli) corrette nel progetto di destinazione.
- Se utilizzi Cloud Trace con OpenTelemetry, controlla gli intervalli in entrata e gli errori relativi all'abilitazione dell'API o alla quota.
- Se utilizzi un agente di raccolta OpenTelemetry gestito dal cliente, segui questi passaggi:
- Verifica che Apigee possa raggiungere l'endpoint dell'agente di raccolta. Se utilizzato, controlla la configurazione di Private Service Connect (PSC).
- Controlla i log di OpenTelemetry Collector per problemi di dati o di connessione.
- Assicurati che il certificato TLS del raccoglitore sia valido.
- Esamina i log del runtime Apigee per individuare gli errori di esportazione delle tracce.