乐趣区

关于java:Skywalking03Skywalking本地调试

live-demo 与 skywalking 源码联调

构建我的项目

找一个目录执行如下命令

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 .. # 进入下级目录 

构建胜利后会在如下两个目录生成安装包

.
├── 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 我的项目

  1. IDEA 中关上 skywalking-live-demo 我的项目
  2. 在关上的 skywalking-live-demo 我的项目中应用 Module from Existing Sources 的形式导入 Skywalking 

  1. 胜利导入后,会呈现如下两个模块

PS:导入 skywalking 我的项目的时候可能会呈现 skywalking 的子模块被疏忽的状况,能够应用如下形式勾销疏忽

启动 OAP 服务

执行 org.apache.skywalking.oap.server.starter.OAPServerStartUp#main 办法,启动 OAP 服务

生成 skywalking-agent

cd skywalking # 进入 skywalking 目录
./mvnw package -Pagent -DskipTests # 打包 agent 模块,会呈现 skywalking-agent 目录 

生成后的 skywalking-agent 目录构造如下所示:

skywalking
└── skywalking-agent
    ├── activations
    ├── bootstrap-plugins
    ├── config
    ├── logs
    ├── optional-plugins
    ├── optional-reporter-plugins
    ├── plugins
    └── skywalking-agent.jar

配置我的项目 JVM 启动参数

ProjectAProjectBProjectCProjectD 我的项目都须要配置,这里以 ProjectA 为例

-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 是否生成

  1. 启动 KafkaEurekaProjectBProjectCProjectDProjectA 
  2. 在命令行执行 curl "http://localhost:8764/projectA/test" 
$ curl "http://localhost:8764/projectA/test"
{"traceId":"20b7bb868a384b7bac5130efb5f76f17.82.16244120942450001"}%
  1. 应用上一步执行拿到的 traceId,在 UI 中查问,能够失去如下后果

PS:留神 ProjectAProjectBProjectCProjectDEureka 都能够在 IDEA 源码启动,但 Kafka 须要通过命令启动,能够参考 live-demo/bin/startup.sh 脚本

总结

不论是钻研源码执行流程还是本人写一些插件、扩大一些性能,debug 源码是最根本的操作。Skywalking 有些不一样的是,它的客户端这块是无奈间接执行,须要附加在其余利用上。

参考文档

  1. skywalking-live-demo

分享并记录所学所见

退出移动版