一、为什么要传递trace信息?
现在微服务开发已经成为主流,从用户发起请求到最终返回结果,中间可能会跨越好几个服务,调用链路会非常长,因为无法把用户请求上下游串联起来所以定位问题就会非常头疼,所以就需要通过trace信息把用户完整请求链路串联起来
主要目的:1、后期全链路追踪
2、快速排查定位问题
3、设置链路最长执行时间,超时自动返回,防止由于下游服务调用异常引起雪崩效应
二、trace传递规范流程
1、traceId单次请求上下游调用链路中全局唯一
2、spanId当前服务唯一
3、cspanId代表下游服务的spanId,由调用方生成并传递给下游服务
三、trace怎么传?
rpc调用:
1、接口定义时第一个参数为trace信息,上游调用时必传
2、服务接口内部接收trace信息,并保存到context中
3、内部函数调用时需要把context传递到下游函数
4、日志打印时需要额外增加trace信息打印
http调用: 把trace信息放入http请求header头,被调用方解析header即可获取trace信息
四、trace结构定义
![在这里插入图片描述](https://img-blog.csdnimg.cn/8ff068aa014a4b608f7282b3a14a1a47.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAbGl1cXVuMDMxOQ==,size_16,color_FFFFFF,t_70,g_se,x_16#pic_center)
五、使用方法
1、服务接口定义时第一个参数传递trace信息
2、服务内部
六、go-trace源码