Cloud Trace e Cloud Service Mesh

O Cloud Trace é um sistema de rastreio distribuído que recolhe dados de latência das aplicações e os apresenta quase em tempo real. Permite-lhe seguir um pedido de amostra através do seu sistema distribuído, observar as chamadas de rede e criar um perfil do seu sistema de ponta a ponta.

O Cloud Trace está disponível com instalações do Cloud Service Mesh nas seguintes plataformas:

  • GKE no Google Cloud
  • Clusters do GKE Enterprise no local se tiver instalado com a autoridade de certificação do Cloud Service Mesh

Tenha em atenção que o Cloud Trace está desativado por predefinição. Depois de ativadas, as páginas do Cloud Service Mesh na Google Cloud consola fornecem um link para os rastreios na página do Cloud Trace . Para informações detalhadas sobre os preços, consulte a página de preços do Cloud Trace.

Ative o Cloud Trace

Esta secção mostra-lhe como ativar o Cloud Trace.

Gerido

Esta secção mostra como ativar o Cloud Trace no Cloud Service Mesh gerido.

  1. Execute o seguinte comando:

    cat <<EOF | kubectl apply -f -
    apiVersion: v1
    data:
       mesh: |-
          defaultConfig:
            tracing:
              stackdriver: {}
    kind: ConfigMap
    metadata:
       name: istio-release-channel
       namespace: istio-system
    EOF
    

    em que release-channel é o seu canal de lançamento (asm-managed, asm-managed-stable ou asm-managed-rapid).

  2. Execute o seguinte comando para ver o configmap:

    kubectl get configmap istio-release-channel -n istio-system -o yaml
    
  3. Para verificar se o Cloud Trace está ativado, certifique-se de que as seguintes linhas aparecem na secção mesh:.

    ...
    apiVersion: v1
    data:
       mesh: |
       ....
       defaultConfig:
          tracing:
             stackdriver:{}
    ...
    
  4. Reinicie os proxies.

    Tenha em atenção que a configuração do rastreador faz parte da configuração de arranque do proxy, pelo que cada pod tem de ser reiniciado e reinjetado para receber a atualização do rastreador. Por exemplo, pode usar o seguinte comando para reiniciar os pods que pertencem a uma implementação:

    kubectl rollout restart deployment -n NAMESPACE DEPLOYMENT_NAME

No cluster

Esta secção mostra como ativar o Cloud Trace no Cloud Service Mesh no cluster.

Para ativar o Cloud Trace, volte a implementar o plano de controlo gerido pelo cliente através do seguinte ficheiro de sobreposição. Para mais informações acerca dos ficheiros de sobreposição, consulte o artigo Acerca dos ficheiros de sobreposição.

Predefinição

Execute o seguinte comando para ativar o Cloud Trace:

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

Este comando aplica o seguinte ficheiro de sobreposição para ativar o rastreio com as opções predefinidas. Tenha em atenção que a taxa de amostragem predefinida é de 1%. Se quiser substituir o valor predefinido, tem de usar --custom-overlay.

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

Para ver uma lista de opções, consulte o pacote anthos-service-mesh.

Personalizado

Pode substituir a predefinição especificando um valor tracing.sampling. O valor tem de estar no intervalo de 0,0 a 100,0 com uma precisão de 0,01. Por exemplo, para rastrear 5 pedidos em cada 10 000,use 0, 05.

O exemplo seguinte mostra uma taxa de amostragem de 100% (que só faria para fins de demonstração ou resolução de problemas).

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

Execute o seguinte comando para ativar o Cloud Trace:

 ./asmcli install \
    OTHER_FLAGS \
    --custom_overlay PATH_TO_FILE

Tenha em atenção que a configuração do rastreador faz parte da configuração de arranque do proxy. Por isso, os pods têm de ser reiniciados e reinjetados para receberem a atualização do rastreador. Use o seguinte comando para reiniciar os pods pertencentes a uma implementação:

kubectl rollout restart deployment -n NAMESPACE DEPLOYMENT_NAME

Propagação do contexto de rastreio

Embora os proxies sidecar possam enviar automaticamente intervalos de rastreio, precisam de algumas sugestões para associar todo o rastreio. As aplicações têm de propagar os cabeçalhos HTTP adequados para que, quando os proxies enviam informações de intervalos, os intervalos possam ser correlacionados corretamente numa única rastreabilidade.

Para isso, uma aplicação tem de recolher e propagar os cabeçalhos adequados do pedido recebido para quaisquer pedidos enviados. A configuração do rastreio do Stackdriver do Cloud Service Mesh aceita qualquer um dos seguintes formatos de cabeçalho e propaga todos os seguintes formatos:

  • 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)

Isto significa que as suas aplicações podem usar qualquer um desses formatos para propagar o contexto de rastreio, e os rastreios são gerados e definidos para o Stackdriver de forma adequada.

Exemplo

Segue-se um exemplo de um pedido HTTP-Get com um cabeçalho traceparent no pedido original. Repare nos cabeçalhos de contexto de rastreio adicionais adicionados pelo 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="
}

Repare que, no conjunto de cabeçalhos de pedidos devolvidos, o conjunto completo de cabeçalhos trace context está presente.

Para mais exemplos de propagação dos cabeçalhos, consulte o artigo Propagação do contexto de rastreio.

Crie um rastreio a partir do cliente com um ID personalizado

Para criar um rastreio a partir de um cliente com um ID personalizado, use o comando curl para criar um pedido com um cliente externo e forçá-lo a mostrar um rastreio. Por exemplo:

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

Para mais informações sobre o x-client-trace-id, consulte a documentação do Envoy.

Aceda aos rastreios

Veja exemplos de rastreios de um serviço

Para ver uma amostragem de rastreios de um serviço na sua app, siga estes passos:

  1. Aceda à página Cloud Service Mesh na Google Cloud consola.

    Aceda à página Cloud Service Mesh

  2. Em Serviços, selecione o nome do serviço que quer inspecionar.

    A captura de ecrã seguinte mostra um exemplo de um frontend serviço.

    Gráfico de rastreio do Cloud Service Mesh

  3. Em Pedir rastreios, clique num rastreio para ver mais informações.

    A captura de ecrã seguinte mostra um exemplo do subpainel de pedido de rastreio.

    Subpainel de rastreio do Cloud Service Mesh

Ver todos os rastreios

Para ver todos os rastreios de um serviço, siga estes passos:

  1. Aceda à página Cloud Service Mesh na Google Cloud consola.

    Aceda à página Cloud Service Mesh

  2. Em Serviços, selecione o nome do serviço que quer inspecionar.

  3. Aceda à página Métricas.

  4. Especifique um período no menu pendente Período ou defina um período personalizado com a cronologia.

  5. Clique em Ver rastreios.

Os rastreios de um serviço no Cloud Service Mesh contêm as seguintes informações:

  • Latências de pedidos em diferentes serviços na malha.
  • Propriedades do pedido HTTP, incluindo ID, URL, tamanho, latência e protocolo.
  • Nome do serviço, espaço de nomes e ID da malha como parte das etiquetas istio.canonical_service, istio.namespace e istio.mesh_id, respetivamente.

O que se segue?