美文网首页
Skywalking-03:Skywalking本地调试

Skywalking-03:Skywalking本地调试

作者: Switch_vov | 来源:发表于2021-07-28 22:00 被阅读0次

    live-demoskywalking 源码联调

    构建项目

    找一个目录执行如下命令

    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
    file
    1. 成功导入后,会出现如下两个模块
    file

    PS:导入 skywalking 项目的时候可能会出现 skywalking 的子模块被忽略的情况,可以使用如下方式取消忽略

    file file

    启动 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
    
    file

    验证

    验证 agent 断点是否生效

    org.apache.skywalking.apm.agent.SkyWalkingAgent#premain 方法中任一语句打上断点,启动 ProjectA

    file

    UI 上验证 trace 是否生成

    1. 启动 KafkaEurekaProjectBProjectCProjectDProjectA
    2. 在命令行执行 curl "http://localhost:8764/projectA/test"
    $ curl "http://localhost:8764/projectA/test"
    {"traceId":"20b7bb868a384b7bac5130efb5f76f17.82.16244120942450001"}%
    
    1. 使用上一步执行拿到的 traceId ,在 UI 中查询,可以得到如下结果
    file

    PS:注意 ProjectAProjectBProjectCProjectDEureka 都可以在 IDEA 源码启动,但 Kafka 需要通过命令启动,可以参考 live-demo/bin/startup.sh 脚本

    总结

    不管是研究源码执行流程还是自己写一些插件、扩展一些功能, debug 源码是最基本的操作。 Skywalking 有些不一样的是,它的客户端这块是无法直接执行,需要附加在其他应用上。

    参考文档

    1. skywalking-live-demo

    分享并记录所学所见

    相关文章

      网友评论

          本文标题:Skywalking-03:Skywalking本地调试

          本文链接:https://www.haomeiwen.com/subject/zustvltx.html