Cet article parle principalement du composant de suivi du service Zipkin et Spring Cloud Sleuth intègre le composant Zipkin.
1. Introduction
Ajoutez Sleuth au chemin de classe d'une application Spring Boot (voir ci-dessous pour les exemples Maven et Gradle), et vous verrez les données de corrélation collectées dans les journaux, tant que vous enregistrez les demandes.
- extrait du site officiel
La fonction principale de Spring Cloud Sleuth est de fournir des solutions de suivi dans les systèmes distribués, et il est compatible avec Zipkin. Vous n'avez qu'à introduire des dépendances correspondantes dans le fichier POM.
2. Suivi et analyse des services
Dans l'architecture de microservice, les services sont divisés par le biais de services. Une interface exposée au monde extérieur peut nécessiter que de nombreux services collaborent pour remplir cette fonction d'interface. Si un service sur le lien a des problèmes ou des délais de réseau, il entraînera l'échec de l'appel d'interface. Alors que l'entreprise continue de se développer, l'appel entre les services deviendra de plus en plus compliqué.
À mesure que de plus en plus de services sont disponibles, l'analyse des chaînes d'appels deviendra de plus en plus compliquée. La relation d'appel entre eux peut être la suivante:
Iii. Termes
Span: unité de travail de base. Par exemple, l'envoi d'un RPC dans une portée nouvellement créée équivaut à l'envoi d'une demande de réponse au RPC. La portée est identifiée de manière unique par un ID 64 bits, et la trace est représentée par un autre ID 64 bits. La SPAN a d'autres informations de données, telles que Digest, les événements horodatotes, les annotations de valeur clé (TAG), l'ID de Span et l'ID de progression (généralement l'adresse IP).
La travée commence et s'arrête constamment et enregistre en même temps les informations de temps. Lorsque vous créez une portée, vous devez l'arrêter à un moment donné dans le futur.
Trace: une structure d'arbre composée d'une série de portées. Par exemple, si vous exécutez un projet de Big Data distribué, vous devrez peut-être créer une trace.
Annotation: utilisé pour enregistrer l'existence d'un événement dans le temps, et certaines annotations de base sont utilisées pour définir le début et la fin d'une demande.
Graphicalisez le processus d'utilisation de l'annotation Zipkin dans un seul système:
4. Projet de construction
Après avoir expliqué les connaissances de base, prenons le travail réel. Le cas de cet article se compose principalement de trois projets: un serveur-zipkin, qui utilise principalement les fonctions de ZipkinServer pour collecter les données d'appel et l'afficher; un service-Hi, qui expose l'interface HI à l'extérieur; un service-miya, qui expose l'interface Miya à l'extérieur; Ces deux services peuvent être appelés les uns les autres; Et seulement après leur appel, Server-Zipkin collectera des données, c'est pourquoi elle s'appelle le suivi des services.
4.1 Créer un serveur-zipkin
Créez un projet Spring-Boot nommé Server-Zipkin et introduisez des dépendances dans son POM:
<Dependances> <Dependency> <GroupId> org.springframework.boot </proupId> <ArtifActid> printemps-boot-starter </ artifactid> </pedigency> <dependency> <prouprid> org.springframework.boot </prouprid> <ptetifactid> Spring-boot-starter-web </ artifactive> <GroupId> org.springframework.boot </proupId> <Artifactid> Spring-Boot-starter-test </ artifactid> <ccope> test </cope> </dependency> <dependency> <proupId> io.zipkin.java </prouprid> <pretifactid> zipkin-server </ artifactid> </dependence> <GroupId> io.zipkin.java </prôdId> <Artifactid> Zipkin-AutoConfigure-Ui </Retifactid> </Dependance> </Dependance> </Dependency> <Dedency> <ProupId> Org.SpringFramework.Cloud </proupId> <ArtifActid> Spring-Cloud-Dependencys </ Artifactid> <version> camden.sr6 </-version> <ype> pom </pype> <ccope> Import </ccope> </dependency> </dependces> </Dependencymanagement>
Dans sa classe d'entrée de programme, ajoutez l'annotation @enablezipkinserver pour activer la fonction de zipkinserver:
@ SpringbootApplication @ activerzipkinserverpublic class serverzipkinapplication {public static void main (string [] args) {springApplication.run (serverzipkinapplication.class, args); }}Dans le fichier de configuration, application.yml spécifie le port de service comme:
server.port = 9411
4.2 Créer un service-Hi
Dans son introduction POM, la dépendance initiale est Spring-Cloud-Starter-Zipkin, le code est le suivant:
<Dependances> <Dependency> <GroupId> org.springFramework.boot </proupId> <ArtifActid> printemps-boot-starter-web </ artifactid> </dependency> <! - compile (org.springframework> <GroupId> org.springframework.cloud </proupId> <Artifactid> Spring-Cloud-Starter-Zipkin </Retifactid> </Dependency> <Dedency> <ProupId> Org.SpringFramework.Boot </prouprid> <Artifactid> Spring-Boot-Starter-Test </RetifActid> <SCOPE> Test </scope> </Dependance> </dependency> </dependency> <dependencyManagement> <dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>Dalston.RC1</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>
Dans son fichier de configuration Application.yml, spécifiez l'adresse du serveur Zipkin et l'en-tête est spécifié en configurant "Spring.zipkin.base-url":
server.port = 8988spring.zipkin.base-url = http: // localhost: 9411spring.application.name = service-hi
Il est normal d'introduire la dépendance de Spring-Cloud-Starter-Zipkin et de définir Spring.zipkin.base-url.
Interface d'exposition externe:
@ SpringbootApplication @ RestControllerPublic Class ServiceHiapplication {public static void main (String [] args) {SpringApplication.run (ServiceHiApplication.class, args); } Logger final statique privé Logger = logger.getLogger (ServiceHiapplication.Class.getName ()); @Autowired Private RestTemplate RestTemplate; @Bean public restTemplate getRestTemplate () {return new RestTemplate (); } @RequestMapping ("/ Hi") Public String callHome () {log.log (niveau.info, "appelant Trace Service-Hi"); return restTemplate.getForObject ("http: // localhost: 8989 / miya", string.class); } @RequestMapping ("/ info") public String info () {log.log (niveau.info, "appelant Trace Service-Hi"); Retour "I'm Service-Hi"; } @Bean public WellAmpler DefaultSampler () {return newwelsampler (); }}4.3 Créer un service-miya
Le processus de création blesse le service-Hi, introduit les mêmes dépendances et configure spring.zipkin.base-url.
Interface d'exposition externe:
@ SpringbootApplication @ RestControllerPublic classe ServiceMiyaApplication {public static void main (String [] args) {SpringApplication.run (ServiceMiyaApplication.class, args); } Logger final statique privé Logger = logger.getLogger (ServiceMiyaApplication.class.getName ()); @RequestMapping ("/ hi") public String home () {log.log (niveau.info, "Hi est appelé"); Retour "Salut, je suis Miya!"; } @RequestMapping ("/ miya") public String info () {log.log (niveau.info, "info est appelé"); return restTemplate.getForObject ("http: // localhost: 8988 / info", string.class); } @Autowired private restLEmplate restTemplate; @Bean public restTemplate getRestTemplate () {return new RestTemplate (); }}4.4 Démarrer le projet, démontrer et suivre
Démarrez les trois projets ci-dessus à tour à tour, ouvrez le navigateur pour accéder: http: // localhost: 9411 /, et l'interface suivante apparaîtra:
Visitez: http: // localhost: 8989 / miya, le navigateur apparaît: je suis le service-hi
Ouvrez ensuite l'interface de http: // localhost: 9411 / et cliquez sur les dépendances pour découvrir les dépendances du service:
Cliquez sur trouver des traces pour voir les données des services spécifiques qui s'appellent:
Téléchargez le code source de cet article: https://github.com/forezp/springcloudlearning/tree/master/chapter9
Ce qui précède est tout le contenu de cet article. J'espère que cela sera utile à l'apprentissage de tous et j'espère que tout le monde soutiendra davantage Wulin.com.