Cloud Trace e Cloud Service Mesh

Nota: questa guida supporta solo Cloud Service Mesh con le API Istio e non supporta le API Google Cloud . Per ulteriori informazioni, consulta la panoramica di 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. 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 con le installazioni di Cloud Service Mesh sulle seguenti piattaforme:

  • GKE su Google Cloud
  • Cluster GKE Enterprise on-premise se hai eseguito l'installazione con l'autorità di certificazione Cloud Service Mesh

Tieni presente che Cloud Trace è disattivato per impostazione predefinita. Una volta abilitate, le pagine di Cloud Service Mesh nella console Google Cloud forniscono un link alle tracce nella pagina Cloud Trace . Per informazioni 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 control plane Traffic Director 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
    

    Per impostazione predefinita, la frequenza di campionamento è dell'1%. Puoi eseguire l'override del valore predefinito specificando randomSamplingPercentage e impostandolo su un valore compreso tra 0.0 e 100.0.

    L'esempio seguente imposta una frequenza di campionamento del 100% (che in genere viene eseguita solo a scopo dimostrativo o di risoluzione dei problemi):

    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
         randomSamplingPercentage: 100.0
    EOF
    

Gestito (Istiod)

Questa sezione mostra come abilitare Cloud Trace su Cloud Service Mesh con il control plane 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 configmap:

    kubectl get configmap istio-release-channel -n istio-system -o yaml
    
  3. Per verificare che Cloud Trace sia abilitato, assicurati che le seguenti righe siano visualizzate nella sezione mesh:.

    ...
    apiVersion: v1
    data:
       mesh: |
       ....
       defaultConfig:
          tracing:
             stackdriver:{}
    ...
    
  4. Riavvia i proxy.

    Tieni presente che la configurazione del tracciatore fa parte della configurazione di bootstrap del proxy, pertanto ogni pod deve essere riavviato e reinserito per applicare l'aggiornamento del tracciatore. Ad esempio, puoi utilizzare il seguente comando per riavviare i pod che appartengono a un deployment:

    kubectl rollout restart deployment -n NAMESPACE DEPLOYMENT_NAME

Interno al cluster

Questa sezione mostra come abilitare Cloud Trace su Cloud Service Mesh con il control plane in-cluster.

Per abilitare Cloud Trace, rifai il deployment del control plane gestito dal cliente utilizzando il seguente file di overlay. Per ulteriori informazioni sui file di overlay, consulta Informazioni sui file di overlay.

Predefinito

Esegui questo comando per abilitare Cloud Trace:

 ./asmcli install \
    OTHER_FLAGS \
    --option cloud-tracing

Questo comando applica il seguente file overlay per abilitare il tracciamento con le opzioni predefinite. Tieni presente che la frequenza di campionamento predefinita è l'1%. Se vuoi eseguire l'override del valore predefinito, devi utilizzare --custom-overlay.

 apiVersion: install.istio.io/v1alpha1
 kind: IstioOperator
 spec:
   meshConfig:
     enableTracing: true
   values:
     global:
       proxy:
         tracer: stackdriver

Per un elenco di opzioni, consulta il pacchetto anthos-service-mesh.

Personalizzato

Puoi eseguire l'override del valore predefinito specificando un valore tracing.sampling. Il valore deve essere compreso tra 0,0 e 100,0 con una precisione di 0,01. Ad esempio, per tracciare 5 richieste su 10.000,utilizza 0, 05.

L'esempio seguente mostra una frequenza di campionamento del 100% (che dovresti utilizzare solo per scopi dimostrativi 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 del tracciatore fa parte della configurazione di bootstrap del proxy, quindi i pod devono essere riavviati e reinseriti per applicare l'aggiornamento del tracciatore. Utilizza il seguente comando per riavviare i pod che appartengono a un deployment:

kubectl rollout restart deployment -n NAMESPACE DEPLOYMENT_NAME

Propagazione del contesto della traccia

Sebbene i proxy sidecar possano inviare automaticamente gli intervalli di 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 intervalli, questi possano essere correlati correttamente in una singola traccia.

Per farlo, un'applicazione deve raccogliere e propagare le intestazioni appropriate dalla richiesta in entrata a tutte le richieste in uscita. La configurazione del tracciamento di Stackdriver di Cloud Service Mesh accetta 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)
  • W3C TraceContext (traceparent)
  • Google Cloud Trace (x-cloud-trace-context)
  • gRPC TraceBin (grpc-trace-bin)

Ciò significa che le tue applicazioni possono utilizzare uno qualsiasi di questi formati per propagare il contesto della traccia 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 richiesta originale. Nota 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="
}

Tieni presente che nel set di intestazioni della richiesta restituito è presente il set completo di intestazioni del contesto della traccia.

Per altri esempi di propagazione delle intestazioni, consulta Propagazione del contesto della traccia.

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 saperne di più su x-client-trace-id, consulta la documentazione di Envoy.

Accedi alle tracce

Visualizza i campioni di tracce per un servizio

Per visualizzare un campione 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 Cloud Service Mesh

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

    Lo screenshot seguente mostra un esempio di servizio frontend.

    Grafico delle tracce di Cloud Service Mesh

  3. In Tracce delle richieste, fai clic su una traccia per visualizzare ulteriori informazioni.

    Lo screenshot seguente mostra un esempio del riquadro secondario della richiesta di traccia.

    Riquadro secondario delle tracce di Cloud Service Mesh

Visualizza tutte le tracce

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

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

    Vai alla pagina Cloud Service Mesh

  2. In 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 o imposta un intervallo personalizzato con la sequenza temporale.

  5. Fai clic su Visualizza tracce.

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

  • Latenze delle richieste tra i diversi servizi nel mesh.
  • Proprietà della richiesta HTTP, tra cui ID, URL, dimensione, latenza e protocollo.
  • Nome del servizio, spazio dei nomi e ID mesh come parte delle etichette istio.canonical_service, istio.namespace e istio.mesh_id, rispettivamente.

Passaggi successivi