分布式追踪 SkyWalking 源码分析一 Agent初始化

还是先看代码工程结构

分布式追踪 SkyWalking 源码分析一 Agent初始化

分布式追踪 SkyWalking 源码分析一 Agent初始化

代码1885个类,总行数15万左右,除去非核心功能,核心功能代码量不大

SkyWalking Agent 基于 JavaAgent 机制,实现应用透明接入 SkyWalking 。

agent启动入口类SkyWalkingAgent

  分布式追踪 SkyWalking 源码分析一 Agent初始化

1.初始化agent配置

2.加载agent插件,创建出pluginFinder

3.根据byteBuddy,创建agentBuilder

分布式追踪 SkyWalking 源码分析一 Agent初始化

4.调用ServiceManager.INSTANCE.boot()  启动

分布式追踪 SkyWalking 源码分析一 Agent初始化

   4.1 调用loadAllServices() 加载所有的服务 

分布式追踪 SkyWalking 源码分析一 Agent初始化

加载所有的bootServices的接口实现类,包括默认实现和覆盖实现

4.2 调用每个service的prepare方法

4.3 调用每个service的boot方法,启动

4.4调用每个service的onComplete方法

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

继续看Agent的配置初始化  SnifferConfigInitializer

分布式追踪 SkyWalking 源码分析一 Agent初始化

配置分为本地配置config和远程RemoteDownstreamConfig两种,后者从Collect Server获取

分布式追踪 SkyWalking 源码分析一 Agent初始化

1.从本地文件加载配置

2.从环境变量覆盖配置

3.根据agentOptions覆盖配置

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

plugin 插件包

PluginBootStrap 插件引导程序

分布式追踪 SkyWalking 源码分析一 Agent初始化

先看PluginBootstrap,调用loadPlugins加载所有的插件

  分布式追踪 SkyWalking 源码分析一 Agent初始化

1.获取resources,也就是插件url列表

2.加载到插件配置pluginCfg

分布式追踪 SkyWalking 源码分析一 Agent初始化

3.获取插件定义列表pluginClassList,循环每个插件定义pluginDefine

4.然后创建插件类增强定义,生成plugin,增加到最后的plugin结果列表

 

分布式追踪 SkyWalking 源码分析一 Agent初始化

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

PluginFinder 插件查找实现

分布式追踪 SkyWalking 源码分析一 Agent初始化

插件的匹配

1.名称匹配NameMatch

2.签名匹配SignatureMatch