01、SkyWalking 源码分析 调试环境搭建

1. 依赖工具

  • Maven
  • Git
  • JDK
  • IntelliJ IDEA

2. 源码拉取

从官方仓库 https://github.com/OpenSkywalking/skywalking Fork 出属于自己的仓库。为什么要 Fork ?既然开始阅读、调试源码,我们可能会写一些注释,有了自己的仓库,可以进行自由的提交。😈

使用IntelliJ IDEAFork 出来的仓库拉取代码。拉取完成后,Maven 会下载依赖包,可能会花费一些时间,耐心等待下。

本文基于 master 分支。

3. 启动 SkyWalking Collector

1、 在IntelliJIDEATerminal中,执行mvncompile-Dmaven.test.skip=true进行编译;
2、 设置gRPC的自动生成的代码目录,为源码目录:;

  • /apm-network/target/generated-sources/protobuf/ 下的 grpc-javajava 目录
  • /apm-collector-remote/collector-remote-grpc-provider/target/generated-sources/protobuf/ 下的 grpc-javajava 目录
  •  

    从 3.2 开始,网络通讯协议引入 GRPC ,所以增加上述的步骤

    1. 运行 org.skywalking.apm.collector.bootCollector.BootStartUp 的 #main(args) 方法,启动 Collector 。
      4、 访问http://127.0.0.1:10800/agent/jetty地址,返回["localhost:12800/"],说明启动成功

4. 启动 SkyWalking Agent

感谢吴晟 指导如何搭建 Agent 调试环境。

1、 在IntelliJIDEATerminal中,执行mvncompile-Dmaven.test.skip=true进行编译在/packages/skywalking-agent目录下,我们可以看到编译出来的Agent:;

 
2、 使用SpringBoot创建一个简单的Web项目类似如下:;

 

友情提示 :这里一定要注意下。创建的 Web 项目,使用 IntelliJ IDEA 的菜单 File / New / Module 或 File / New / Module from Existing Sources ,保证 Web 项目和 skywalking 项目平级。这样,才可以使用 IntelliJ IDEA 调试 Agent 。

  •  
  •  
    1. 在 org.skywalking.apm.agent.SkyWalkingAgent 的 #premain(...) 方法,打上调试断点。
    2. 运行 Web 项目的 Application 的 #main(args) 方法,并增加 JVM 启动参数,-javaagent:/path/to/skywalking-agent/skywalking-agent.jar。/path/to 参数值为上面我们编译出来的 /packages/skywalking-agent 目录的绝对路径。如下图 :

 
5、 如果在【第三步】的调试断点停住,说明Agent启动成功


考虑到可能我们会在 Agent 上增加代码注释,这样每次不得不重新编译 Agent 。可以配置如下图,自动编译 Agent :

 

  • -T 1C clean package -Dmaven.test.skip=true -Dmaven.compile.fork=true 。

另外,使用 IntelliJ IDEA Remote 远程调试,也是可以的。如下图 :

 

5. 启动 SkyWalking Web UI

考虑到调试过程中,我们要看下是否收集到追踪日志,可以安装 SkyWalking Web UI 进行查看。

参考《官方文档 —— Sky Walking Web UI》 安装。