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.

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 usaría 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 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