- 前言
- 怎么切入各个中间件呢
- 第一步traceid什么时候塞入系统中
- RPC
- dubbo
- http
- 多线程、线程池情况下
- datasource
- MQ
- rocketmq
- rabbitmq
- redis埋点
- agent作用
- 参考文章
apm的要点,其实就是你需要在所有流程里头,把traceid塞进去,能拿到,这样的话不管你是打印日志来管理链路,还是上报日志,都行。
怎么切入各个中间件呢 第一步traceid什么时候塞入系统中- 第一种放在网关去给塞,依靠sleuth框架生成traceid
- 第二种前端在发起请求的时候,也把traceid带进来。因为前端本身就有完整的会话
原理差不多,就是调用方会在header头带上traceid过去,然后被调用方拦截器拿到header头塞到本地缓存里头。
例如:
dubbo基于dubbo spi机制,分别扩充product、consume端的header,以及拿到header塞回去
也是一样,只不过他会多出拦截器,拦截请求之后塞回去。
多线程、线程池情况下TransmittableThreadLocal这个自行查我之前写的博客哦~
datasource可以参照mybatis-plus插件怎么写的,在PreparedStatement 将traceid打印出来
MQ rocketmq rabbitmq还有另外一种方式,就是在BeanPostProccessor,拿到我们注入消费者跟生产者,然后往这个类里头set对应的拦截器。
redis埋点这个属实没有想到
- https://github.com/opentracing-contrib/java-spring-cloud/blob/master/instrument-starters/opentracing-spring-cloud-redis-starter/src/main/java/io/opentracing/contrib/spring/cloud/redis/RedisAspect.java
你调用redis,总有地方需要open这个连接对吧,然后你在那里打印traceid即可。
但是!每个开发者用的redis链接有不一样,所以需要重写
agent作用为了收集信息,然后上报
比如说路过的方法名,请求时间等等。
- 分布式链路组件 SOFATracer 埋点机制解析 | SOFAChannel#15 直播整理
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)