Spring Cloud - usluge praćenja sa Zipkinom

1. Pregled

U ovom ćemo članku dodati Zipkin našem proljetnom projektu oblaka. Zipkin je projekt otvorenog koda koji pruža mehanizme za slanje, primanje, spremanje i vizualizaciju tragova. To nam omogućuje korelaciju aktivnosti između poslužitelja i dobivanje puno jasnije slike o tome što se točno događa u našim uslugama.

Ovaj članak nije uvodni članak o distribuiranom praćenju ili proljetnom oblaku. Ako želite više informacija o raspodijeljenom praćenju, pročitajte naš uvod u proljeće.

2. Zipkin usluga

Naše Zipkin usluga služit će kao trgovina za sve naše raspone. Svaki raspon šalje se ovoj službi i sakuplja u tragove za buduću identifikaciju.

2.1. Postaviti

Stvorite novi projekt Spring Boot i dodajte ove ovisnosti u pom.xml:

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

Za referencu: najnoviju verziju možete pronaći na Maven Central (zipkin-server, zipkin-autoconfigure-ui). Verzije ovisnosti nasljeđuju se od spring-boot-starter-parent.

2.2. Omogućavanje Zipkin poslužitelja

Da biste omogućili Zipkin poslužitelju, moramo dodati neke bilješke glavnoj aplikacijskoj klasi:

@SpringBootApplication @EnableZipkinServer javna klasa ZipkinApplication {...}

Nova bilješka @EnableZipkinServer postavit će ovaj poslužitelj da sluša dolazne raspone i djeluje kao naše korisničko sučelje za upite.

2.3. Konfiguracija

Prvo stvorimo datoteku koja se zove bootstrap.svojstva u src / glavni / resursi. Imajte na umu da je ova datoteka potrebna za dohvaćanje naše konfiguracije s out config servera.

Dodajmo mu ova svojstva:

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 = // diskKorisnik: [zaštićen e-poštom]: 8082 / eureka /

Ajmo sada dodati konfiguracijsku datoteku u naš config repo, koji se nalazi na c: \ Korisnici \ {korisničko ime} \ na Windowsima ili / home / {korisničko ime} / na * nixu.

U ovaj direktorij dodajmo datoteku s imenom zipkin.svojstva i dodajte ovaj sadržaj:

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

Ne zaboravite izvršiti promjene u ovom direktoriju tako da će usluga konfiguriranja otkriti promjene i učitati datoteku.

2.4. Trčanje

A sada pokrenimo našu aplikaciju i idemo do // localhost: 9411. Trebali bi nas dočekati Zipkinova početna stranica:

Sjajno! Sada smo spremni dodati neke ovisnosti i konfiguraciju našim uslugama koje želimo pratiti.

3. Konfiguracija usluge

Postavljanje za poslužitelje resursa gotovo je isto. U sljedećim odjeljcima detaljno ćemo objasniti kako postaviti knjiga-usluga. Slijedit ćemo to objašnjavajući izmjene potrebne za primjenu ovih ažuriranja na rejting-usluga i gateway-usluga.

3.1. Postaviti

Za početak slanja raspona na naš Zipkin poslužitelju, dodat ćemo ovu ovisnost našem pom.xml datoteka:

 org.springframework.cloud proljeće-oblak-starter-zipkin 

Za referencu: najnoviju verziju možete pronaći na Maven Central (proljeće-oblak-starter-zipkin).

3.2. Spring Config

Moramo dodati neku konfiguraciju tako da knjiga-usluga koristit ću Eureka pronaći naše Zipkin servis. Otvorena BookServiceApplication.java i dodajte ovaj kod u datoteku:

