javascript
使用Zipkin和Sleuth进行SpringBoot微服务跟踪
在本文中,我們將了解使用Zipkin和Spring cloud sleuth框架的微服務分布式跟蹤。
盡管微服務具有自身的挑戰,但微服務是出色的架構。 復雜的微服務架構具有與其他微服務的下游和上游依存關系,并且一切都是相互聯系的。 在大多數情況下,各個團隊只是專注于自己的服務,因此在微服務??分布式環境中,很難找到任何延遲或在運行時跟蹤實際問題。
1.分布式跟蹤
隨著微服務架構的復雜性增加,跨服務和服務器實例的統一可觀察性變得至關重要。 每個服務請求都經過多個服務層,使用傳統的調試技術來識別延遲或任何運行時問題變得越來越困難。 分布式跟蹤提供了對通過多種服務傳輸的請求的整體視圖,從而可以立即識別問題。
1.1分布式跟蹤詞匯
- 跨度 –跨度是一項單獨的操作。
- 跟蹤 –跟蹤是一個由跨度組成的端到端延遲圖。
- 示蹤 -示蹤劑記錄跨度和傳遞需要方面將它們連接到跟蹤。
2. Zipkin
Zipkin是一個開放源代碼的分布式系統,它提供了用于發送,接收,存儲和可視化跟蹤詳細信息的機制。 這有助于團隊將服務器實例之間的活動關聯起來,并對我們的服務中發生的事情有更深入的了解。 Zipkin提供UI界面來分析服務之間的跟蹤和調用圖詳細信息。
2.1 Zipkin安裝
可以使用三種不同的方式安裝zipkin服務器。
- Java –我們可以執行以下wget命令來下載最新的zipkin服務器。 如果沒有安裝wget ,只需復制以下URL并粘貼到瀏覽器中,即可下載最新的zipkin服務器。
- Zipkin源代碼–我們可以從github url下面下載zipkin源代碼,并在本地計算機上運行zipkin應用程序: https : //github.com/openzipkin/zipkin
- Docker –我們可以從https://github.com/openzipkin/docker-zipkin下載docker-zipkin容??器
對于此示例應用程序,我已經使用Java方法安裝了Zipkin服務器。
2.2 Zipkin用戶界面
Zipkin UI提供以下功能來分析跨服務的分布式跟蹤詳細信息:
- 按服務名稱,跨度名稱等搜索跟蹤
- 跟蹤依賴關系圖顯示了跨服務的跟蹤請求流
- 提供每個跨度的總跟蹤時間的詳細信息
通過分析Zipkin UI提供的詳細信息,可以更加輕松地發現互連微服務體系結構之間的延遲或任何特定服務問題。
3.春云偵探
Spring cloud sleuth將跟蹤和跨度ID添加到Slf4j MDC (映射診斷上下文),以從給定的跟蹤或跨度提取日志。 Sleuth在常見的分布式跟蹤數據模型(例如跟蹤,跨度,注釋,鍵值注釋)上提供了抽象。 Sleuth會檢測Spring應用程序中的公共入口和出口點( servlet filter, rest template, scheduled actions, message channels, zuul filters, feign client )。
3.1 SpringBoot上的Sleuth和Zipkin配置
在Springboot pom.xml中添加以下依賴項,以將zipkin和spring cloud sleuth添加到SpringBoot應用程序中。
pom.xml
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-sleuth</artifactId> </dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-zipkin</artifactId> </dependency>4.樣品申請
對于本文,我創建了一個示例應用程序,該應用程序由三個不同的微服務組成,分別稱為UserGreetingService , UserNameService和UserAddressService 。
UserGreetingService實習生調用UserNameService和UserAddressService服務,以為用戶構造完整的問候消息以及名稱和地址詳細信息。
UserGreetingService.java
@SpringBootApplication @RestController @CrossOrigin public class UserGreetingService {@RequestMapping("/api/user/greet")public String greet() {String greetingMsg = "Hello";String userName = restTemplate().getForObject("http://localhost:3001/api/user/name", String.class);String userAddress = restTemplate().getForObject("http://localhost:3002/api/user/address", String.class);return greetingMsg + " " + userName + "!\n\n" + userAddress;}@BeanRestTemplate restTemplate() {return new RestTemplate();}public static void main(String[] args) {SpringApplication.run(UserGreetingService.class,"--spring.application.name=user-greeting-service","--server.port=3000");} }為了介紹服務延遲,我有意向UserNameService和UserAddressService服務添加了Thread.sleep(1000)和Thread.sleep(2000) 。
您可以從github鏈接下載示例代碼– https://github.com/VishSinha/springbootzipkindemo
4.1啟動Zipkin服務器
要在本地環境中啟動zipkin服務器,請轉至我們下載zipkin服務器的目錄,然后打開命令提示符或終端并執行以下命令:
java -jar zipkin-server-2.5.0-exec.jar一旦啟動zipkin服務器,就可以使用URL瀏覽Zipkin UI – http:// localhost:9411 / zipkin /
4.2運行樣本
從github下載示例代碼后,使用您最喜歡的IDE(例如eclipse,Intellij)或使用命令提示符啟動所有三個微服務。
一旦所有三個springboot微服務都啟動,請使用瀏覽器或郵遞員UserGreetingService端點URL http:// localhost:3000 / api / user / greet 。
總體而言,您會注意到問候服務花費了3秒鐘以上的時間才能做出響應。 現在,讓我們打開Zipkin UI來分析后臺發生的情況以及為什么總響應時間超過3秒。
打開瀏覽器窗口,并使用默認URL – http:// localhost:9411 / zipkin呈現Zipkin UI。 這將呈現zipkin默認搜索頁面。
Zipkin用戶界面
讓我們從服務名稱中選擇user-greeting-service,然后單擊Find Traces按鈕。
您將看到問候服務的總共3個跨度以及總的響應時間。
Zipkin UI查找跟蹤
單擊“ 3 spans”鏈接,這將呈現每個服務響應時間的詳細信息以及以下其他詳細信息。
Zipkin UI Spans信息
此外,通過單擊每個服務跨度,我們可以獲得每個服務請求的跟蹤ID,跨度ID,父跟蹤ID,服務器實例信息和其他跟蹤詳細信息。 這可以輕松地幫助我們排除任何故障的微服務或延遲問題。
Zipkin UI跨度信息
打開Zipkin UI的“依賴關系”部分后,這將在整個服務中呈現服務依賴關系圖,如下所示:
Zipkin UI依賴圖
5.結論
總體zipkin非常易于集成基于云的微服務應用程序,這為整個服務提供了很多見解和信息,以分析服務的整體運行狀況。 使用Zipkin,我們可以輕松識別任何故障服務,并可以采取糾正措施。
6.參考
- https://zipkin.io
- https://github.com/openzipkin/zipkin
翻譯自: https://www.javacodegeeks.com/2018/03/springboot-microservices-tracing-with-zipkin-and-sleuth.html
總結
以上是生活随笔為你收集整理的使用Zipkin和Sleuth进行SpringBoot微服务跟踪的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 电脑的cpu哪儿生产的(电脑cpu哪里生
- 下一篇: log4j性能 slf4j_Log4j