
整体主要分为三个部分:
1.skywalking-collector:链路数据归集器,数据可以保存在H2或ElasticSearch
2.skywalking-web:web的可视化管理后台,可以查看归集的数据
3.skywalking-agent:探针,用来收集和推送数据到归集器





SkyWalking trace视图

源码分析
SkyWalking Agent 基于 JavaAgent 机制,实现应用透明接入 SkyWalking
agent启动入口类SkyWalkingAgent

1.初始化agent配置
2.加载agent插件,创建出pluginFinder
3.根据byteBuddy,创建agentBuilder


4.2 调用每个service的prepare方法
4.3 调用每个service的boot方法,启动
4.4调用每个service的onComplete方法


Agent初始化时,会调用PluginBootstrap#loadPlugins,加载所有的插件,流程图如下:

SkyWalking 通过 JavaAgent 机制,对需要拦截的类的方法,使用 byte-buddy 动态修改 Java 类的二进制,从而进行方法切面拦截,记录调用链路。
看具体的代码实现之前,想一下拦截会涉及到哪些元素 :
拦截切面 InterceptPoint
拦截器 Interceptor
拦截类的定义 Define :一个类有哪些拦截切面及对应的拦截器

直接看增强实现enhance
1.enhanceClass 对静态方法增强

InterceptPoint 拦截点,每个插件都需要实现这个拦截器接口













