Spring Cloud - Tracing Services met Zipkin

1. Overzicht

In dit artikel gaan we toevoegen Zipkin aan ons Spring Cloud-project. Zipkin is een open source-project dat mechanismen biedt voor het verzenden, ontvangen, opslaan en visualiseren van sporen. Dit stelt ons in staat om activiteiten tussen servers te correleren en een veel duidelijker beeld te krijgen van wat er precies gebeurt in onze services.

Dit artikel is geen inleidend artikel over gedistribueerde tracering of springwolk. Als u meer informatie wilt over gedistribueerde tracering, lees dan onze inleiding tot spring speurneus.

2. Zipkin-service

Onze Zipkin service zal dienen als de winkel voor al onze overspanningen. Elk bereik wordt naar deze service gestuurd en in sporen verzameld voor toekomstige identificatie.

2.1. Opstelling

Maak een nieuw Spring Boot-project en voeg deze afhankelijkheden toe aan pom.xml:

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

Ter referentie: u vindt de laatste versie op Maven Central (zipkin-server, zipkin-autoconfigure-ui). Versies van de afhankelijkheden worden overgenomen van spring-boot-starter-parent.

2.2. Zipkin Server inschakelen

Om het Zipkin server, moeten we enkele annotaties toevoegen aan de hoofdtoepassingsklasse:

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

De nieuwe annotatie @EnableZipkinServer zal deze server instellen om te luisteren naar inkomende bereiken en fungeren als onze gebruikersinterface voor zoekopdrachten.

2.3. Configuratie

Laten we eerst een bestand maken met de naam bootstrap.properties in src / main / resources. Onthoud dat dit bestand nodig is om onze configuratie op te halen van onze configuratieserver.

Laten we er deze eigenschappen aan toevoegen:

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

Laten we nu een configuratiebestand toevoegen aan onze configuratierepo, te vinden op c: \ Users \ {gebruikersnaam} \ op Windows of / home / {gebruikersnaam} / op * nix.

Laten we in deze map een bestand toevoegen met de naam zipkin.properties en voeg deze inhoud toe:

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

Vergeet niet om de wijzigingen in deze map door te voeren, zodat de configuratieservice de wijzigingen zal detecteren en het bestand zal laden.

2.4. Rennen

Laten we nu onze applicatie starten en naar // localhost: 9411 gaan. We zouden moeten worden begroet Zipkin's Startpagina:

Super goed! Nu zijn we klaar om enkele afhankelijkheden en configuratie aan onze services toe te voegen die we willen traceren.

3. Serviceconfiguratie

De opzet voor de bronservers is vrijwel hetzelfde. In de volgende secties zullen we gedetailleerd beschrijven hoe u het boekenservice. We zullen dit opvolgen door de aanpassingen uit te leggen die nodig zijn om deze updates toe te passen op het rating-service en gateway-service.

3.1. Opstelling

Om te beginnen met het verzenden van reeksen naar ons Zipkin server, zullen we deze afhankelijkheid toevoegen aan onze pom.xml het dossier:

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

Ter referentie: u vindt de laatste versie op Maven Central (spring-cloud-starter-zipkin).

3.2. Spring Config

We moeten wat configuratie toevoegen zodat boekenservice zal gebruiken Eureka om onze te vinden Zipkin onderhoud. Open BookServiceApplication.java en voeg deze code toe aan het bestand:

@Autowired privé EurekaClient eurekaClient; @Autowired privé SpanMetricReporter spanMetricReporter; @Autowired privé ZipkinProperties zipkinProperties; @Value ("$ {spring.sleuth.web.skipPattern}") private String skipPattern; // ... de belangrijkste methode gaat hier @Bean openbare ZipkinSpanReporter makeZipkinSpanReporter () {retourneer nieuwe ZipkinSpanReporter () {privé HttpZipkinSpanReporter afgevaardigde; private String baseUrl; @Override openbaar ongeldig rapport (Span span) {InstanceInfo instantie = eurekaClient .getNextServerFromEureka ("zipkin", false); if (! (baseUrl! = null && instance.getHomePageUrl (). equals (baseUrl))) {baseUrl = instance.getHomePageUrl (); delegate = nieuwe HttpZipkinSpanReporter (nieuwe RestTemplate (), baseUrl, zipkinProperties.getFlushInterval (), spanMetricReporter); if (! span.name.matches (skipPattern)) delegate.report (span); }}}; }

De bovenstaande configuratie registreert een custom ZipkinSpanReporter dat zijn URL krijgt van eureka. Deze code houdt ook de bestaande URL bij en werkt alleen het HttpZipkinSpanReporter als de URL verandert. Op deze manier, ongeacht waar we onze Zipkin-server inzetten, kunnen we deze altijd vinden zonder de service opnieuw te starten.

We importeren ook de standaard Zipkin-eigenschappen die worden geladen door spring boot en gebruiken deze om onze aangepaste reporter te beheren.

3.3. Configuratie

Laten we nu wat configuratie toevoegen aan onze book-service.properties bestand in de configuratie-repository:

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

Zipkin werkt door bemonstering van acties op een server. Door de spring.sleuth.sampler.percentage tot 1,0, stellen we de bemonsteringsfrequentie in op 100%. Het overslaan-patroon is gewoon een regex die wordt gebruikt voor het uitsluiten van bereiken waarvan de naam overeenkomt.

Het overslaan-patroon zorgt ervoor dat alle trajecten niet worden gerapporteerd die beginnen met het woord ‘opschonen '. Dit is om overspanningen te stoppen die afkomstig zijn van de codebasis van de lentesessie.

3.4. Beoordelingsservice

Volg dezelfde stappen vanaf het boekenservice sectie hierboven, de wijzigingen toepassen op de equivalente bestanden voor rating-service.

3.5. Gateway-service

Volg dezelfde stappen boekenservice. Maar bij het toevoegen van de configuratie aan de gateway.eigendommen voeg deze in plaats daarvan toe:

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

Hiermee wordt de gateway-service geconfigureerd om geen reeksen over de favicon of de lentesessie te verzenden.

3.6. Rennen

Start het config, ontdekking, poort, boek, beoordeling, en zipkin Diensten.

Navigeer naar // localhost: 8080 / book-service / books.

Open een nieuw tabblad en ga naar // localhost: 9411. Selecteer boekenservice en druk op de ‘Vind sporen’ knop. U zou een spoor moeten zien verschijnen in de zoekresultaten. Klik op dat spoor om het te openen:

Op de traceringspagina kunnen we het verzoek zien uitgesplitst naar service. De eerste twee bereiken worden gemaakt door de poort, en de laatste wordt gemaakt door de boekenservice. Dit laat ons zien hoeveel tijd het verzoek heeft besteed aan het verwerken van het boekenservice, 18.379 ms, en op de poort, 87.961 ms.

4. Conclusie

We hebben gezien hoe gemakkelijk het is om te integreren Zipkin in onze cloudapplicatie.

Dit geeft ons een broodnodig inzicht in hoe communicatie door onze applicatie verloopt. Naarmate onze applicatie steeds complexer wordt, kan Zipkin ons voorzien van de broodnodige informatie over waar verzoeken hun tijd doorbrengen. Dit kan ons helpen bepalen waar de zaken vertragen en aangeven welke gebieden van onze applicatie verbetering behoeven.

Zoals altijd kun je de broncode vinden op Github.