skywalking源码学习

入口类 org.skywalking.apm.agent.SkyWalkingAgent(版本3.2.5)
1、主方法:
这里写图片描述
(1)agentArgs 是 premain 函数得到的程序参数,随同 “– javaagent”一起传入。
与 main 函数不同的是,这个参数是一个字符串而不是一个字符串数组,如果程序参数有多个,程序将自行解析这个字符串。
(2)instrumentation 是一个 java.lang.instrument.Instrumentation 的实例,由 JVM 自动传入。
java.lang.instrument.Instrumentation 是 instrument 包中定义的一个接口,也是这个包的核心部分,
集中了其中几乎所有的功能方法,例如类定义的转换和操作等等。
2、初始化配置 /config/agent.config

这里写图片描述

(1)通过几种方式初始化配置
这里写图片描述
查找agent.config
配置除了通过/config/agent.config文件外,可以通过环境变量和VM参数(-D)来进行设置
参数的key = skywalking. + agent.config文件中的key
优先级:系统环境变量 > VM参数(-D) > /config/agent.config中的配置
这里写图片描述
3、加载插件类
这里写图片描述
(1)找到插件并加载
* Plugins finder.
* Use {@link PluginResourcesResolver} to find all plugins,
* and ask {@link PluginCfg} to load all plugin definitions.
这里写图片描述
!!!注意:这里采用Class.forName已经对插件增强类进行了实例化

这里写图片描述

这里写图片描述

这里写图片描述

(2)提供一个插件查找器,可以根据匹配规则得到相应的插件增强类
* The PluginFinder represents a finder , which assist to find the one
* from the given {@link AbstractClassEnhancePluginDefine} list.
这里写图片描述
4、启动服务管理器
这里写图片描述
启动所有继承了BootService的类
这里写图片描述
BootService类:
这里写图片描述
其中一个子类:JVMService
这里写图片描述
里面维护两个执行定时任务的线程池,来收集和发送JVM信息,发送给Collector
这里写图片描述
5、增加清理钩子
这里写图片描述
6、byte buddy代码增强
这里写图片描述

发布了45 篇原创文章 · 获赞 18 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/qq_26761587/article/details/78797703