dubbo服务整合zipkin详解


Posted in Java/Android onJuly 26, 2021

去年一直有想法将openTracing整合进自己的dubbo服务的想法。但是zipkin brave 对 dubbo的支持,没有更新到最新版本,所以一直没有行动。

目前zipkin支持的语言,以及框架如下图:具体可以参考官方网址

dubbo服务整合zipkin详解

dubbo服务整合zipkin详解

其中brave library 是一个java项目,提供了对主流web服务会用到的组件的支持,如dubbo,httpclient,mysql等。

另,SpringCloudSleuth,也是在zipkin brave 基础上的发展起来的一个分布式追踪系统,所以又多了一个整合zipkin的理由;

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

dubbo服务整合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就能分析代码全链路里都做了哪些事情,当然前提是你有记日志;

dubbo服务整合zipkin详解

如果你只是需要一个traceId来方便追踪日志,那么这里就已经可以了;如果还需要zipkin的链路分析功能,那么就需要搭建一个zipkin服务;可以直接在zipkin官网上找到docker启动zipkin的quickstart

然后在系统中进行相应配置即可访问http://localhost:9411查看;

dubbo服务整合zipkin详解

dubbo服务整合zipkin详解

dubbo服务整合zipkin详解

以上为个人经验,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Java/Android 相关文章推荐
一篇带你入门Java垃圾回收器
Jun 16 Java/Android
新手入门Jvm-- JVM对象创建与内存分配机制
Jun 18 Java/Android
Java并发编程之Executor接口的使用
Jun 21 Java/Android
解决SpringBoot跨域的三种方式
Jun 26 Java/Android
Java并发编程必备之Future机制
Jun 30 Java/Android
SpringBoot工程下使用OpenFeign的坑及解决
Jul 02 Java/Android
Spring中的使用@Async异步调用方法
Nov 01 Java/Android
零基础学java之方法的定义与调用详解
Apr 10 Java/Android
详解Flutter网络请求Dio库的使用及封装
Apr 14 Java/Android
Java数组详细介绍及相关工具类
Apr 14 Java/Android
JAVA 线程池(池化技术)的实现原理
Apr 28 Java/Android
Java代码规范与质量检测插件SonarLint的使用
Aug 05 Java/Android
spring boot中nativeQuery的用法
Jul 26 #Java/Android
java泛型通配符详解
Jul 25 #Java/Android
SpringBoot SpringEL表达式的使用
Jul 25 #Java/Android
SpringRetry重试框架的具体使用
Java反应式框架Reactor中的Mono和Flux
关于springboot 配置date字段返回时间戳的问题
Jul 25 #Java/Android
用Java实现简单计算器功能
You might like
利用递归把多维数组转为一维数组的函数
2006/10/09 PHP
php中的字符编码转换函数用法示例
2014/10/20 PHP
php微信公众号开发(4)php实现自定义关键字回复
2016/12/15 PHP
Javascript面向对象编程
2012/03/18 Javascript
Javascript中的高阶函数介绍
2015/03/15 Javascript
Javascript实现计算个人所得税
2015/05/10 Javascript
基于javascript实现根据身份证号码识别性别和年龄
2016/01/22 Javascript
javascript HTML5 canvas实现打砖块游戏
2020/06/18 Javascript
JavaScript代码实现图片循环滚动效果
2020/03/19 Javascript
js的各种排序算法实现(总结)
2016/07/23 Javascript
JavaScript实现自定义媒体播放器方法介绍
2017/01/03 Javascript
JavaScript计时器用法分析【setTimeout和clearTimeout】
2017/01/18 Javascript
几行js代码实现自适应
2017/02/24 Javascript
vue事件修饰符和按键修饰符用法总结
2017/07/25 Javascript
javascript简写常用的12个技巧(可以大大减少你的js代码量)
2020/03/28 Javascript
javascript 中模板方法单例的实现方法
2017/10/17 Javascript
解决vue-quill-editor上传内容由于图片是base64的导致字符太长的问题
2018/08/20 Javascript
浅谈React Event实现原理
2018/09/20 Javascript
LayUi使用switch开关,动态的去控制它是否被启用的方法
2019/09/21 Javascript
js实现贪吃蛇游戏 canvas绘制地图
2020/09/09 Javascript
Python实现的石头剪子布代码分享
2014/08/22 Python
Python从MP3文件获取id3的方法
2015/06/15 Python
Python实现base64编码的图片保存到本地功能示例
2018/06/22 Python
Python实现通过继承覆盖方法示例
2018/07/02 Python
详解Python3网络爬虫(二):利用urllib.urlopen向有道翻译发送数据获得翻译结果
2019/05/07 Python
Django 简单实现分页与搜索功能的示例代码
2019/11/07 Python
Python-jenkins 获取job构建信息方式
2020/05/12 Python
Django中和时区相关的安全问题详解
2020/10/12 Python
python调用jenkinsAPI构建jenkins,并传递参数的示例
2020/12/09 Python
HTML5声音录制/播放功能的实现代码
2018/05/03 HTML / CSS
竞选大队长演讲稿
2014/04/29 职场文书
从严治党主题教育活动总结
2015/05/07 职场文书
反腐倡廉观后感
2015/06/08 职场文书
2019消防宣传标语!
2019/07/10 职场文书
导游词之临安白水涧
2019/11/05 职场文书
JS setTimeout与setInterval的区别
2022/04/20 Javascript