Spring Cloud - služby sledovania pomocou Zipkin

1. Prehľad

V tomto článku sa chystáme pridať Zipkin do nášho jarného cloudového projektu. Zipkin je projekt otvoreného zdroja, ktorý poskytuje mechanizmy na odosielanie, prijímanie, ukladanie a vizualizáciu stôp. To nám umožňuje korelovať aktivitu medzi servermi a získať oveľa jasnejší obraz o tom, čo sa presne deje v našich službách.

Tento článok nie je úvodným článkom k distribuovanému sledovaniu alebo jarnému mraku. Ak chcete získať viac informácií o distribuovanom sledovaní, prečítajte si náš úvod do textu jarná sleuth.

2. Zipkinová služba

Náš Zipkin služba bude slúžiť ako obchod pre všetky naše rozpätia. Každé rozpätie sa odošle tejto službe a zhromaždí sa v stopách pre budúcu identifikáciu.

2.1. Nastaviť

Vytvorte nový projekt Spring Boot a pridajte tieto závislosti do pom.xml:

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

Pre referenciu: najnovšiu verziu nájdete na webe Maven Central (zipkin-server, zipkin-autoconfigure-ui). Verzie závislostí sa dedia od rodiča typu jar-boot-štartér-rodič.

2.2. Povolenie servera Zipkin

Ak chcete povoliť Zipkin server, musíme do hlavnej triedy aplikácie pridať nejaké anotácie:

@SpringBootApplication @EnableZipkinServer verejná trieda ZipkinApplication {...}

Nová anotácia @EnableZipkinServer nastaví tento server tak, aby počúval prichádzajúce rozpätia a slúžil ako naše používateľské rozhranie na dopytovanie.

2.3. Konfigurácia

Najskôr vytvorme súbor s názvom bootstrap.properties v src / main / resources. Pamätajte, že tento súbor je potrebný na načítanie našej konfigurácie z vonkajšieho konfiguračného servera.

Pridajme k tomu tieto vlastnosti:

spring.cloud.config.name = zipkin spring.cloud.config.discovery.service-id = konfigurácia spring.cloud.config.discovery.enabled = skutočná spring.cloud.config.username = configUser spring.cloud.config.password = configPassword eureka.client.serviceUrl.defaultZone = // discUser: [chránený e-mailom]: 8082 / eureka /

Teraz pridajme konfiguračný súbor do nášho konfiguračného úložiska na adrese c: \ Users \ {používateľské meno} \ vo Windows alebo / home / {username} / dňa * nix.

V tomto adresári pridáme súbor s názvom zipkin.vlastnosti a pridajte tento obsah:

spring.application.name = zipkin server.port = 9411 eureka.client.region = predvolená eureka.client.registryFetchIntervalSeconds = 5 logging.level.org.springframework.web = ladenie

Nezabudnite vykonať zmeny v tomto adresári, aby konfiguračná služba zistila zmeny a načítala súbor.

2.4. Bež

Teraz spustime našu aplikáciu a prejdite na // localhost: 9411. Mali by sme sa pozdraviť Zipkinova domovská stránka:

Skvelé! Teraz sme pripravení pridať do našich služieb nejaké závislosti a konfiguráciu, ktoré chceme sledovať.

3. Konfigurácia služby

Nastavenie pre zdrojové servery je takmer rovnaké. V nasledujúcich častiach sa podrobne dozvieme, ako nastaviť knižná služba. Budeme na to nadväzovať vysvetlením úprav potrebných na použitie týchto aktualizácií na server hodnotiaca služba a služba brány.

3.1. Nastaviť

Ak chcete začať posielať rozpätia k našim Zipkin server, pridáme túto závislosť k nášmu pom.xml spis:

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

Pre referenciu: najnovšiu verziu nájdete na webe Maven Central (pružina-oblak-štartér-zips).

3.2. Jarná konfig

Musíme pridať nejakú konfiguráciu knižná služba bude používať Heuréka nájsť našu Zipkin služby. Otvorené BookServiceApplication.java a pridajte tento kód do súboru:

