Cloud Trace e Cloud Service Mesh

Cloud Trace è un sistema di tracciamento distribuito che raccoglie i dati di latenza dalle applicazioni e li visualizza quasi in tempo reale. Consente seguire una richiesta di esempio attraverso il sistema distribuito, osserva le chiamate di rete e la profilazione del tuo sistema end-to-end.

Cloud Trace è disponibile per le installazioni di Cloud Service Mesh nel seguenti piattaforme:

  • GKE su Google Cloud
  • di cluster GKE Enterprise on-premise Autorità di certificazione Cloud Service Mesh

Tieni presente che Cloud Trace è disabilitato per impostazione predefinita. Una volta attivata la funzionalità, Le pagine Cloud Service Mesh nella console Google Cloud forniscono un link nella pagina Cloud Trace . Per informazioni più dettagliate sui prezzi, consulta la pagina dei prezzi di Cloud Trace.

Abilita Cloud Trace

Questa sezione mostra come abilitare Cloud Trace.

Gestito (TD)

Questa sezione mostra come abilitare Cloud Trace su Cloud Service Mesh con un piano di controllo Cloud Service Mesh gestito.

  1. Esegui questo comando per abilitare Cloud Trace:

    cat <<EOF | kubectl apply -n istio-system -f -
    apiVersion: telemetry.istio.io/v1alpha1
    kind: Telemetry
    metadata:
       name: enable-cloud-trace
       namespace: istio-system
    spec:
       tracing:
       - providers:
         - name: stackdriver
    EOF
    

Gestiti (Istiod)

Questa sezione mostra come abilitare Cloud Trace su Cloud Service Mesh con il piano di controllo Istiod gestito.

  1. 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 o asm-managed-rapid).

  2. Esegui questo comando per visualizzare il file configmap:

    kubectl get configmap istio-release-channel -n istio-system -o yaml
    
  3. 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:{}
    ...
    
  4. 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 di pod appartenenti a un deployment:

    kubectl rollout restart deployment -n NAMESPACE DEPLOYMENT_NAME

Nel cluster

Questa sezione mostra come abilitare Cloud Trace su Cloud Service Mesh con un piano di controllo 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 è dell'1%. Se vuoi sostituisci il valore predefinito, devi usare 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 useresti solo a scopo dimostrativo o di 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 dell'utilità di traccia fa parte della configurazione del bootstrap del proxy, quindi i pod devono riavviarsi e essere reiniettati per raccogliere l'aggiornamento del tracciamento. 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 collaterali possano inviare automaticamente intervalli di traccia, devono Suggerimenti per collegare l'intera traccia. Le applicazioni devono propagare appropriate intestazioni HTTP in modo che quando i proxy inviano informazioni sugli intervalli, gli intervalli possono essere correlati correttamente in una singola traccia.

Per farlo, un'applicazione deve raccogliere e propagare intestazioni dalla richiesta in entrata a qualsiasi richiesta in uscita. La La configurazione di tracciamento di Stackdriver per Cloud Service Mesh accetterà uno qualsiasi dei i seguenti formati di intestazione e propagherà tutti i seguenti formati:

  • B3 (x-b3-traceid, x-b3-spanid, x-b3parentspanid, x-b3-sampled, x-b3-flags)
  • TraceContext di 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 forzarne la visualizzazione di 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.

Tracce di accesso

Visualizza esempi di traccia per un servizio

Per visualizzare un esempio di tracce per un servizio nella tua app, segui questi passaggi:

  1. Vai alla pagina Cloud Service Mesh nella console Google Cloud.

    Vai alla pagina di Cloud Service Mesh

  2. Nella sezione Servizi, seleziona il nome del servizio che vuoi ispezionare.

    Il seguente screenshot mostra un esempio di servizio frontend.

    Grafico della traccia di Cloud Service Mesh

  3. 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.

    Riquadro secondario della traccia di Cloud Service Mesh

Visualizza tutte le tracce

Per visualizzare tutte le tracce per un servizio, segui questi passaggi:

  1. Vai alla pagina Cloud Service Mesh nella console Google Cloud.

    Vai alla pagina di Cloud Service Mesh

  2. Nella sezione Servizi, seleziona il nome del servizio che vuoi ispezionare.

  3. Vai alla pagina Metriche.

  4. Specifica un intervallo di tempo dal menu a discesa Intervallo di tempo oppure impostare un intervallo personalizzato con la sequenza temporale.

  5. Fai clic su Visualizza tracce.

Le tracce per un servizio in Cloud Service Mesh contengono le seguenti informazioni:

  • Latenze delle richieste tra diversi servizi nella rete 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 e istio.mesh_id, rispettivamente.

Passaggi successivi