@Autowired privatni EurekaClient eurekaClient; @Autowired private SpanMetricReporter spanMetricReporter; @Autowired private ZipkinProperties zipkinProperties; @Value ("$ {spring.sleuth.web.skipPattern}") private String skipPattern; // ... glavna metoda ide ovdje @Bean public ZipkinSpanReporter makeZipkinSpanReporter () {return new ZipkinSpanReporter () {private HttpZipkinSpanReporter delegat; private String baseUrl; @Override public void report (Span span) {InstanceInfo instance = eurekaClient .getNextServerFromEureka ("zipkin", false); if (! (baseUrl! = null && instance.getHomePageUrl (). jednako (baseUrl))) {baseUrl = instance.getHomePageUrl (); delegat = novi HttpZipkinSpanReporter (novi RestTemplate (), baseUrl, zipkinProperties.getFlushInterval (), spanMetricReporter); if (! span.name.matches (skipPattern)) delegate.report (span); }}}; }

Gornja konfiguracija registrira običaj ZipkinSpanReporter koja svoj URL dobiva od eureke. Ovaj kod također prati postojeći URL i samo ažurira HttpZipkinSpanReporter ako se URL promijeni. Na ovaj način, bez obzira na to gdje rasporedimo naš Zipkin poslužitelj, uvijek ćemo ga moći pronaći bez ponovnog pokretanja usluge.

Također uvozimo zadana svojstva Zipkina koja se učitavaju pomoću proljetnog pokretanja i koristimo ih za upravljanje našim prilagođenim izvještačem.

3.3. Konfiguracija

Ajmo sada dodati neku konfiguraciju u naš usluga knjiga.svojstva datoteka u spremištu konfiguracije:

spring.sleuth.sampler.percentage = 1,0 spring.sleuth.web.skipPattern = (^ čišćenje. *)

Zipkin radi uzorkovanjem radnji na poslužitelju. Postavljanjem proljeće.sleuth.uzorak.procent na 1,0, postavljamo brzinu uzorkovanja na 100%. Uzorak preskakanja jednostavno je regularni izraz koji se koristi za izuzeće raspona čije se ime podudara.

Uzorak preskakanja blokirat će prijavljivanje svih raspona koji započinju riječju "čišćenje". Ovo je za zaustavljanje raspona koji potječu iz baze kodova proljetne sesije.

3.4. Usluga ocjenjivanja

Slijedite iste korake iz knjiga-usluga u gornjem odjeljku, primjenjujući promjene na ekvivalentne datoteke za rejting-usluga.

3.5. Usluga pristupnika

Slijedite iste korake knjiga-usluga. Ali prilikom dodavanja konfiguracije na pristupnik.Svojstva umjesto toga dodajte ove:

spring.sleuth.sampler.percentage = 1,0 spring.sleuth.web.skipPattern = (^ čišćenje. * |. + favicon. *)

Ovo će konfigurirati uslugu pristupnika da ne šalje raspone o faviconu ili proljetnoj sesiji.

3.6. Trčanje

Ako to već niste učinili, pokrenite konfiguracija, otkriće, gateway, knjiga, ocjenjivanje, i zipkin usluge.

Idite na // localhost: 8080 / book-service / books.

Otvorite novu karticu i idite na // localhost: 9411. Odaberite uslugu knjiga i pritisnite gumb "Pronađi tragove". Trebali biste vidjeti trag koji se pojavljuje u rezultatima pretraživanja. Kliknite trag otvaranja:

Na stranici praćenja možemo vidjeti zahtjev raščlanjen po uslugama. Prva dva raspona kreira gateway, a posljednji kreira knjiga-usluga. To nam pokazuje koliko je vremena zahtjev proveo obrađujući na usluga knjiga, 18.379 ms, a na gateway, 87,961 ms.

4. Zaključak

Vidjeli smo kako je lako integrirati Zipkin u našu aplikaciju u oblaku.

To nam daje prijeko potreban uvid u to kako komunikacija putuje kroz našu aplikaciju. Kako naša aplikacija postaje sve složenija, Zipkin nam može pružiti prijeko potrebne informacije o tome gdje zahtjevi provode vrijeme. To nam može pomoći utvrditi gdje se stvari usporavaju i naznačiti koja područja naše aplikacije trebaju poboljšati.

Kao i uvijek, izvorni kod možete pronaći na Githubu.