apm中间件切入点

apm中间件切入点,第1张

apm中间件切入点

文章目录
  • 前言
  • 怎么切入各个中间件呢
    • 第一步traceid什么时候塞入系统中
    • RPC
      • dubbo
      • http
    • 多线程、线程池情况下
    • datasource
    • MQ
      • rocketmq
      • rabbitmq
    • redis埋点
  • agent作用
  • 参考文章

前言

apm的要点,其实就是你需要在所有流程里头,把traceid塞进去,能拿到,这样的话不管你是打印日志来管理链路,还是上报日志,都行。

怎么切入各个中间件呢 第一步traceid什么时候塞入系统中
  1. 第一种放在网关去给塞,依靠sleuth框架生成traceid
  2. 第二种前端在发起请求的时候,也把traceid带进来。因为前端本身就有完整的会话
RPC

原理差不多,就是调用方会在header头带上traceid过去,然后被调用方拦截器拿到header头塞到本地缓存里头。

例如:

dubbo

基于dubbo spi机制,分别扩充product、consume端的header,以及拿到header塞回去

http

也是一样,只不过他会多出拦截器,拦截请求之后塞回去。

多线程、线程池情况下

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 直播整理

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5611220.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-15
下一篇 2022-12-15

发表评论

登录后才能评论

评论列表(0条)

保存