目录
背景
在微服务系统里服务非常的分散,服务日志也分散在各处,多个服务没有统一并且唯一的检索条件,导致问题排查难度很大,因此trace链路追踪技术就应运而生。
一、trace-dubbo组件介绍
github:https://github.com/zbrave429/dubbo-trace
dubbo-trace基于dubbo3.x实现了traceId,spanId链路传递,使用非常简单,代码0侵入,maven直接引入即可
二、设计原理
2.1 原理图
官方文档:https://dubbo.apache.org/zh/docs/v3.0/references/features/attachment/
从图中可以看到,左边为consumer,右边为provider
在consumer端filter里面setAttachment 放入trace参数,在provider端filter里面getAttachment获取trace参数,执行后续处理。
原理已经很清楚了,接下来就是干
2.2 实现方案
- 请求入口将trace信息缓存到ThreadLocal内和Log参数
- consumer在发起dubbo调用时从ThreadLocal内获取trace信息设置到Attachment参数内
- provider接收到请求后从Attachment获取到trace信息缓存到ThreadLocal和Log内
2.2.1 consumer端实现
// CommonConstants.CONSUMER 客户端过滤器
@Activate(group = {
CommonConstants.CONSUMER})
public class TraceConsumerFilter implements Filter {
@Override
public Result invoke(Invoker<?> invoker, Invocation invocation) throws RpcException {
// 1.从ThreadLocal内获取trace信息
Tracer tracer = TraceContext.