skywalking原理 skywalking原理,为什么侵入性
一、原理原理2018-05-27 Spring拦截器和Skywalking冲突
skywalking-5.0.0-alpha
已经修复的侵入版本
skywalking-5.0.0-beta
在观察项目中的日志时,发现
有一个拦截全部Controller方法的原理原理日志切面WebRequestInterceptor类
该方法会拦截skywalking的某个方法。
导致每次Web请求,侵入Controller虽然被执行一次,原理原理但是侵入doAround会被执行两次。
如果在doAround中做了某些身份认证,原理原理Token校验之类的侵入,则产生了不必要的原理原理重复请求。
在doAround中打印:
会发现调用了getSkyWalkingDynamicField。侵入
这个方法由skywalking-agent的原理原理InstMethodsInter生成的:
SkyWalkingAgent通过
找到一个具体实现类
然后调用define
然后生成了InstMethodsInter
这个类intercept的方法中:
interceptor.afterMethod对应
GetBeanInterceptor的 afterMethod,这里会调用getSkyWalkingDynamicField,侵入但是原理原理这里会被WebRequestInterceptor拦截!!侵入!原理原理。
getSkyWalkingDynamicField出自EnhancedInstance
在InstMethodsInter.afterMethod调用getSkyWalkingDynamicField的时候,不小心会被Spring的Aspect拦截。
导致重复调用了一次WebRequestInterceptor的doAround。
改写JoinPoint,并排除getSkyWalkingDynamicField方法:
果然一个月之前官方已经修复了这个BUG
修复的原理就是把Spring的org.springframework.aop.support.MethodMatchers的matches静态方法给增强了,那就是让Spring忽略EnhancedInstance接口的所有方法!
这方法既粗暴,又优雅,非常值得学习。
相关链接
issue#1114
pull#1118
二、skywalking在生产环境可以使用吗
可以。SkyWalking是一个开源的应用性能监控(APM)系统,提供了丰富的功能,包括跟踪、监控、诊断和分析应用程序的性能。可以帮助监控应用程序的性能指标、发现性能问题、定位故障和优化性能。
在生产环境中使用SkyWalking之前,需要确保已经理解了其工作原理、配置和使用方法,并进行了充分的测试和调试。还需要确保生产环境具备足够的资源和性能来支持SkyWalking的运行。
参考资料:零侵扰可观测性