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并发编程之Executor接口的使用
Jun 21 Java/Android
自从在 IDEA 中用了热部署神器 JRebel 之后,开发效率提升了 10(真棒)
Jun 26 Java/Android
Springboot配置suffix指定mvc视图的后缀方法
Jul 03 Java/Android
SpringBoot中获取profile的方法详解
Apr 08 Java/Android
零基础学java之循环语句的使用
Apr 10 Java/Android
Spring Data JPA框架Repository自定义实现
Apr 28 Java/Android
springboot读取nacos配置文件
May 20 Java/Android
Java数据结构之堆(优先队列)
May 20 Java/Android
解决spring.thymeleaf.cache=false不起作用的问题
Jun 10 Java/Android
Java 多线程并发FutureTask
Jun 28 Java/Android
一文了解Java动态代理的原理及实现
Jul 07 Java/Android
SpringBoot详解整合Redis缓存方法
Jul 15 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
thinkphp修改配置进入默认首页的方法
2017/02/07 PHP
PHP 7.4中使用预加载的方法详解
2019/07/08 PHP
JQuery扩展插件Validate 3通过参数设置错误信息
2011/09/05 Javascript
js调用activeX获取u盘序列号的代码
2011/11/21 Javascript
理解Javascript闭包
2013/11/01 Javascript
js select option对象小结
2013/12/20 Javascript
JavaScript中SetInterval与setTimeout的用法详解
2015/11/10 Javascript
由浅入深讲解Javascript继承机制与simple-inheritance源码分析
2015/12/13 Javascript
js仿手机页面文件下拉刷新效果
2016/10/14 Javascript
利用Angular+Angular-Ui实现分页(代码加简单)
2017/03/10 Javascript
浅析JS中的 map, filter, some, every, forEach, for in, for of 用法总结
2017/03/29 Javascript
新手vue构建单页面应用实例代码
2017/09/18 Javascript
为输入框加入数字js校验代码分享
2017/11/02 Javascript
webpack中的热刷新与热加载的区别
2018/04/09 Javascript
vue 自定义提示框(Toast)组件的实现代码
2018/08/17 Javascript
Layui 数据表格批量删除和多条件搜索的实例
2019/09/04 Javascript
微信小程序自定义弹出模态框禁止底部滚动功能
2020/03/09 Javascript
用vite搭建vue3应用的实现方法
2021/02/22 Vue.js
[01:03:36]Ti4 循环赛第三日DK vs Titan
2014/07/12 DOTA
Python使用迭代器打印螺旋矩阵的思路及代码示例
2016/07/02 Python
Python实现简单的用户交互方法详解
2018/09/25 Python
基于python框架Scrapy爬取自己的博客内容过程详解
2019/08/05 Python
tensorflow mnist 数据加载实现并画图效果
2020/02/05 Python
10个python3常用排序算法详细说明与实例(快速排序,冒泡排序,桶排序,基数排序,堆排序,希尔排序,归并排序,计数排序)
2020/03/17 Python
Python连接Impala实现步骤解析
2020/08/04 Python
Dyson加拿大官方网站:购买戴森吸尘器,风扇,冷热器及配件
2016/10/26 全球购物
得到Class的三个过程是什么
2012/08/10 面试题
同步和异步有何异同,在什么情况下分别使用他们
2013/04/09 面试题
文员个人求职自荐信
2013/09/21 职场文书
科研先进个人典型材料
2014/01/31 职场文书
数控个人求职信范文
2014/02/03 职场文书
班组长竞聘书
2014/03/31 职场文书
入党团支部推荐意见
2015/06/02 职场文书
三八妇女节主持词
2015/07/04 职场文书
初中运动会闭幕词范本3篇
2019/12/09 职场文书
基于Redis实现分布式锁的方法(lua脚本版)
2021/05/12 Redis