live-demo
与 skywalking
源码联调
构建项目
找一个目录执行c#教程如下命令
- 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 .. # 进入上级目录
构建成功后会在如下两vb.net教程个目录生成安装包
- .
- ├── 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
的子模块被忽略的情况,可以使用如下方式取消忽略
启动 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
启动参数
ProjectA
、 ProjectB
、 ProjectC
、 ProjectD
项目都需要配置,这里以 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
是否生成
- 启动
Kafka
、Eureka
、ProjectB
、ProjectC
、ProjectD
、ProjectA
- 在命令行执行
curl "http://localhost:8764/projectA/test"
- $ curl "http://localhost:8764/projectA/test"
- {"traceId":"https://cdn.jxasp.com:9143/image/20b7bb868a384b7bac5130efb5f76f17.82.16244120942450001"}%
- 使用上一步执行拿到的
traceId
,在UI
中查询,可以得到如下结果
PS:注意 ProjectA
、 ProjectB
、 ProjectC
、 ProjectD
、 Eureka
都可以在 IDEA
源码启动,但 Kafka
需要通过命令启动,可以参考 live-demo/bin/startup.sh
脚本
总结
不管是研究源码执行流程还是自己写一些插件、扩展一些功能, debug
源码是最基本的操作。 Skywalking
有些不一样的是,它的客户端这块是无法直接执行,需要附加在其他应用上。