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.
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
oasm-managed-rapid
).Ejecuta el siguiente comando para ver el configmap:
kubectl get configmap istio-release-channel -n istio-system -o yaml
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:{} ...
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:
Ve a la página Cloud Service Mesh de la consola de Google Cloud Cloud.
En Servicios, selecciona el nombre del servicio que quieras inspeccionar.
En la siguiente captura de pantalla se muestra un ejemplo de un servicio
frontend
.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.
Ver todas las trazas
Para ver todas las trazas de un servicio, sigue estos pasos:
Ve a la página Cloud Service Mesh de la consola de Google Cloud Cloud.
En Servicios, selecciona el nombre del servicio que quieras inspeccionar.
Ve a la página Métricas.
Especifica un periodo en el menú desplegable Periodo o define un periodo personalizado en la cronología.
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
yistio.mesh_id
, respectivamente.