Este artículo habla principalmente sobre el componente de seguimiento del servicio Zipkin, y Spring Cloud Sleuth integra el componente Zipkin.
1. Introducción
Agregue el detective al classpath de una aplicación de arranque de primavera (consulte a continuación para ver ejemplos de Maven y Gradle), y verá los datos de correlación recopilados en registros, siempre que esté registrando solicitudes.
- Extraído del sitio web oficial
La función principal de Spring Cloud Sleuth es proporcionar soluciones de seguimiento en sistemas distribuidos, y es compatible con Zipkin. Solo necesita introducir las dependencias correspondientes en el archivo POM.
2. Seguimiento y análisis de servicios
En la arquitectura de microservicio, los servicios se dividen a través de los servicios. Una interfaz expuesta al mundo exterior puede requerir muchos servicios para colaborar para completar esta función de interfaz. Si algún servicio en el enlace tiene problemas o tiempos de espera de red, hará que la llamada de interfaz falle. A medida que el negocio continúa expandiéndose, la llamada entre los servicios se volverá cada vez más complicada.
A medida que hay más y más servicios disponibles, el análisis de las cadenas de llamadas se volverá cada vez más complicado. La relación de llamada entre ellos puede ser la siguiente:
Iii. Términos
Span: Unidad de trabajo básica. Por ejemplo, enviar un RPC en un tramo recién creado es equivalente a enviar una solicitud de respuesta al RPC. El tramo se identifica de manera única por una ID de 64 bits, y la traza está representada por otra ID de 64 bits. El SPAP tiene otra información de datos, como Digest, Eventos de marca de tiempo, anotaciones de valor clave (etiquetas), ID de SPAN e ID de progreso (generalmente dirección IP).
El tramo está constantemente comenzando y deteniendo, y al mismo tiempo registra la información de tiempo. Cuando crea un tramo, debe detenerlo en algún momento en el futuro.
Trace: una estructura de árbol compuesta de una serie de tramos. Por ejemplo, si está ejecutando un proyecto de big data distribuido, es posible que deba crear un rastro.
Anotación: se utiliza para registrar la existencia de un evento en el tiempo, y algunas anotaciones básicas se utilizan para definir el principio y el final de una solicitud.
Graphicalize el proceso de uso de la anotación de Zipkin en un sistema:
4. Proyecto de construcción
Después de explicar el conocimiento básico, tomemos el trabajo real. El caso en este artículo consta principalmente de tres proyectos: un servidor-Zipkin, que utiliza principalmente las funciones de Zipkinserver para recopilar datos de llamadas y mostrarlos; un servicio-Hi, que expone la interfaz HI al exterior; un servicio-miya, que expone la interfaz Miya al exterior; Estos dos servicios pueden llamarse entre sí; Y solo después de que se llamen, Server-Zipkin recopilará datos, por lo que se llama seguimiento del servicio.
4.1 CONSTRUIR SERVER-ZIPKIN
Cree un proyecto Spring-Boot llamado Server-Zipkin e introduzca dependencias en su POM:
<pendencies> <Spendency> <MoupRid> org.springframework.boot </proupid> <artifactID> spring-boot-starter </artifactid> </pendency> <pendency> <MoupRupid> org.springframework.boot </groupId> <artifactid> spring-boot-starter-web </artifactid> <//dependency> </dependency> <MoupRoD> org.springframework.boot </proupid> <artifactID> spring-boot-starter-test </artifactid> <cope> test </pope> </pependency> <epardency> <grupid> io.zipkin.java </groupid> <artifactid> zipkin-subver </artifactid> <////dependency> <pendency> <Groupid> io.zipkin.java </proupid> <artifactid> Zipkin-Autoconfigure-ui </arifactid> </pendency> </pendency> </pendency> <ependency> <grupo> org.springframework.cloud </groupid> <artifactid> spring-ncloud-dependencias </artifactid> <Persion> Camden.sr6 </versión> <proy> pom </pype> <cope> import </cope> </pendency> </dependencias> </pendencymanagement>
En su clase de entrada del programa, agregue la anotación @enableZipkinServer para habilitar la función de Zipkinserver:
@Springbootapplication@habilitzipkinserverpublic clase serverzipkinapplication {public static void main (string [] args) {springapplication.run (serverzipkinapplication.class, args); }}En el archivo de configuración Application.yml especifica el puerto de servicio como:
Server.port = 9411
4.2 Crear servicio-HI
En su introducción de POM, la dependencia inicial es Spring-Cloud-Starter-Zipkin, el código es el siguiente:
<Spendencies> <Spendency> <MoupRid> org.springframework.boot </proupid> <artifactid> spring-boot-starter-web </artifactid> </peperspency> <!-compile ('org.springframework.cloud:springcloud-starter-zipkin') <artifactid> spring-cloud-starter-zipkin </artifactid> </pepertency> <pendency> <uproupid> org.springframework.boot </proupid> <sartifactid> spring-boot-starter-test </artifactid> <cope> test </scope> </pendency> </pendency> </dependency> <///artifactid <cope> test </scope> </pendency> </pendency> </pendency> </sartifeManementementementementementemention> <Spendency> <MoupRupid> org.springframework.cloud </groupid> <artifactid> Spring-Cloud-Dependencies </arfactid> <versión> dalston.rc1 </versions> <pype> pom </pype> <cope> import </cope> </pendency> </dependencias> </pendencymanagement>En su archivo de configuración Application.yml, especifique la dirección del servidor Zipkin, y el encabezado se especifica configurando "Spring.zipkin.base-URL":
server.port = 8988spring.zipkin.base-url = http: // localhost: 9411spring.application.name = Service-HI
Está bien introducir la dependencia de Spring-Cloud-Starter-Zipkin y establecer spring.zipkin.base-url.
Interfaz de exposición externa:
@Springbootapplication@RestControllerPublic ServiceHiaPplication {public static void main (string [] args) {springapplication.run (serviciohiapplication.class, args); } private static final logger log = logger.getLogger (serviciohiapplication.class.getName ()); @AUtoWired private RestTemplate RestTTemplate; @Bean public RestTemplate getRestTemplate () {return new RestTemplate (); } @RequestMapping ("/Hi") public String CallHome () {log.log (nivel.info, "Calling Trace Service-Hi"); return RestTemplate.getForObject ("http: // localhost: 8989/miya", string.class); } @RequestMapping ("/info") public String info () {log.log (nivel.info, "Llamando a Trace Service-Hi"); regresar "soy servicio-hi"; } @Bean public AlwaysSpler DefaultsAsmpler () {return new AllipeSpler (); }}4.3 Crear servicio-miya
El proceso de creación perjudica el servicio-HI, presenta las mismas dependencias y configura Spring.zipkin.base-URL.
Interfaz de exposición externa:
@SpringBootApplication@RestControllerPublic Class ServiceMiyaApplication {public static void main (string [] args) {springApplication.run (ServiceMiyaApplication.class, args); } private static final logger log = logger.getLogger (serviceMiyaApplication.class.getName ()); @RequestMapping ("/HI") public String home () {log.log (nivel.info, "HI se llama"); regresa "¡Hola, soy miya!"; } @RequestMapping ("/miya") public String info () {log.log (nivel.info, "se llama información"); return RestTemplate.getForObject ("http: // localhost: 8988/info", string.class); } @AUtoWired private RestTemplate RestTemplate; @Bean public RestTemplate getRestTemplate () {return new RestTemplate (); }}4.4 Inicie el proyecto, demuestre y rastree
Inicie los tres proyectos anteriores a su vez, abra el navegador para acceder: http: // localhost: 9411/, y aparecerá la siguiente interfaz:
Visita: http: // localhost: 8989/miya, aparece el navegador: soy servicio-hei
Luego abra la interfaz de http: // localhost: 9411/y haga clic en dependencias para descubrir las dependencias del servicio:
Haga clic en Buscar trazas para ver los datos de los servicios específicos que se llaman:
Descargue el código fuente de este artículo: https://github.com/forezp/springcloudlearning/tree/master/chapter9
Lo anterior es todo el contenido de este artículo. Espero que sea útil para el aprendizaje de todos y espero que todos apoyen más a Wulin.com.