Cloud Trace e Cloud Service Mesh

O Cloud Trace é um sistema de rastreamento distribuído que coleta dados de latência dos aplicativos e os exibe quase em tempo real. Com ele, é possível seguir uma solicitação de amostra por meio do sistema distribuído, observar as chamadas de rede e criar o perfil do 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 você tiver instalado com a autoridade de certificação do Cloud Service Mesh

O Cloud Trace fica desativado por padrão. Depois da ativação, as páginas do Cloud Service Mesh no console do Google Cloud fornecem um link para os traces na página do Cloud Trace . Para informações detalhadas sobre preços, consulte a página de preços do Cloud Trace.

Ativar o Cloud Trace

Nesta seção, mostraremos como ativar o Cloud Trace.

Gerenciado (TD)

Nesta seção, mostramos como ativar o Cloud Trace no Cloud Service Mesh com um plano de controle gerenciado do Cloud Service Mesh.

  1. Execute o comando a seguir para ativar o 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
    

Gerenciado (Istiod)

Nesta seção, mostramos como ativar o Cloud Trace no Cloud Service Mesh com o plano de controle gerenciado do Istiod.

  1. Execute este 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 canal de lançamento (asm-managed, asm-managed-stable ou asm-managed-rapid).

  2. Execute este 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, verifique se as linhas a seguir aparecem na seção mesh:.

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

    A configuração do rastreador faz parte da configuração de inicialização do proxy. Por isso, cada pod precisa ser reiniciado e reinjetado para coletar a atualização do rastreador. Por exemplo, é possível usar o seguinte comando para reiniciar pods que pertencem a uma implantação:

    kubectl rollout restart deployment -n NAMESPACE DEPLOYMENT_NAME

No cluster

Nesta seção, mostramos como ativar o Cloud Trace no Cloud Service Mesh com o plano de controle no cluster.

Para ativar o Cloud Trace, reimplante o plano de controle utilizando o seguinte arquivo de sobreposição. Para mais informações sobre arquivos de sobreposição, consulte Sobre os arquivos de sobreposição.

.

Padrão

Execute o comando a seguir para ativar o Cloud Trace:

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

Este comando aplica o seguinte arquivo de sobreposição para ativar o rastreamento com opções padrão. A taxa de amostragem padrão é de 1%. Se você quiser substituir o padrão, use --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

É possível substituir o padrão especificando um valor tracing.sampling. O valor precisa estar no intervalo de 0,0 a 100,0 com uma precisão de 0,01. Por exemplo, para gerar traces de cinco solicitações de cada 10.000, use 0,05.

O exemplo a seguir mostra uma taxa de amostragem de 100%, que é o que você faria apenas para fins de demonstração ou soluçã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 comando a seguir para ativar o Cloud Trace:

 ./asmcli install \
    OTHER_FLAGS \
    --custom_overlay PATH_TO_FILE

A configuração do tracer faz parte da configuração do bootstrap de proxy. Portanto, os pods precisam ser reiniciados e injetados novamente para retomar a atualização do rastreador. Use o seguinte comando para reiniciar pods que pertençam a uma implantação:

kubectl rollout restart deployment -n NAMESPACE DEPLOYMENT_NAME

Propagação do contexto de trace

Os proxies secundários podem enviar períodos de trace automaticamente, mas eles precisam de algumas dicas para unir todo o trace. Os aplicativos precisam propagar os cabeçalhos HTTP apropriados para que, quando os proxies enviarem informações de período, os períodos possam ser correlacionados corretamente em um único trace.

Para fazer isso, um aplicativo precisa coletar e propagar os cabeçalhos apropriados da solicitação de entrada para qualquer solicitação de saída. A configuração de rastreamento 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)

Isso significa que os aplicativos podem usar qualquer um desses formatos para propagar o contexto de rastreamento, e os traces serão gerados e definidos adequadamente para o Stackdriver.

Exemplo

Veja um exemplo de solicitação HTTP-Get com um cabeçalho traceparent na solicitação original. Observe os cabeçalhos adicionais de contexto de trace 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="
}

No conjunto retornado de cabeçalhos de solicitação, o conjunto completo de cabeçalhos de contexto de trace está presente.

Para mais exemplos de propagação dos cabeçalhos, consulte Rastrear a propagação de contexto.

Criar um trace do cliente com um ID personalizado.

Para criar um trace de um cliente com um ID personalizado, use o comando curl para criar uma solicitação com um cliente externo e forçá-lo a mostrar um trace. Exemplo:

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

Para mais informações sobre x-client-trace-id, consulte a documentação do Envoy (em inglês).

Traces de acesso

Ver amostras de traces para um serviço

Para ver uma amostra de traces de um serviço no app, siga estas etapas:

  1. Acesse a página do Cloud Service Mesh no console do Google Cloud.

    Acessar a página do Cloud Service Mesh

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

    A captura de tela abaixo mostra um exemplo de um serviço frontend.

    Gráfico de trace do Cloud Service Mesh

  3. Em Solicitar traces, clique em qualquer trace para ver mais informações.

    A captura de tela abaixo mostra um exemplo do subpainel de solicitação de trace.

    Subpainel de rastreamento do Cloud Service Mesh

Ver todos os traces

Para ver todos os traces de um serviço, siga estas etapas:

  1. Acesse a página do Cloud Service Mesh no console do Google Cloud.

    Acessar a página do Cloud Service Mesh

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

  3. Acesse a página Métricas.

  4. Especifique um período no menu suspenso Período ou defina um período personalizado com a linha do tempo.

  5. Clique em Visualizar traces.

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

  • Solicitar latência em diferentes serviços na malha.
  • Propriedades da solicitação HTTP, incluindo ID, URL, tamanho, latência e protocolo.
  • Nome do serviço, namespace e código da malha como parte dos rótulos istio.canonical_service, istio.namespace e istio.mesh_id, respectivamente.

A seguir