Spring Cloud - Sporingstjenester med Zipkin

1. Oversigt

I denne artikel vil vi tilføje Lynlås til vores forårsky-projekt. Zipkin er et open source-projekt, der giver mekanismer til afsendelse, modtagelse, lagring og visualisering af spor. Dette giver os mulighed for at korrelere aktivitet mellem servere og få et meget klarere billede af præcis, hvad der sker i vores tjenester.

Denne artikel er ikke en indledende artikel til distribueret sporing eller forårssky. Hvis du gerne vil have flere oplysninger om distribueret sporing, kan du læse vores introduktion til foråret.

2. Zipkin Service

Vores Lynlås service vil fungere som butik for alle vores spændvidder. Hvert span sendes til denne service og samles i spor til fremtidig identifikation.

2.1. Opsætning

Opret et nyt Spring Boot-projekt, og tilføj disse afhængigheder til pom.xml:

 io.zipkin.java zipkin-server io.zipkin.java zipkin-autoconfigure-ui runtime 

Til reference: du kan finde den nyeste version på Maven Central (zipkin-server, zipkin-autoconfigure-ui). Versioner af afhængighederne arves fra spring-boot-starter-parent.

2.2. Aktivering af Zipkin Server

For at aktivere Zipkin server, skal vi tilføje nogle kommentarer til hovedapplikationsklassen:

@SpringBootApplication @EnableZipkinServer offentlig klasse ZipkinApplication {...}

Den nye kommentar @EnableZipkinServer vil oprette denne server til at lytte efter indgående spænd og fungere som vores brugergrænseflade til forespørgsel.

2.3. Konfiguration

Lad os først oprette en fil, der hedder bootstrap.properties i src / main / ressourcer. Husk, at denne fil er nødvendig for at hente vores konfiguration fra vores konfigurationsserver.

Lad os tilføje disse egenskaber til det:

spring.cloud.config.name = zipkin spring.cloud.config.discovery.service-id = config spring.cloud.config.discovery.enabled = true spring.cloud.config.username = configUser spring.cloud.config.password = configPassword eureka.client.serviceUrl.defaultZone = // discUser: [email protected]: 8082 / eureka /

Lad os nu tilføje en konfigurationsfil til vores config repo, der ligger på c: \ Brugere \ {brugernavn} \ på Windows eller / hjem / {brugernavn} / på * nix.

Lad os i denne mappe tilføje en fil med navnet zipkin.egenskaber og tilføj dette indhold:

spring.application.name = zipkin server.port = 9411 eureka.client.region = standard eureka.client.registryFetchIntervalSeconds = 5 logging.level.org.springframework.web = debug

Husk at foretage ændringer i denne mappe, så konfigurationstjenesten registrerer ændringerne og indlæser filen.

2.4. Løb

Lad os nu køre vores applikation og navigere til // localhost: 9411. Vi skal blive mødt med Zipkin's hjemmeside:

Store! Nu er vi klar til at tilføje nogle afhængigheder og konfigurationer til vores tjenester, som vi vil spore.

3. Servicekonfiguration

Opsætningen til ressource-serverne er stort set den samme. I de følgende afsnit beskriver vi, hvordan du konfigurerer bog-service. Vi følger dette op ved at forklare de nødvendige ændringer for at anvende disse opdateringer til rating-service og gateway-service.

3.1. Opsætning

For at begynde at sende spændvidde til vores Lynlås server, vil vi tilføje denne afhængighed til vores pom.xml fil:

 org.springframework.cloud spring-cloud-starter-zipkin 

Til reference: du kan finde den nyeste version på Maven Central (spring-cloud-starter-zipkin).

3.2. Spring Config

Vi er nødt til at tilføje nogle konfigurationer, så det bog-service vil bruge Eureka at finde vores Zipkin service. Åben BookServiceApplication.java og tilføj denne kode til filen:

