整体主要分为三个部分:
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 拦截点,每个插件都需要实现这个拦截器接口