@Autowired private EurekaClient eurekaClient; @Autowired private SpanMetricReporter spanMetricReporter; @Autowired private ZipkinProperties zipkinProperties; @Value ("$ {spring.sleuth.web.skipPattern}") súkromný reťazec skipPattern; // ... hlavná metóda je tu @Bean public ZipkinSpanReporter makeZipkinSpanReporter () {návrat nového ZipkinSpanReporter () {súkromný delegát HttpZipkinSpanReporter; private String baseUrl; @Override public void report (Span span) {InstanceInfo instance = eurekaClient .getNextServerFromEureka ("zipkin", false); if (! (baseUrl! = null && instance.getHomePageUrl (). equals (baseUrl)))) {baseUrl = instance.getHomePageUrl (); delegát = nový HttpZipkinSpanReporter (nový RestTemplate (), baseUrl, zipkinProperties.getFlushInterval (), spanMetricReporter); if (! span.name.matches (skipPattern)) delegate.report (span); }}}; }

Vyššie uvedená konfigurácia registruje zvyk ZipkinSpanReporter ktorá dostane svoju adresu URL z heuréky. Tento kód tiež sleduje existujúcu adresu URL a iba aktualizuje HttpZipkinSpanReporter ak sa URL zmení. Týmto spôsobom bez ohľadu na to, kam nasadíme náš server Zipkin, budeme ho vždy schopní nájsť bez reštartovania služby.

Importujeme tiež predvolené vlastnosti Zipkin, ktoré sa načítajú pomocou jarného zavedenia, a použijeme ich na správu nášho vlastného reportéra.

3.3. Konfigurácia

Teraz pridajme do nášho konfiguráciu book-service.properties súbor v konfiguračnom úložisku:

spring.sleuth.sampler.percentage = 1,0 spring.sleuth.web.skipPattern = (^ vyčistenie. *)

Zipkin funguje vzorkovaním akcií na serveri. Nastavením spring.sleuth.sampler.percentage na 1,0, nastavujeme vzorkovaciu frekvenciu na 100%. Vzor preskočenia je jednoducho regulárny výraz používaný na vylúčenie rozpätí, ktorých meno sa zhoduje.

Vzor preskočenia zablokuje hlásenie všetkých rozpätí, ktoré sa začínajú slovom „vyčistenie“. Týmto sa zastaví rozpätie pochádzajúce z jarnej kódovej relácie.

3.4. Hodnotiaca služba

Rovnakým spôsobom postupujte podľa pokynov v knižná služba vyššie, uplatnenie zmien na ekvivalentné súbory pre hodnotiaca služba.

3.5. Služba brány

Postupujte rovnako knižná služba. Ale pri pridávaní konfigurácie do brány.vlastnosti namiesto toho pridajte tieto:

spring.sleuth.sampler.percentage = 1,0 spring.sleuth.web.skipPattern = (^ vyčistenie. * |. + favicon. *)

Toto nakonfiguruje službu brány tak, aby neposielala rozpätia okolo favicon alebo jarnej relácie.

3.6. Bež

Ak ste tak ešte neurobili, spustite program konfigur, objav, brána, kniha, hodnoteniea zips služby.

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

Otvorte novú kartu a prejdite na // localhost: 9411. Vyberte službu kníh a stlačte tlačidlo „Nájsť stopy“. Vo výsledkoch vyhľadávania by ste mali vidieť stopu. Kliknite na túto stopu jej otvorenia:

Na stránke sledovania vidíme požiadavku rozdelenú podľa služieb. Prvé dve rozpätia vytvára brána, a posledný je vytvorený knižná služba. To nám ukazuje, koľko času strávila žiadosť spracovaním na serveri knižná služba, 18,379 ms a ďalej brána, 87,961 ms.

4. Záver

Videli sme, aké ľahké je integrovať sa Zipkin do našej cloudovej aplikácie.

To nám dáva potrebný prehľad o tom, ako komunikácia prechádza našou aplikáciou. Keď sa naša aplikácia stáva zložitejšou, spoločnosť Zipkin nám môže poskytnúť potrebné informácie o tom, kde trávia čas požiadavky. To nám môže pomôcť zistiť, kde sa veci spomaľujú, a naznačiť, ktoré oblasti našej aplikácie je potrebné vylepšiť.

Ako vždy môžete nájsť zdrojový kód na Githube.