分布式追踪 SkyWalking 源码分析一 Agent初始化
还是先看代码工程结构
代码1885个类,总行数15万左右,除去非核心功能,核心功能代码量不大
SkyWalking Agent 基于 JavaAgent 机制,实现应用透明接入 SkyWalking 。
agent启动入口类SkyWalkingAgent
1.初始化agent配置
2.加载agent插件,创建出pluginFinder
3.根据byteBuddy,创建agentBuilder
4.调用ServiceManager.INSTANCE.boot() 启动
4.1 调用loadAllServices() 加载所有的服务
加载所有的bootServices的接口实现类,包括默认实现和覆盖实现
4.2 调用每个service的prepare方法
4.3 调用每个service的boot方法,启动
4.4调用每个service的onComplete方法
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
继续看Agent的配置初始化 SnifferConfigInitializer
配置分为本地配置config和远程RemoteDownstreamConfig两种,后者从Collect Server获取
1.从本地文件加载配置
2.从环境变量覆盖配置
3.根据agentOptions覆盖配置
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
plugin 插件包
PluginBootStrap 插件引导程序
先看PluginBootstrap,调用loadPlugins加载所有的插件
1.获取resources,也就是插件url列表
2.加载到插件配置pluginCfg
3.获取插件定义列表pluginClassList,循环每个插件定义pluginDefine
4.然后创建插件类增强定义,生成plugin,增加到最后的plugin结果列表
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
PluginFinder 插件查找实现
插件的匹配
1.名称匹配NameMatch
2.签名匹配SignatureMatch