Cloud Trace y Cloud Service Mesh

Cloud Trace es un sistema de seguimiento distribuido que recopila datos de latencia de las aplicaciones y los muestra casi en tiempo real. Este te permite seguir una solicitud de muestra a través del sistema distribuido, observar las llamadas de red y generar un perfil del sistema de extremo a extremo.

Cloud Trace está disponible con las instalaciones de la malla de servicios de Cloud en la las siguientes plataformas:

  • GKE en Google Cloud
  • Clústeres de GKE Enterprise locales si instalas con la autoridad certificadora de Cloud Service Mesh

Ten en cuenta que Cloud Trace está inhabilitado de forma predeterminada. Una vez habilitadas, las páginas de Cloud Service Mesh en la consola de Google Cloud proporcionan un vínculo a los seguimientos en la página de Cloud Trace. Para obtener información detallada sobre los precios, consulta la página de precios de Cloud Trace.

Habilita Cloud Trace

En esta sección, se muestra cómo habilitar Cloud Trace.

Administrado (TD)

En esta sección, se muestra cómo habilitar Cloud Trace en Cloud Service Mesh con un plano de control administrado de Cloud Service Mesh.

  1. Ejecuta el siguiente comando para habilitar 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
    

Administrado (Istiod)

En esta sección, se muestra cómo habilitar Cloud Trace en Cloud Service Mesh con el plano de control administrado de Istiod.

  1. Ejecuta el siguiente comando:

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

    En el ejemplo anterior, release-channel es tu canal de versiones (asm-managed, asm-managed-stable o asm-managed-rapid).

  2. Ejecuta el siguiente comando para ver el configmap:

    kubectl get configmap istio-release-channel -n istio-system -o yaml
    
  3. Para verificar que Cloud Trace esté habilitado, asegúrate de que se muestren las siguientes líneas en la sección mesh:.

    ...
    apiVersion: v1
    data:
       mesh: |
       ....
       defaultConfig:
          tracing:
             stackdriver:{}
    ...
    
  4. Reinicia los proxies.

    Ten en cuenta que la configuración del rastreador es parte del arranque del proxy por lo que cada Pod debe reiniciarse y volver a insertarse para recoger la actualización del rastreador. Por ejemplo, puedes usar el siguiente comando para reiniciar los pods que pertenecen a una implementación:

    kubectl rollout restart deployment -n NAMESPACE DEPLOYMENT_NAME

En el clúster

En esta sección, se muestra cómo habilitar Cloud Trace en Cloud Service Mesh con el plano de control en el clúster.

Para habilitar Cloud Trace, vuelve a implementar el plano de control administrado por el cliente con el siguiente archivo de superposición. Para obtener más información sobre los archivos de superposición, consulta Acerca de los archivos de superposición.

Predeterminado

Ejecuta el siguiente comando para habilitar Cloud Trace:

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

Este comando aplica el siguiente archivo de superposición para habilitar el seguimiento con las opciones predeterminadas. Ten en cuenta que la tasa de muestreo predeterminada es del 1%. Si deseas anula el valor predeterminado, en su lugar, debes usar --custom-overlay.

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

Para obtener una lista de opciones, consulta el paquete anthos-service-mesh.

Personalizado

Puedes anular el valor predeterminado especificando un valor tracing.sampling. El valor debe estar en el rango de 0.0 a 100.0 con una precisión de 0.01. Por ejemplo, para hacer un seguimiento de 5 solicitudes de cada 10,000, usa 0.05.

El siguiente ejemplo muestra una tasa de muestreo del 100% (que solo usarías hacer con fines de demostración o solución de problemas).

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

Ejecuta el siguiente comando para habilitar Cloud Trace:

 ./asmcli install \
    OTHER_FLAGS \
    --custom_overlay PATH_TO_FILE

Ten en cuenta que la configuración del rastreador es parte de la configuración de arranque del proxy, por lo que los pods deben reiniciarse y volver a insertarse para aplicar la actualización del rastreador. Usa el siguiente comando para reiniciar los pods que pertenecen a una implementación:

kubectl rollout restart deployment -n NAMESPACE DEPLOYMENT_NAME

Propagación del contexto de seguimiento

Aunque los proxies de sidecar pueden enviar de forma automática intervalos de seguimiento, necesitan algunas sugerencias para unir todo el seguimiento. Las aplicaciones deben propagar los encabezados HTTP adecuados para que cuando los proxies envíen información de intervalo, los intervalos puedan correlacionarse de forma correcta en un solo seguimiento.

Para ello, una aplicación debe recopilar y propagar los siguientes encabezados de la solicitud entrante en cualquier solicitud saliente. El La configuración de seguimiento de Stackdriver de la malla de servicios de Cloud aceptará cualquiera de los formatos de encabezado y propagará todos los siguientes 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)

Esto significa que tus aplicaciones pueden usar cualquiera de esos formatos para propagar el contexto de seguimiento,y los seguimientos se generarán y se configurarán en Stackdriver de manera apropiada.

Ejemplo

Aquí hay un ejemplo de solicitud HTTP-Get con un encabezado traceparent en la solicitud original. Observa los encabezados de contexto de seguimiento adicionales que agregó el 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="
}

Ten en cuenta que en el conjunto de encabezados de solicitud que se muestra, el conjunto completo de encabezados de contexto de seguimiento está presente.

Para ver más ejemplos que propagan los encabezados, consulta Propagación del contexto de seguimiento.

Crea un seguimiento desde un cliente con un ID personalizado

Si deseas crear un seguimiento a partir de un cliente con un ID personalizado, usa el comando curl para crear una solicitud con un cliente externo y forzarlo a mostrar un seguimiento. Por ejemplo:

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

Para obtener más información sobre x-client-trace-id, consulta la documentación de Envoy.

Cómo acceder a los seguimientos

Visualiza muestras de seguimiento de un servicio

Para ver una muestra de seguimientos de un servicio en tu app, sigue estos pasos:

  1. Ve a la página Cloud Service Mesh en la consola de Google Cloud.

    Ir a la página Cloud Service Mesh

  2. En Services, selecciona el nombre del Service que deseas inspeccionar.

    En la siguiente captura de pantalla, se muestra un ejemplo de un servicio frontend.

    Gráfico de seguimiento de la malla de servicios de Cloud

  3. En Seguimientos de solicitudes, haz clic en cualquier seguimiento para ver más información.

    En la siguiente captura de pantalla, se muestra un ejemplo del subpanel de solicitud de seguimiento.

    Subpanel de seguimiento de la malla de servicios de Cloud

Ver todos los seguimientos

Para ver todos los seguimientos de un servicio, sigue estos pasos:

  1. Ve a la página Cloud Service Mesh en la consola de Google Cloud.

    Ir a la página Cloud Service Mesh

  2. En Services, selecciona el nombre del Service que deseas inspeccionar.

  3. Ve a la página Métricas.

  4. Especifica un intervalo de tiempo en el menú desplegable Período o configura un intervalo personalizado con el cronograma.

  5. Haz clic en Ver seguimientos.

Los seguimientos de un servicio en Cloud Service Mesh contienen la siguiente información:

  • Latencias de las solicitudes en diferentes servicios de la malla.
  • Propiedades de la solicitud HTTP, incluidos el ID, la URL, el tamaño, la latencia y el protocolo.
  • Nombre del servicio, espacio de nombres e ID de malla como parte de las etiquetas istio.canonical_service, istio.namespace y istio.mesh_id, respectivamente.

¿Qué sigue?