Destacado

Spring Cloud Sleuth y StackDriver Trace




Siguiendo con nuestra saga de proyectos de Spring GCP, ahora, nos toca ver Spring Cloud Sleuth.
En proyectos de Arquitectura de Micro servicios es muy importante la información y observabilidad de todo. Si se están realizando llamadas entre servicios A, B y C; es importante entender si estas fueron exitosas o existe latencia entre dichas llamadas.

Nosotros podemos agregar esta dependencia de Sleuth a nuestro proyecto Spring Boot para darle ese "super poder" de tracing distribuido y luego exponer dicha información en un Zipkin o Jaegger por ejemplo.

GCP tiene Stackdriver trace, que es un servicio que nos permite guardar esta data de tracing sin tener que administrar nosotros mismos nuestro Zipking o storage. Stackdriver puede productir reportes de latencia y/o detectar anamalías en la performance.

Existen dos formas de usar Stackdriver Trace en nuestra aplicación Spring Boot:

1. Usas un Stackdriver Trace Zipkin proxy y configurar el Spring Cloud Sleuth para que use este proxy como el Zipkin endpoint.

2. O usas el Spring Cloud GCP Trace, que se integra con Spring Cloud Sleuth, para enviar toda la data directamente a Stackdriver trace.

Requisitos


1. Escoge tu proyecto a trabajar y selecciona Cloud Shell


Con gcloud auth list ves si estas ya autenticado.

2. Crear una aplicación con Spring Boot: web, lombok, GCP support



3. Crear Servicio REST. Creamos un ComiteController para simular las reuniones de trabajo que tenemos con nuestros equipos. 





4. Ejecutamos el proyecto y llamamos a localhost:8080





5. Habilitamos el Stackdriver Trace API





Clic en Habilitar.



6.  Crear un Application Default Credential.

Este paso ya lo había explicado en mi primer post sobre Google Cloud Storage

Es por eso, que si lo aplicas en tu PC te saldrá:

Dile N.

Y si lo aplicas en Cloud Shell:


Clic en el link, abre un tab en el navegador, dile Allow y luego copia el codigo que te da y regresa al cloud shell y presiona ENTER. 



7.  Agregar Spring Cloud GCP Trace. 



Por defecto, Spring Cloud Sleuth no muestra todos los request. Pero lo vamos a forzar para que trabaje al 100% e ignoramos algunos URLs. Para eso se configura lo siguiente en el src/main/resources/application.properties

spring.sleuth.sampler.probability=1.0spring.sleuth.web.skipPattern=(^cleanup.*|.+favicon.*)


7. Vamos a la consola Stackdriver - trace - trace list


Usa el Auto Reload y verás como las trazas llegan. 

Clic en el URI y verás el detalle de la traza:


8. Creamos un segundo proyecto spring boot:

curl https://start.spring.io/starter.tgz -d packaging=jar \
  -d dependencies=web,lombok,cloud-gcp \
  -d baseDir=segundo-servicio | tar -xzvf - \
  && cd segundo-servicio


Abricamos con Intellij y creamos su segunda controller.

9. Creamos ComiteTetris.java



10. Agregamos la dependencia spring-cloud-gcp-starter-trace:

spring.sleuth.sampler.probability=1.0spring.sleuth.web.skipPattern=(^cleanup.*|.+favicon.*)
server.port=8081




11. Probamos

12.   Modificamos el primer servicio para que llame al segundo servicio.  




13. Volvemos a stack driver trace list y vemos unos puntos azules:





Esos puntos azules son las llamadas del segundo servicio.

14. Como punto final, cabe mencionar que si usas el Stackdriver Trace como el trace data storage, el puede usar estos datos para construir reportes de distribución de latencia.  Asimismo puede detectar problemas de performance del mismo servicio en diferentes momentos del tiempo. 


Enjoy!

Joe












Comentarios