@Autowired privat EurekaClient eurekaClient; @Autowired privat SpanMetricReporter spanMetricReporter; @Autowired private ZipkinProperties zipkinProperties; @Value ("$ {spring.sleuth.web.skipPattern}") privat String skipPattern; // ... den vigtigste metode går her @Bean public ZipkinSpanReporter makeZipkinSpanReporter () {returner ny ZipkinSpanReporter () {privat HttpZipkinSpanReporter-delegat; private String baseUrl; @ Override offentlig ugyldig rapport (span span) {InstanceInfo instance = eurekaClient .getNextServerFromEureka ("zipkin", false); hvis (! (baseUrl! = null && forekomst.getHomePageUrl (). er lig med (baseUrl))) {baseUrl = eksempel.getHomePageUrl (); delegeret = ny HttpZipkinSpanReporter (ny RestTemplate (), baseUrl, zipkinProperties.getFlushInterval (), spanMetricReporter); hvis (! span.name.matches (skipPattern)) delegeret.rapport (span); }}} }

Ovenstående konfiguration registrerer en brugerdefineret ZipkinSpanReporter der får sin URL fra eureka. Denne kode holder også styr på den eksisterende URL og opdaterer kun HttpZipkinSpanReporter hvis URL'en ændres. På denne måde, uanset hvor vi distribuerer vores Zipkin-server, vil vi altid kunne finde den uden at genstarte tjenesten.

Vi importerer også Zipkin-standardegenskaberne, der er indlæst af springboot, og bruger dem til at administrere vores brugerdefinerede reporter.

3.3. Konfiguration

Lad os nu tilføje nogle konfigurationer til vores book-service.properties fil i konfigurationsarkivet:

spring.sleuth.sampler.percentage = 1.0 spring.sleuth.web.skipPattern = (^ oprydning. *)

Lynlås fungerer ved prøveudtagning af handlinger på en server. Ved at indstille spring.sleuth.sampler.procent til 1.0, sætter vi samplingsfrekvensen til 100%. Spring mønster er simpelthen en regex, der bruges til at ekskludere spænd, hvis navn matcher.

Spring-mønsteret blokerer for rapportering af alle spænd, der starter med ordet 'oprydning'. Dette er for at stoppe spændinger, der stammer fra forårssessionskodebasen.

3.4. Vurderingstjeneste

Følg de samme trin fra bog-service ovenfor, hvor ændringerne anvendes til de tilsvarende filer til rating-service.

3.5. Gateway-service

Følg de samme trin bog-service. Men når du tilføjer konfigurationen til gatewayen.ejendomme tilføj disse i stedet:

spring.sleuth.sampler.percentage = 1.0 spring.sleuth.web.skipPattern = (^ oprydning. * |. + favicon. *)

Dette vil konfigurere gatewaytjenesten til ikke at sende spænd om favicon eller forårssessionen.

3.6. Løb

Hvis du ikke allerede har gjort det, skal du starte config, opdagelse, gateway, Bestil, bedømmelseog zipkin tjenester.

Naviger til // localhost: 8080 / book-service / books.

Åbn en ny fane, og naviger til // localhost: 9411. Vælg bogtjeneste, og tryk på knappen 'Find spor'. Du skal se et spor vises i søgeresultaterne. Klik på det spor af åbning:

På sporingssiden kan vi se anmodningen opdelt efter tjeneste. De første to spænd er skabt af gateway, og det sidste oprettes af bog-service. Dette viser os, hvor meget tid anmodningen brugte på at behandle bog-service, 18.379 ms, og på den gateway, 87.961 ms.

4. Konklusion

Vi har set, hvor let det er at integrere Zipkin ind i vores skyapplikation.

Dette giver os noget tiltrængt indblik i, hvordan kommunikation bevæger sig gennem vores applikation. Da vores ansøgning vokser i kompleksitet, kan Zipkin give os meget nødvendige oplysninger om, hvor anmodninger bruger deres tid. Dette kan hjælpe os med at bestemme, hvor tingene er langsommere, og angive, hvilke områder af vores applikation der skal forbedres.

Som altid kan du finde kildekoden på Github.


$config[zx-auto] not found$config[zx-overlay] not found