当我从github上下载下来skywalking agent的代码后,面临的第一个问题就是如何调试。因为skywalking agent的运行模式与普通程序运行方式不一样,它是通过java agent方式运行的。本文接下来介绍如何在本地调试skywalking agent源码。
目录
- 一、下载源码
- 二、运行源码
一、下载源码
如果本地调试使用github仓库的代码,当导入idea之后,idea显示个别类无法找到,原因是仓库的代码缺少proto的内容,我们无法使用maven工具生成缺少的这部分类。
我们需要从https://skywalking.apache.org/downloads/网址上下载最新源码,当前最新的agent源码版本是v8.13.0(在文章的最后会附上源码的下载地址):
我们以tgz压缩包的形式下载下来源码,解压缩,然后可以看到如下图所示的目录形式:
之后将整个目录导入idea即可。
导入之后,使用idea编译,idea会报错,如下图:
出现上面问题的原因就是我们还需使用maven生成一些类,这些类是proto使用的,用于进行网络通讯。
接下来目录跳转到apm-protocol/,执行./mvn clean package -Dmaven.test.skip命令,得到下图结果便表示执行成功,此时会在
执行完上述命令之后,在apm-protocol/apm-network/target目录下会有一些代码生成,如下图红圈里面的内容,在导入idea源码时显示缺少的类便在java和grpc-java两个目录里面,接下来使用idea将两个目录标记为源码目录即可,这样这两个目录便加入了classpath,原来报错的内容便不再报错。
二、运行源码
我运行源码的方式是创建一个单元测试类,然后编辑启动参数运行。如果其他小伙伴有更好的方式,欢迎一起交流。
首先创建一个单元测试类AgentTest,如下图:
之后编辑启动参数,在VM options里面增加如下内容:
-javaagent:D:\apache-skywalking-java-agent-8.13.0\skywalking-agent\skywalking-agent.jar
-Dskywalking.agent.service_name=test
-Dskywalking.collector.backend_service=localhost
增加之后如下图,其中skywalking-agent.jar的路径是我本地路径,大家可以换成自己本地路径,另外两个参数是启动skywalking agent所必须的,如果不配置skywalking启动失败:
agent.service_name:表示客户端服务名,用于在SkyWalking UI中展示,其实就是设置agent名字,可以在服务端使用agent名字区分是哪个agent发送的日志。
collector.backend_service:表示oap服务端地址。
配置好上述信息,在SkyWalkingAgent.premaim()中打上端点,启动调试就可以了:
源码下载链接:https://dlcdn.apache.org/skywalking/java-agent/8.13.0/apache-skywalking-java-agent-8.13.0-src.tgz
本文参考视频:https://www.bilibili.com/video/BV1dy4y1V7ck?p=1&vd_source=ef290f25dc33647fb77d44e1920ca854,强烈建议大家学习该视频合集,介绍的非常详细。