Spring Cloud - Sporingstjenester med Zipkin

1. Oversikt

I denne artikkelen skal vi legge til Zipkin til vårskyprosjektet vårt. Zipkin er et open source-prosjekt som gir mekanismer for sending, mottak, lagring og visualisering av spor. Dette lar oss korrelere aktivitet mellom servere og få et mye tydeligere bilde av nøyaktig hva som skjer i tjenestene våre.

Denne artikkelen er ikke en innledende artikkel til distribuert sporing eller vårsky. Hvis du ønsker mer informasjon om distribuert sporing, kan du lese vår introduksjon til vårens sleuth.

2. Zipkin Service

Våre Zipkin tjenesten vil tjene som butikk for alle våre spenn. Hvert spenn sendes til denne tjenesten og samles i spor for fremtidig identifikasjon.

2.1. Oppsett

Opprett et nytt Spring Boot-prosjekt og legg til disse avhengighetene til pom.xml:

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

For referanse: du finner den siste versjonen på Maven Central (zipkin-server, zipkin-autoconfigure-ui). Versjoner av avhengighetene arves fra spring-boot-starter-parent.

2.2. Aktiverer Zipkin Server

For å aktivere Zipkin server, må vi legge til noen kommentarer til hovedapplikasjonsklassen:

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

Den nye kommentaren @EnableZipkinServer vil sette opp denne serveren for å lytte etter innkommende spenner og fungere som vårt brukergrensesnitt for spørsmål.

2.3. Konfigurasjon

La oss først lage en fil som heter bootstrap.properties i src / main / resources. Husk at denne filen er nødvendig for å hente konfigurasjonen vår fra konfigureringsserveren.

La oss legge til disse egenskapene til den:

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 = // diskbruker: [e-postbeskyttet]: 8082 / eureka /

La oss nå legge til en konfigurasjonsfil i vår konfigurasjonsrepos, som ligger på c: \ Brukere \ {brukernavn} \ på Windows eller / hjem / {brukernavn} / på * nix.

I denne katalogen, la oss legge til en fil med navnet zipkin.egenskaper og legg til dette innholdet:

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

Husk å foreta endringene i denne katalogen slik at konfigurasjonstjenesten oppdager endringene og laster filen.

2.4. Løpe

La oss nå kjøre applikasjonen vår og navigere til // localhost: 9411. Vi skal møtes med Zipkin's hjemmeside:

Flott! Nå er vi klare til å legge til noen avhengigheter og konfigurasjoner i tjenestene våre som vi vil spore.

3. Tjenestekonfigurasjon

Oppsettet for ressursserverne er stort sett det samme. I de følgende avsnittene vil vi detaljere hvordan du setter opp boktjeneste. Vi vil følge opp dette ved å forklare endringene som er nødvendige for å bruke disse oppdateringene på vurderingstjeneste og gateway-service.

3.1. Oppsett

For å begynne å sende spenn til vår Zipkin server, vil vi legge til denne avhengigheten til vår pom.xml fil:

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

For referanse: du finner den siste versjonen på Maven Central (vår-sky-start-zipkin).

3.2. Vårkonfig

Vi må legge til litt konfigurasjon slik at boktjeneste vil bruke Eureka å finne vår Zipkin service. Åpen BookServiceApplication.java og legg til denne koden i filen:

@Autowired private EurekaClient eurekaClient; @Autowired privat SpanMetricReporter spanMetricReporter; @Autowired private ZipkinProperties zipkinProperties; @Value ("$ {spring.sleuth.web.skipPattern}") privat String skipPattern; // ... hovedmetoden går her @Bean public ZipkinSpanReporter makeZipkinSpanReporter () {return new ZipkinSpanReporter () {private HttpZipkinSpanReporter delegate; privat streng baseUrl; @ Override public void report (Span span) {InstanceInfo instance = eurekaClient .getNextServerFromEureka ("zipkin", false); hvis (! (baseUrl! = null && forekomst.getHomePageUrl (). er lik (baseUrl))) {baseUrl = forekomst.getHomePageUrl (); delegat = ny HttpZipkinSpanReporter (ny RestTemplate (), baseUrl, zipkinProperties.getFlushInterval (), spanMetricReporter); hvis (! span.name.matches (skipPattern)) delegat.rapport (span); }}}; }

Konfigurasjonen ovenfor registrerer en egendefinert ZipkinSpanReporter som får nettadressen sin fra eureka. Denne koden holder også oversikt over eksisterende URL og oppdaterer bare HttpZipkinSpanReporter hvis nettadressen endres. På denne måten uansett hvor vi distribuerer Zipkin-serveren vår, vil vi alltid kunne finne den uten å starte tjenesten på nytt.

Vi importerer også standard Zipkin-egenskapene som er lastet av vårstøvel og bruker dem til å administrere vår tilpassede reporter.

3.3. Konfigurasjon

La oss nå legge til noen konfigurasjoner i vår book-service.properties fil i konfigurasjonsdatabasen:

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

Zipkin fungerer ved å sample handlinger på en server. Ved å stille inn våren.sleuth.sampler.prosent til 1.0, setter vi samplingsfrekvensen til 100%. Hopp over mønsteret er rett og slett et regeks som brukes for å ekskludere spenner hvis navn samsvarer.

Hopp over mønsteret vil blokkere alle rapporterte spenner som starter med ordet 'opprydding'. Dette er for å stoppe spenn som stammer fra vårøktens kodebase.

3.4. Rangeringstjeneste

Følg de samme trinnene fra boktjeneste avsnittet ovenfor, og bruker endringene i de tilsvarende filene for vurderingstjeneste.

3.5. Gateway-tjeneste

Følg de samme trinnene boktjeneste. Men når du legger til konfigurasjonen i gatewayen.eiendommer legg til disse i stedet:

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

Dette vil konfigurere gatewaytjenesten til ikke å sende spenn om favicon eller vårøkten.

3.6. Løpe

Hvis du ikke allerede har gjort det, kan du starte config, oppdagelse, inngangsport, bok, vurdering, og zipkin tjenester.

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

Åpne en ny fane og naviger til // localhost: 9411. Velg boktjeneste og trykk på 'Finn spor' -knappen. Du bør se et spor vises i søkeresultatene. Klikk på sporet av å åpne det:

På sporingssiden kan vi se forespørselen fordelt på tjenester. De to første spennene er opprettet av inngangsport, og det siste er skapt av boktjeneste. Dette viser oss hvor mye tid forespørselen brukte på behandlingen book-service, 18.379 ms, og på inngangsport, 87.961 ms.

4. Konklusjon

Vi har sett hvor enkelt det er å integrere Zipkin inn i skyapplikasjonen vår.

Dette gir oss litt sårt tiltrengt innsikt i hvordan kommunikasjon beveger seg gjennom applikasjonen vår. Ettersom søknaden vår vokser i kompleksitet, kan Zipkin gi oss nødvendig informasjon om hvor forespørsler bruker tiden sin. Dette kan hjelpe oss med å bestemme hvor ting bremser og indikere hvilke områder av applikasjonen som trenger forbedring.

Som alltid kan du finne kildekoden på Github.