Cloud Trace e Cloud Service Mesh
Cloud Trace è un sistema di monitoraggio distribuito che raccoglie i dati di latenza delle applicazioni e li visualizza quasi in tempo reale. Ti consente di seguire una richiesta di esempio tramite il tuo sistema distribuito, di osservare le chiamate di rete e di fornire una descrizione end-to-end del tuo sistema.
Cloud Trace è disponibile per le installazioni di Cloud Service Mesh nei seguenti paesi: piattaforme:
- GKE su Google Cloud
- Cluster GKE Enterprise on-premise se li hai installati con la CA Cloud Service Mesh
Tieni presente che Cloud Trace è disattivato per impostazione predefinita. Una volta abilitato, Cloud Service Mesh pagine della console Google Cloud forniscono un link alle tracce pagina Cloud Trace . Per informazioni dettagliate sui prezzi, consulta la pagina dei prezzi di Cloud Trace.
Abilita Cloud Trace
Questa sezione mostra come attivare Cloud Trace.
Gestito
Questa sezione mostra come attivare Cloud Trace su Cloud Service Mesh gestito.
Esegui questo comando:
cat <<EOF | kubectl apply -f - apiVersion: v1 data: mesh: |- defaultConfig: tracing: stackdriver: {} kind: ConfigMap metadata: name: istio-release-channel namespace: istio-system EOF
dove release-channel è il tuo canale di rilascio (
asm-managed
,asm-managed-stable
oasm-managed-rapid
).Esegui questo comando per visualizzare il file configmap:
kubectl get configmap istio-release-channel -n istio-system -o yaml
Per verificare che Cloud Trace sia abilitato, assicurati che il parametro le seguenti righe vengono visualizzate nella sezione
mesh:
.... apiVersion: v1 data: mesh: | .... defaultConfig: tracing: stackdriver:{} ...
Riavvia i proxy.
Tieni presente che la configurazione del rilevatore fa parte del bootstrap del proxy configurazione, perciò ogni pod deve essere riavviato e inserito di nuovo per essere selezionato l'aggiornamento del tracciamento. Ad esempio, puoi utilizzare il seguente comando per riavviare i pod che appartengono a un deployment:
kubectl rollout restart deployment -n NAMESPACE DEPLOYMENT_NAME
All'interno del cluster
Questa sezione mostra come abilitare Cloud Trace in Cloud Service Mesh nel cluster.
Per abilitare Cloud Trace, riesegui il deployment del piano di controllo gestito dal cliente utilizzando il seguente file di overlay. Per ulteriori informazioni sui file di overlay, vedi Informazioni sui file di overlay.
Predefinito
Esegui questo comando per abilitare Cloud Trace:
./asmcli install \
OTHER_FLAGS \
--option cloud-trace
Questo comando applica il seguente file di overlay per abilitare il tracciamento con
opzioni predefinite. Tieni presente che la frequenza di campionamento predefinita è 1%. Se vuoi
eseguire l'override del valore predefinito, devi utilizzare invece --custom-overlay
.
apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
spec:
meshConfig:
enableTracing: true
values:
global:
proxy:
tracer: stackdriver
Per un elenco di opzioni, vedi
anthos-service-mesh
.
Personalizzato
Puoi eseguire l'override del valore predefinito specificando un valore tracing.sampling
. La
deve essere compreso tra 0,0 e 100,0 con una precisione di 0,01. Per
Ad esempio, per tracciare 5 richieste ogni 10.000,usa 0, 05.
L'esempio seguente mostra una frequenza di campionamento del 100% (che eseguiresti solo per scopi di dimostrazione o risoluzione dei problemi).
apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
spec:
meshConfig:
enableTracing: true
defaultConfig:
tracing:
sampling: 100
values:
global:
proxy:
tracer: stackdriver
Esegui questo comando per abilitare Cloud Trace:
./asmcli install \
OTHER_FLAGS \
--custom_overlay PATH_TO_FILE
Tieni presente che la configurazione del tracker fa parte della configurazione di bootstrap del proxy, quindi i pod devono essere riavviati e reintrodotti per rilevare l'aggiornamento del tracker. Utilizza le funzionalità di il comando seguente per riavviare i pod che appartengono a un deployment:
kubectl rollout restart deployment -n NAMESPACE DEPLOYMENT_NAME
Propagazione contesto traccia
Sebbene i proxy sidecar possano inviare automaticamente gli intervalli della traccia, hanno bisogno di alcuni suggerimenti per collegare l'intera traccia. Le applicazioni devono propagare le intestazioni HTTP appropriate in modo che, quando i proxy inviano informazioni sugli span, gli span possano essere correlati correttamente in una singola traccia.
Per fare ciò, un'applicazione deve raccogliere e propagare le intestazioni appropriate dalla richiesta in entrata a qualsiasi richiesta in uscita. Stackdriver Cloud Service Mesh Stackdriver di tracciamento accetterà uno dei seguenti formati di intestazione e propaga tutti i seguenti formati:
- B3 (
x-b3-traceid
,x-b3-spanid
,x-b3parentspanid
,x-b3-sampled
,x-b3-flags
) - TraceContext W3C (
traceparent
) - Google Cloud Trace (
x-cloud-trace-context
) - TraceBin gRPC (
grpc-trace-bin
)
Ciò significa che le applicazioni possono utilizzare uno qualsiasi di questi formati per propagare il contesto di tracciamento e le tracce verranno generate e impostate su Stackdriver in modo appropriato.
Esempio
Ecco un esempio di richiesta HTTP-Get con un'intestazione traceparent
nella versione originale
richiesta. Osserva le intestazioni aggiuntive del contesto della traccia aggiunte dal proxy.
$ kubectl exec -it sleep-557747455f-n6flv -- curl "httpbin:8000/anything?freeform=" -H "accept: application/json" -H "Traceparent: 00-7543d15e09e5d61801d4f74cde1269b8-604ef051d35c5b3f-01" -vv
* Trying 10.12.3.52:8000...
* Connected to httpbin (10.12.3.52) port 8000 (#0)
> GET /anything?freeform= HTTP/1.1
> Host: httpbin:8000
> User-Agent: curl/7.80.0-DEV
> accept: application/json
> Traceparent: 00-7543d15e09e5d61801d4f74cde1269b8-604ef051d35c5b3f-01
>
* Mark bundle as not supporting multiuse
< HTTP/1.1 200 OK
< server: envoy
< date: Wed, 10 Nov 2021 20:36:04 GMT
< content-type: application/json
< content-length: 1032
< access-control-allow-origin: *
< access-control-allow-credentials: true
< x-envoy-upstream-service-time: 5
<
{
"args": {
"freeform": ""
},
"data": "",
"files": {},
"form": {},
"headers": {
"Accept": "application/json",
"Grpc-Trace-Bin": "AAB1Q9FeCeXWGAHU90zeEmm4AaDHmGRtdM7wAgE",
"Host": "httpbin:8000",
"Traceparent": "00-7543d15e09e5d61801d4f74cde1269b8-a0c798646d74cef0-01",
"User-Agent": "curl/7.80.0-DEV",
"X-B3-Sampled": "1",
"X-B3-Spanid": "a0c798646d74cef0",
"X-B3-Traceid": "7543d15e09e5d61801d4f74cde1269b8",
"X-Cloud-Trace-Context": "7543d15e09e5d61801d4f74cde1269b8/11585396123534413552;o=1",
"X-Envoy-Attempt-Count": "1",
"X-Forwarded-Client-Cert": "<REDACTED>"
},
"json": null,
"method": "GET",
"origin": "127.0.0.6",
"url": "http://httpbin:8000/anything?freeform="
}
Nota che nell'insieme di intestazioni delle richieste restituito, l'insieme completo o intestazioni di contesto.
Per altri esempi di propagazione delle intestazioni, consulta Propagazione del contesto di tracciamento.
Crea una traccia dal client con ID personalizzato
Per creare una traccia da un client con un ID personalizzato, utilizza il comando curl
per creare una richiesta con un client esterno e forzarlo a mostrare una traccia. Ad esempio:
curl $URL --header "x-client-trace-id: 105445aa7843bc8bf206b12000100000"
Per ulteriori informazioni su x-client-trace-id
, consulta le
Documentazione di Envoy.
Accedere alle tracce
Visualizzare i campioni di traccia per un servizio
Per visualizzare un campione di tracce per un servizio nella tua app, segui questi passaggi:
Vai alla pagina Cloud Service Mesh nella console Google Cloud.
In Servizi, seleziona il nome del servizio che vuoi ispezionare.
Lo screenshot seguente mostra un esempio di servizio
frontend
.In Richiedi tracce, fai clic su una traccia per visualizzare ulteriori informazioni.
Lo screenshot seguente mostra un esempio del riquadro secondario della richiesta di traccia.
Visualizza tutte le tracce
Per visualizzare tutte le tracce per un servizio, segui questi passaggi:
Vai alla pagina Cloud Service Mesh nella console Google Cloud.
Nella sezione Servizi, seleziona il nome del servizio che vuoi ispezionare.
Vai alla pagina Metriche.
Specifica un intervallo di tempo dal menu a discesa Intervallo di tempo oppure impostare un intervallo personalizzato con la sequenza temporale.
Fai clic su Visualizza tracce.
Le tracce di un servizio in Cloud Service Mesh contengono le seguenti informazioni:
- Latenze di richiesta nei diversi servizi della mesh.
- Proprietà della richiesta HTTP, tra cui ID, URL, dimensioni, latenza e protocollo.
- Nome servizio, spazio dei nomi e ID mesh come parte delle etichette
istio.canonical_service
,istio.namespace
eistio.mesh_id
, rispettivamente.