Spring Cloud - Perkhidmatan Penjejakan dengan Zipkin

1. Gambaran keseluruhan

Dalam artikel ini, kami akan menambahkan Zipkin ke projek awan musim bunga kami. Zipkin adalah projek sumber terbuka yang menyediakan mekanisme untuk menghantar, menerima, menyimpan, dan memvisualisasikan jejak. Ini membolehkan kami menghubungkan aktiviti antara pelayan dan mendapatkan gambaran yang lebih jelas mengenai apa yang berlaku dalam perkhidmatan kami.

Artikel ini bukan artikel pengantar untuk jejak edaran atau awan musim bunga. Sekiranya anda mahukan lebih banyak maklumat mengenai pengesanan yang diedarkan, baca pengenalan kami mengenai spring sleuth.

2. Perkhidmatan Zipkin

Perkhidmatan Zipkin kami akan berfungsi sebagai kedai untuk semua jangka masa kami. Setiap rentang dihantar ke perkhidmatan ini dan dikumpulkan menjadi jejak untuk pengenalan masa depan.

2.1. Persediaan

Buat projek Spring Boot baru dan tambahkan kebergantungan ini ke pom.xml:

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

Sebagai rujukan: anda boleh mendapatkan versi terbaru di Maven Central (zipkin-server, zipkin-autoconfigure-ui). Versi kebergantungan diwarisi dari spring-boot-starter-parent.

2.2. Mengaktifkan Zipkin Server

Untuk mengaktifkan pelayan Zipkin , kita mesti menambahkan beberapa anotasi ke kelas aplikasi utama:

@SpringBootApplication @EnableZipkinServer public class ZipkinApplication {...}

Anotasi baru @EnableZipkinServer akan menyediakan pelayan ini untuk mendengar jangka masa masuk dan bertindak sebagai UI kami untuk membuat pertanyaan.

2.3. Konfigurasi

Pertama, mari buat fail bernama bootstrap.properties dalam src / main / resources . Ingat bahawa fail ini diperlukan untuk mengambil konfigurasi kami dari pelayan konfigurasi keluar.

Mari tambahkan sifat ini:

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/

Sekarang mari kita tambahkan fail konfigurasi ke repo konfigurasi kami, yang terletak di c: \ Users \ {username} \ pada Windows atau / home / {username} / on * nix.

Dalam direktori ini mari kita tambahkan fail bernama zipkin.properties dan tambahkan kandungan berikut:

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

Ingatlah untuk melakukan perubahan dalam direktori ini sehingga layanan konfigurasi akan mengesan perubahan dan memuatkan file.

2.4. Lari

Sekarang mari jalankan aplikasi kami dan arahkan ke // localhost: 9411. Kita harus disambut dengan laman utama Zipkin :

Hebat! Sekarang kami bersedia untuk menambahkan beberapa kebergantungan dan konfigurasi ke perkhidmatan kami yang ingin kami lacak.

3. Konfigurasi Perkhidmatan

Persediaan untuk pelayan sumber hampir sama. Pada bahagian berikut, kami akan memperincikan cara mengatur perkhidmatan buku. Kami akan menindaklanjutinya dengan menjelaskan modifikasi yang diperlukan untuk menerapkan kemas kini ini pada perkhidmatan penarafan dan perkhidmatan gerbang .

3.1. Persediaan

Untuk mula menghantar rentang ke pelayan Zipkin kami , kami akan menambahkan kebergantungan ini ke fail pom.xml kami :

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

Untuk rujukan: anda boleh mendapatkan versi terbaru di Maven Central (spring-cloud-starter-zipkin).

3.2. Spring Config

Kami perlu menambahkan beberapa konfigurasi supaya perkhidmatan buku akan menggunakan Eureka untuk mencari perkhidmatan Zipkin kami . Buka BookServiceApplication.java dan tambahkan kod ini ke fail:

@Autowired private EurekaClient eurekaClient; @Autowired private SpanMetricReporter spanMetricReporter; @Autowired private ZipkinProperties zipkinProperties; @Value("${spring.sleuth.web.skipPattern}") private String skipPattern; // ... the main method goes here @Bean public ZipkinSpanReporter makeZipkinSpanReporter() { return new ZipkinSpanReporter() { private HttpZipkinSpanReporter delegate; 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(); delegate = new HttpZipkinSpanReporter(new RestTemplate(), baseUrl, zipkinProperties.getFlushInterval(), spanMetricReporter); if (!span.name.matches(skipPattern)) delegate.report(span); } } }; }

Konfigurasi di atas mendaftarkan ZipkinSpanReporter tersuai yang mendapat URL dari eureka. Kod ini juga melacak URL yang ada dan hanya mengemas kini HttpZipkinSpanReporter sekiranya URL berubah. Dengan cara ini di mana sahaja kita menggunakan pelayan Zipkin, kita akan dapat mengesannya tanpa memulakan semula perkhidmatan.

Kami juga mengimport sifat Zipkin lalai yang dimuat oleh spring boot dan menggunakannya untuk menguruskan wartawan kami.

3.3. Konfigurasi

Sekarang mari kita tambahkan beberapa konfigurasi ke fail book-service.properties kami di repositori konfigurasi:

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

Zipkin berfungsi dengan mengambil sampel tindakan pada pelayan. Dengan menetapkan spring.sleuth.sampler.percentage ke 1.0, kita menetapkan kadar pensampelan menjadi 100%. Corak langkau hanyalah regex yang digunakan untuk mengecualikan span yang namanya sepadan.

Corak langkau akan menyekat semua rentang daripada dilaporkan yang bermula dengan kata 'pembersihan'. Ini untuk menghentikan rentang yang berasal dari pangkalan kod sesi musim bunga.

3.4. Perkhidmatan Penarafan

Ikuti langkah yang sama dari bahagian perkhidmatan buku di atas, menerapkan perubahan pada fail yang setara untuk penilaian-perkhidmatan.

3.5. Perkhidmatan Gateway

Follow the same steps book-service. But when adding the configuration to the gateway.properties add these instead:

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

This will configure the gateway service not to send spans about the favicon or spring session.

3.6. Run

If you haven't done so already, start the config, discovery, gateway, book, rating, and zipkin services.

Navigate to //localhost:8080/book-service/books.

Open a new tab and navigate to //localhost:9411. Select book-service and press the ‘Find Traces' button. You should see a trace appear in the search results. Click that trace of opening it:

On the trace page, we can see the request broken down by service. The first two spans are created by the gateway, and the last is created by the book-service. This shows us how much time the request spent processing on the book-service, 18.379 ms, and on the gateway, 87.961 ms.

4. Conclusion

We have seen how easy it is to integrate Zipkin into our cloud application.

This gives us some much-needed insight into how communication travels through our application. As our application grows in complexity, Zipkin can provide us with much-needed information on where requests are spending their time. This can help us determine where things are slowing down and indicate what areas of our application need improvement.

Seperti biasa anda boleh mendapatkan kod sumber di Github.