背景web
咱们可能须要想在代码中写入特定的信息到调用链中,而且但愿对里面的特定key作检索缓存
实现思路框架
建立一个特定的类,只须要一个方法,再对这个类的方法进行加强,这个就能够拿到入参信息,把它加入到调用链路,这个思路是对的,也实现了,不过有优化空间,默认的插件拦截器都是会建立一个spanEvent,这样若是业务中调用了太屡次,链路就会很深,实际上这些tag信息是不须要单独开链路的,只须要与当前的链路绑定就行了,因此能够获取当前的spanEvent,把tag内容添加进去优化
检索的能力经过在收集器端解析特定的key,再把内容写到es中,再经过web端进行检索spa
背景插件
为了和其它的监控结合,好比在dubbo调用链中显示traceId,或者缓存监控框架中记录traceId,虽然官方提供了日志的加强,能够在日志中打印出traceId,或者使用MDC.get("ptxId")获取,但这个依赖于日志,若是系统没有打印日志,MDC中就是空的,因此须要一个单独获取traceId的便捷方法日志
实现思路get
也是和添加tag思路同样,只须要暴露一个util类,再对它进行加强,在after方法里获取当前的traceId,将它赋值给方法的返回值,这里经过实践发现不能直接返回一个String,修改这个String的值,并不能改变最终的结果,须要包装成一个类,再修改里面的属性。io