0.Why Zipkin
隨著業務發展,系統拆分導致系統調用鏈路愈發復雜一個前端請求可能最終需要調用很多次后端服務才能完成,當整個請求變慢或不可用時,我們是無法得知該請求是由某個或某些后端服務引起的,這時就需要解決如何快讀定位服務故障點,以對癥下藥。于是就有了分布式系統調用跟蹤的誕生。而zipkin就是開源分布式系統調用跟蹤的佼佼者
zipkin基于google-Dapper的論文有興趣的可以看下
1. 部署zipkin 快速上手上zipkin官網把可運行jar包下下來
zipkin latest release
運行
java -jar zipkin.jar
zipkin默認會將鏈路跟蹤數據保存到內存,同時也支持MySql、ElasticSearch等多種持久化插件
以MySql為例,只需在啟時加上以下參數即可:
java -jar zipkin.jar --zipkin.storage.StorageComponent=mysql --zipkin.storage.type=mysql --zipkin.storage.mysql.host=127.0.0.1--zipkin.storage.mysql.port=3306 --zipkin.storage.mysql.username=root --zipkin.storage.mysql.password=root --zipkin.storage.mysql.db=zipkin_test
--zipkin.storage.StorageComponent=mysql #使用mysql組件2.服務集成
--zipkin.storage.type=mysql #使用mysql持久化
--zipkin.storage.mysql.host #mysql數據庫域名
--zipkin.storage.mysql.port=3306 #mysql數據庫端口
--zipkin.storage.mysql.username=root #數據庫賬號
--zipkin.storage.mysql.password=root #數據庫密碼
--zipkin.storage.mysql.db=zipkin_test #庫名
本文使用Brave作為Tracer實現,使用spring-cloud的小伙伴可以選擇spring-cloud-sleuth引入依賴
引入Brave
io.zipkin.brave brave-bom ${brave.version} pom import
io.opentracing.brave brave-opentracing 0.31.0 io.zipkin.reporter2 zipkin-sender-okhttp3 2.6.1
引入filter-opentracing模塊
com.weibo filter-opentracing io.opentracing opentracing-api
此處要exclud掉opentracing-api防止filter-opentracing跟brave的依賴沖突實現TracerFactory
public class BraveTarcerFactory implements TracerFactory { private static Tracer braveTracer = BraveTracer.create(Tracing.newBuilder() // 設置當前服務的服務名,需做成配置化 .localServiceName("goods-service") // 此處采用OkHttpSender通過HTTP請求的方式發送跟蹤數據,Zipkin的日志接口地址需做成配置化的 .spanReporter(AsyncReporter.create(OkHttpSender.create("http://127.0.0.1:9411/api/v2/spans"))) .build()); @SuppressWarnings("deprecation") @Override public Tracer getTracer() { return braveTracer; } }將TracerFactory注冊到openTracingContext
@Bean BraveTarcerFactory tarcerFactory() { return new BraveTarcerFactory(); } @Bean OpenTracingContext openTracingContext(TracerFactory tracerFactory) { OpenTracingContext context = new OpenTracingContext(); context.setTracerFactory(tracerFactory); return context; }記得注冊filter噢~
@Bean(name = "motanClientBasicConfig") @ConditionalOnMissingBean public BasicRefererConfigBean baseRefererConfig() { BasicRefererConfigBean config = new BasicRefererConfigBean(); config.setFilter("opentracing"); return config; } @Bean(name = "motanServerBasicConfig") @ConditionalOnMissingBean public ServerBasicConfig() { BasicRefererConfigBean config = new BasicRefererConfigBean(); config.setFilter("opentracing"); return config; }3. 走你!
zipkin默認監聽9411端口,通過瀏覽器訪問localhost:9441即可進入他的UI頁面,點擊Find Traces即可看到跟蹤結果:
4. SpringClould全家桶萬歲!因為項目沒有用SpringCloud,自己折騰Brave的依賴真真蛋痛,想要方便還是得上SpringCloud全家桶??!
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/69499.html
摘要:一個客戶端請求從發出到被響應經歷了哪些組件哪些微服務請求總時長每個組件所花時長等信息我們有必要了解和收集,以幫助我們定位性能瓶頸進行性能調優,因此監控整個微服務架構的調用鏈十分有必要,本文將闡述如何使用搭建微服務調用鏈追蹤中心。 showImg(https://segmentfault.com/img/remote/1460000014553707); 概述 一個完整的微服務系統包含...
摘要:注本文首發于公眾號,可長按或掃描下面的小心心來訂閱擴展組件是在微服務調用鏈追蹤中心搭建一文中編寫的與通信的工具組件,利用其追蹤微服務調用鏈的,現在我們想追蹤數據庫調用鏈的話,可以擴展一下其功能。 showImg(https://segmentfault.com/img/remote/1460000014751186); 概述 在前面:微服務調用鏈追蹤中心搭建 一文中我們利用Zipki...
摘要:介紹從版本開始,使用作為追蹤庫,為方便起見,在此處嵌入了的部分文檔。具有一個上下文,其中包含標識符,該標識符將放置在表示分布式操作的樹中的正確位置。追蹤通常由攔截器自動完成,在幕后,他們添加與他們在操作中的角色相關的標簽和事件。 Spring Cloud Sleuth特性 將trace和span ID添加到Slf4J MDC,因此你可以在日志聚合器中從給定的trace或span提取...
摘要:服務提供者提供一個接口,服務消費者通過消費服務。服務提供者服務提供者,對外提供一個,并向服務注冊中心注冊,這部分內容,不再講述,見源碼。 微服務架構是一個分布式架構,微服務系統按業務劃分服務單元,一個微服務系統往往有很多個服務單元。由于服務單元數量眾多,業務的復雜性較高,如果出現了錯誤和異常,很難去定位。主要體現在一個請求可能需要調用很多個服務,而內部服務的調用復雜性決定了問題難以定位...
閱讀 2592·2023-04-25 22:09
閱讀 2837·2021-10-14 09:47
閱讀 1889·2021-10-11 11:10
閱讀 2677·2021-10-09 09:44
閱讀 3372·2021-09-22 14:57
閱讀 2493·2019-08-30 15:56
閱讀 1615·2019-08-30 15:55
閱讀 775·2019-08-30 14:13