dubbo服務整合zipkin詳解

去年一直有想法將openTracing整合進自己的dubbo服務的想法。但是zipkin brave 對 dubbo的支持,沒有更新到最新版本,所以一直沒有行動。

目前zipkin支持的語言,以及框架如下圖:具體可以參考官方網址

其中brave library 是一個java項目,提供瞭對主流web服務會用到的組件的支持,如dubbo,httpclient,mysql等。

另,SpringCloudSleuth,也是在zipkin brave 基礎上的發展起來的一個分佈式追蹤系統,所以又多瞭一個整合zipkin的理由;

我在我自己的springWebMVC + Dubbo + Mysql + RocketMQ 的服務中,直接引入瞭spring-cloud-starter-zipkin

可以看到引入spring-cloud-starter-zipkin會自動引入instrumentation的一些jar包,自動會對通過springWebMVC,httpClient進行的http通信進行鏈路跟蹤;但是我需要添加對dubbo協議的支持,那麼就需要額外引入brave-instrumentation-dubbo(針對dubbo有兩個jar包可以使用,分別對應不同版本的dubbo,instrumentation-dubbo對應dubbo2.7.0以上,instrumentation-dubbo-rpc對應dubbo2.6.0以上2.7.0以下);引入jar包後,需要進行一些配置,如下zipkin的相關配置

#通過http協議上報tracing信息,這裡的地址是zipkin服務的地址
#spring.zipkin.base-url=http://localhost:9411
#服務名稱
spring.zipkin.service.name=my-consumer
#開啟上報到zipkin服務,如果不開啟的話,tracing信息還是會在不同服務中傳遞,隻是不會上報的zipkin服務端
spring.zipkin.enabled=false
#使用默認 http 方式收集 span 需要配置此項
spring.zipkin.sender.type=web
#采樣率,默認是0.1, 如果是1的話,代表百分之百采樣
spring.sleuth.sampler.probability=1

關於dubbo的配置,隻需要如下

#add tracing filter
dubbo.consumer.filter = tracing
#add tracing filter
dubbo.provider.filter = tracing

這樣就可以在日志中加上traceId的輸出,來更好的進行鏈路分析,%X{traceId}的寫法,顯然原理是放在MDC中;這樣就隻需要通過一個traceId就能分析代碼全鏈路裡都做瞭哪些事情,當然前提是你有記日志;

如果你隻是需要一個traceId來方便追蹤日志,那麼這裡就已經可以瞭;如果還需要zipkin的鏈路分析功能,那麼就需要搭建一個zipkin服務;可以直接在zipkin官網上找到docker啟動zipkin的quickstart。

然後在系統中進行相應配置即可訪問http://localhost:9411查看;

以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。

推薦閱讀: