Cloud Trace e Anthos 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 Anthos Service Mesh sulle seguenti piattaforme:

  • GKE su Google Cloud
  • Cluster GKE Enterprise on-premise se hai installato l'autorità di certificazione Anthos Service Mesh (Mesh CA)

Tieni presente che Cloud Trace è disabilitato per impostazione predefinita. Una volta abilitata, le pagine di Anthos Service Mesh nella console Google Cloud forniscono un link alle tracce nella pagina di Cloud Trace . Per informazioni più dettagliate sui prezzi, consulta la pagina Prezzi di Cloud Trace.

Abilita Cloud Trace

Questa sezione mostra come abilitare Cloud Trace.

Gestita

Questa sezione mostra come attivare Cloud Trace su Anthos Service Mesh 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 nella sezione mesh: vengano visualizzate le seguenti righe.

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

    Tieni presente che attualmente la configurazione del tracer fa parte della configurazione del bootstrap del proxy, pertanto è necessario riavviare ogni pod ed essere reiniettato per recuperare l'aggiornamento del tracer. Ad esempio, puoi utilizzare il seguente comando per riavviare i pod che appartengono a un deployment:

    kubectl rollout restart deployment -n NAMESPACE DEPLOYMENT_NAME

Nel cluster

Questa sezione mostra come attivare Cloud Trace su Anthos Service Mesh nel cluster.

Per abilitare Cloud Trace, esegui nuovamente il deployment del piano di controllo gestito dal cliente utilizzando il seguente file di overlay. Per ulteriori informazioni sui file degli overlay, consulta Informazioni sui file degli overlay.

Predefinito

Esegui questo comando per abilitare Cloud Trace:

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

Questo comando applica il seguente file overlay per abilitare il tracciamento con le opzioni predefinite. Tieni presente che la frequenza di campionamento predefinita è 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, vedi 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 ogni 10.000,utilizza 0, 05.

L'esempio seguente mostra una frequenza di campionamento del 100% (che verrà utilizzata solo a scopo dimostrativo o per la 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 del bootstrap del proxy, pertanto i pod devono essere riavviati e reinseriti per recuperare l'aggiornamento del tracer. Utilizza il seguente comando per riavviare i pod che appartengono a un deployment:

kubectl rollout restart deployment -n NAMESPACE DEPLOYMENT_NAME

Propagazione del contesto di Trace

Anche se i proxy sidecar possono inviare automaticamente 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, gli intervalli possano essere correlati correttamente in un'unica traccia.

Per farlo, un'applicazione deve raccogliere e propagare le intestazioni appropriate dalla richiesta in entrata a tutte le richieste in uscita. La configurazione di tracciamento Stackdriver di Anthos Service Mesh accetterà uno qualsiasi dei seguenti formati di intestazione e produrrà 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 tue 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 richiesta originale. 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 restituito di intestazioni delle richieste è presente l'insieme completo delle intestazioni di contesto della traccia.

Per altri esempi di propagazione delle intestazioni, vedi Tracciare la propagazione del contesto.

Crea una traccia dal client con un 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 forzare la visualizzazione di una traccia. Ad esempio:

curl $URL --header "x-client-trace-id: 105445aa7843bc8bf206b12000100000"

Per ulteriori informazioni su x-client-trace-id, consulta la documentazione di Envoy.

Tracce di accesso

Visualizza gli esempi di traccia per un servizio

Per visualizzare un campione delle tracce per un servizio nella tua app, segui questi passaggi:

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

    Vai alla pagina Anthos Service Mesh

  2. Nella sezione Servizi, seleziona il nome del Servizio che vuoi controllare.

    Il seguente screenshot mostra un esempio di servizio frontend.

    Grafico di traccia di Anthos Service Mesh

  3. In Richiedi tracce, fai clic su una traccia per visualizzare ulteriori informazioni.

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

    Riquadro secondario della traccia Anthos Service Mesh

Visualizza tutte le tracce

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

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

    Vai alla pagina Anthos Service Mesh

  2. Nella sezione Servizi, seleziona il nome del Servizio che vuoi controllare.

  3. Vai alla pagina Metriche.

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

  5. Fai clic su Visualizza tracce.

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

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

Passaggi successivi