live-demo
与 skywalking
源码联调找一个目录执行以下命令java
git clone https://github.com/apache/skywalking.git # clone skywalking项目 cd skywalking # 进入skywalking目录 git checkout v8.4.0 # 切换到v8.4.0版本 git checkout -b new_v8.4.0 # 建立一个新分支 git submodule init # 初始化子模块 git submodule update # 更新子模块,注意:可能由于网络问题失败,若是失败屡次尝试便可 ./mvnw clean package -DskipTests # 执行maven命令,构建skywalking项目,时间会比较长,耐心等待... cd .. # 进入上级目录 git clone https://github.com/SkyAPMTest/skywalking-live-demo # clone live-demo skywalking案例项目 cd skywalking-live-demo # 进入skywalking-live-demo目录 mvn clean package # 构建demo项目 cd .. # 进入上级目录
构建成功后会在以下两个目录生成安装包git
. ├── skywalking │ └── dist │ │ ├── apache-skywalking-apm-bin-es7.tar.gz # es7的安装包 │ │ └── apache-skywalking-apm-bin.tar.gz └── skywalking-live-demo └── live-demo-assembly.tar.gz # demo项目
skywalking
部分模块构建# 打包 agent 模块,会出现skywalking-agent目录 ./mvnw package -Pagent -DskipTests # 打包 agent 模块,而后打包到dist目录 ./mvnw package -Pagent,dist -DskipTests # 打包 backend 模块,而后打包到dist目录 ./mvnw package -Pbackend,dist -DskipTests # 打包 UI 模块,而后打包到dist目录 ./mvnw package -Pui,dist -DskipTests
skywalking
做为模块导入 skywalking-live-demo
项目IDEA
中打开 skywalking-live-demo
项目skywalking-live-demo
项目中使用 Module from Existing Sources
的方式导入 Skywalking
PS:导入 skywalking
项目的时候可能会出现 skywalking
的子模块被忽略的状况,可使用以下方式取消忽略github
OAP
服务执行 org.apache.skywalking.oap.server.starter.OAPServerStartUp#main
方法,启动 OAP
服务shell
skywalking-agent
cd skywalking # 进入skywalking目录 ./mvnw package -Pagent -DskipTests # 打包 agent 模块,会出现skywalking-agent目录
生成后的 skywalking-agent
目录结构以下所示:apache
skywalking └── skywalking-agent ├── activations ├── bootstrap-plugins ├── config ├── logs ├── optional-plugins ├── optional-reporter-plugins ├── plugins └── skywalking-agent.jar
JVM
启动参数ProjectA
、 ProjectB
、 ProjectC
、 ProjectD
项目都须要配置,这里以 ProjectA
为例bootstrap
-javaagent:{须要替换成项目目录}/skywalking/skywalking-agent/skywalking-agent.jar -Dskywalking.collector.grpc_channel_check_interval=2 -Dskywalking.collector.app_and_service_register_check_interval=2 -Dcollector.discovery_check_interval=2 -Dskywalking.collector.backend_service=localhost:11800 -Dskywalking.agent.service_name=business-zone::projectA -Dskywalking.logging.level=info -Dskywalking.plugin.toolkit.log.grpc.reporter.server_host=localhost -Dskywalking.plugin.toolkit.log.grpc.reporter.server_port=11800 -Dskywalking.plugin.toolkit.log.grpc.reporter.max_message_size=10485760 -Dskywalking.plugin.toolkit.log.grpc.reporter.upstream_timeout=30
agent
断点是否生效在 org.apache.skywalking.apm.agent.SkyWalkingAgent#premain
方法中任一语句打上断点,启动 ProjectA
网络
UI
上验证 trace
是否生成Kafka
、 Eureka
、 ProjectB
、 ProjectC
、 ProjectD
、 ProjectA
curl "http://localhost:8764/projectA/test"
$ curl "http://localhost:8764/projectA/test" {"traceId":"20b7bb868a384b7bac5130efb5f76f17.82.16244120942450001"}%
traceId
,在 UI
中查询,能够获得以下结果PS:注意 ProjectA
、 ProjectB
、 ProjectC
、 ProjectD
、 Eureka
均可以在 IDEA
源码启动,但 Kafka
须要经过命令启动,能够参考 live-demo/bin/startup.sh
脚本app
无论是研究源码执行流程仍是本身写一些插件、扩展一些功能, debug
源码是最基本的操做。 Skywalking
有些不同的是,它的客户端这块是没法直接执行,须要附加在其余应用上。curl
分享并记录所学所见jvm