Cloud Trace y Cloud Service Mesh

Cloud Trace es un sistema de análisis de trazas distribuido que recoge datos de latencia de las aplicaciones y los muestra casi en tiempo real. Te permite seguir una solicitud de muestra a través de tu sistema distribuido, observar las llamadas de red y perfilar tu sistema de principio a fin.

Cloud Trace está disponible con las instalaciones de Cloud Service Mesh en las siguientes plataformas:

  • GKE en Google Cloud
  • Clústeres de GKE Enterprise on-premise si has instalado la autoridad de certificación 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 de la Google Cloud consola proporcionan un enlace a los rastreos en la página de Cloud Trace . Para obtener información detallada sobre los precios, consulta la página de precios de Cloud Trace.

Habilitar Cloud Trace

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

gestionados

En esta sección se muestra cómo habilitar Cloud Trace en Cloud Service Mesh gestionado.

  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
    

    donde release-channel es tu canal de lanzamiento (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 aparezcan 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 tracer forma parte de la configuración de arranque del proxy, por lo que cada pod debe reiniciarse y volver a insertarse para recoger la actualización del tracer. 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 en el clúster.

Para habilitar Cloud Trace, vuelve a implementar el plano de control gestionado 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 rastreo con las opciones predeterminadas. Ten en cuenta que la frecuencia de muestreo predeterminada es del 1%. Si quieres anular el valor predeterminado, debes usar --custom-overlay.

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

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

Personalizado

Puedes anular el valor predeterminado especificando un valor de tracing.sampling. El valor debe estar comprendido entre 0,0 y 100,0, con una precisión de 0,01. Por ejemplo, para registrar 5 solicitudes de cada 10.000,usa 0, 05.

En el siguiente ejemplo se muestra una frecuencia de muestreo del 100 %, que solo se recomienda para demostraciones o para solucionar 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 tracer forma parte de la configuración de arranque del proxy, por lo que los pods deben reiniciarse y volver a insertarse para recoger la actualización del tracer. Usa el siguiente comando para reiniciar los pods que pertenecen a un despliegue:

kubectl rollout restart deployment -n NAMESPACE DEPLOYMENT_NAME

Propagación del contexto de rastreo

Aunque los proxies sidecar pueden enviar automáticamente intervalos de seguimiento, necesitan algunas pistas para vincular todo el seguimiento. Las aplicaciones deben propagar los encabezados HTTP adecuados para que, cuando los proxies envíen información de los intervalos, estos se puedan correlacionar correctamente en un solo rastreo.

Para ello, una aplicación debe recoger y propagar los encabezados adecuados de la solicitud entrante a cualquier solicitud saliente. La configuración de Stackdriver Trace de Cloud Service Mesh aceptará cualquiera de los siguientes formatos de encabezado y propagará todos los formatos siguientes:

  • B3 (x-b3-traceid, x-b3-spanid, x-b3parentspanid, x-b3-sampled, x-b3-flags)
  • TraceContext de W3C (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 que los seguimientos se generarán y se definirán en Stackdriver correctamente.

Ejemplo

A continuación, se muestra un ejemplo de solicitud HTTP-Get con un encabezado traceparent en la solicitud original. Fíjate en los encabezados de contexto de seguimiento adicionales que ha añadido 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 devuelto, se incluye el conjunto completo de encabezados de contexto de seguimiento.

Para ver más ejemplos de propagación de encabezados, consulta Propagación del contexto de rastreo.

Crear un rastreo desde un cliente con un ID personalizado

Para crear un rastreo desde un cliente con un ID personalizado, usa el comando curl para crear una solicitud con un cliente externo y forzar que se muestre un rastreo. 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.

Acceder a las trazas

Ver ejemplos de trazas de un servicio

Para ver una muestra de las trazas de un servicio de tu aplicación, sigue estos pasos:

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

    Ir a la página Cloud Service Mesh

  2. En Servicios, selecciona el nombre del servicio que quieras inspeccionar.

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

    Gráfico de rastreo de Cloud Service Mesh

  3. En Solicitar trazas, haz clic en cualquier traza para ver más información.

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

    Subpanel de trazas de Cloud Service Mesh

Ver todas las trazas

Para ver todas las trazas de un servicio, sigue estos pasos:

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

    Ir a la página Cloud Service Mesh

  2. En Servicios, selecciona el nombre del servicio que quieras inspeccionar.

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

  4. Especifica un periodo en el menú desplegable Periodo o define un periodo personalizado en la cronología.

  5. Haz clic en Ver trazas.

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

  • Latencias de las solicitudes en los distintos servicios de la malla.
  • Propiedades de la solicitud HTTP, como 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.

Siguientes pasos