基于zipkin和brave完成对dubbo的链路追踪
来源:互联网 发布:淘宝秒杀网页 编辑:程序博客网 时间:2024/05/29 14:40
玩过springcloud的同学肯定知道zipkin这个链路追踪工具。他使用类似于下图的图表显示调用链每个节点所花费的时间,从而方便快捷的查找链路瓶颈。本文中的brave是zipkin的一个组件,用来给zipkin服务端提供数据。
此项目的github代码地址
此项目为brave添加了dubbo的监控能力,支持brave最新版,与instrumentation可以完美集成。
brave的github代码地址
一些基本概念
一个完整的链路包含以下四部分:
- Client Send(cs)
客户端发起请求 - Server Receive(sr)
服务端收到请求 - Server Send(ss)
服务端返回请求 - Client Receive(cr)
客户端收到请求结果
链路追踪工具通过在调用链中增加特定的标记来记录这四种状态从而计算出服务端和客户端所花费的时间。
标记包含以下三个概念
- traceId
一次请求全局只有一个traceId。用来在海量的请求中找到同一链路的几次请求。比如servlet服务器接收到用户请求,调用dubbo服务,然后将结果返回给用户,整条链路只有一个traceId。开始于用户请求,结束于用户收到结果。 - spanId
一个链路中每次请求都会有一个spanId。例如一次rpc,一次sql都会有一个单独的spanId从属于traceId。 parentId
上一次请求的spanId。用于将一条链路的多次请求串联起来。监控原理
brave主要是利用拦截器在请求前和请求后分别埋点。例如spingmvc监控使用Interceptors,mysql监控使用statementInterceptors。同理dubbo的监控是利用com.alibaba.dubbo.rpc.Filter来过滤生产者和消费者的请求。所以在项目中有一个com.alibaba.dubbo.rpc.Filter的文件,里面包含了
- 1
- 2
这样在两个过滤器中加入埋点就可以完成监控了。
如何使用
这里使用springboot来简化配置。
首先建立Properties用来接收参数。
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
serviceName使用项目名称。zipkin是zipkin服务端的url地址,rate是取样率,指的是多次请求中有百分之多少传到zipkin。例如1.0是全部取样,0.5是50%取样。
application.yml配置如下:
- 1
- 2
- 3
- 4
编写自动配置类
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
其中tracingHandlerInterceptor拦截器用来对springmvc请求埋点。httpTracing和dubboTracing分别是springmvc和dubbo埋点的配置。
pom加入以下三个包
发送zipkin的包
- 1
- 2
- 3
- 4
- 5
springmvc拦截
- 1
- 2
- 3
- 4
- 5
dubbo拦截
- 1
- 2
- 3
- 4
- 5
分别使用最新版本就好。这里使用的是:
- 1
- 2
这里需要注意的是4.9.1的brave需要使用2.0以上的zipkin服务端
例如
- 1
- 基于zipkin和brave完成对dubbo的链路追踪
- 基于zipkin和brave完成对dubbo的链路追踪
- Dubbox 链路追踪(基于Brave+Zipkin的简单实现)上
- Brave(基于Zipkin的分布式调用链客户端)
- 使用 Zipkin 和 Brave 实现分布式系统追踪(基础篇
- 使用 Zipkin 和 Brave 实现分布式系统追踪
- 使用Zipkin和Brave 实现dubbo服务调用跟踪
- zipkin 和 brave 使用
- 使用 Zipkin 和 Brave 实现分布式系统追踪(基础篇)
- Spring Cloud 服务链路追踪 (zipkin)
- CentOS搭建基于ZIPKIN的数据追踪系统
- Spring Cloud(七):链路追踪Sleuth-Zipkin与Mysql数据的持久化
- Spring Cloud(六):链路追踪Sleuth与Zipkin结合
- dubbo+zipkin的服务跟踪
- dubbo+zipkin调用链监控
- Java分布式跟踪系统Zipkin(五):Brave源码分析-Brave和SpringMVC整合
- Java分布式跟踪系统Zipkin(六):Brave源码分析-Brave和SpringBoot整合
- 利用Zipkin对Spring Cloud应用进行服务追踪分析
- python的pickle包的使用
- 【maven】---仓库
- angular 自定义指令命名
- Smack类库最好的学习资料
- 深入理解分布式事务
- 基于zipkin和brave完成对dubbo的链路追踪
- JSR 133 Java 内存模型(JMM)FAQ
- M
- 活动报名 | 2017无人驾驶智能车Hackathon挑战赛
- c++结构体的使用
- Google Pixel 2 相机测试
- Kotlin语法基础之继承
- Leetcode 621. Task Scheduler
- 解题