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 启动参数

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

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

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

总结

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

参考文档

  1. skywalking-live-demo

分享并记录所学所见

Skywalking-03:Skywalking本地调试的更多相关文章

  1. Adnc如何本地调试 - 一个轻量级的.Net Core微服务开发框架

    前言     Adnc是一个轻量级的.Net Core微服务开发框架,同样适用于单体架构系统的开发.     如果只是想本地调试,只需要安装必备软件,必备软件除开发工具外,其它软件建议大家都使用`do ...

  2. ReactNative新手学习之路03真机调试

    React Native新手入门03真机调试(iOS) 从设备访问开发服务器 在启用开发服务器的情况下,你可以快速的迭代修改应用,然后在设备上查看结果.这样做的前提是你的电脑和设备必须在同一个wifi ...

  3. mapreduce 本地调试需要注意的问题

    1.写好的程序直接在hadoop集群里面执行 2.如果需要在本地调试,需要注释掉mapred-site.xml <configuration> <!-- <property&g ...

  4. 开源分布式实时计算引擎 Iveely Computing 之 本地调试Topology(4)

    当我们写完一个比较复杂的Topology之后,倘若直接提交到服务器上运行,难免会有很多问题,如何进行本地的调试Topology,是我们非常关心的问题.我们依然以WordCount作为代码示例. 首先, ...

  5. OpenCart本地调试环境搭建

    OpenCart简介: 免费开源网络版电子商务系统,是建立在线商务网站首选之一.有众多用户和开发基础,结合其丰富特性与模板插件,可最大化定制在线商店.(也就是用来方便开网店的) 本地调试准备: Fir ...

  6. 在本地调试微信项目(C#)

    之前一人负责微信的项目,那时2014年LZ还没毕业..啥都不懂,为此特别感谢@SZW,没有你的框架,我可能都无从下手 当时做项目最麻烦的就是调试,因为很多页面都要使用 网页授权获取用户信息 在电脑上打 ...

  7. Oracle在本地调试成功读取数据,但是把代码放到服务器读不出数据的解决方法。

    用MVC EF框架开发项目,数据库用的是Oracle,本地调试的时候一切正常,但是把代码编译之后放到服务器就会读不出数据. 原因:本地调试环境与服务器环境不一致. 办法:在服务器上装ODT.NET组件 ...

  8. C#微信公众号——本地调试

    测试微信,因为要与微信服务器进行交互,所以必须要是外网地址,实现本地调试首先需要解决的问题就是外网问题,这个我前面的文章有介绍,这里就不再详细介绍了,网址http://www.cnblogs.com/ ...

  9. Hive 本地调试方法

    关键词:hive, debug 本地调试(local debug) Hive 可分为 exec (hive-exec,主要对应源码里的ql目录) 和 metastore 两部分,其中exec对外有两种 ...

随机推荐

  1. Nginx虚拟主机流量状态模块(nginx-module-vts)使用说明文档(四)

    装完NG,为了拿到各种状态指标,就要对NG做监控. Github 2.3k的开源项目nginx-module-vts没准真是你需求的. 链接数,qps,1xx.2xx,.3xx.4xx.5xx的响应数 ...

  2. 【NX二次开发】多功能对话框UF_UI_message_dialog

    多功能对话框 1 extern DllExport void ufsta(char *param, int *returnCode, int rlen) 2 { 3 UF_initialize(); ...

  3. 【C++】Vector求最大值最小值

    最大值: int max = *max_element(v.begin(),v.end()); 最小值: int min = *min_element(v.begin(),v.end());

  4. 面试常问的Java虚拟机内存模型,看这篇就够了!

    一.虚拟机 同样的java代码在不同平台生成的机器码肯定是不一样的,因为不同的操作系统底层的硬件指令集是不同的. 同一个java代码在windows上生成的机器码可能是0101.......,在lin ...

  5. 深入了解Debug和Release的区别

    原文地址:https://blog.csdn.net/sky___ice/article/details/8993885 一: Bin 目录用来存放编译的结果,bin是二进制binrary的英文缩写, ...

  6. NOIP模拟测试15「建造城市city(插板法)·轰炸·石头剪刀布」

    建造城市 题解 先思考一个简单问题 10个$toot$ 放进5间房屋,每个房屋至少有1个$toot$,方案数 思考:插板法,$10$个$toot$有$9$个缝隙,$5$间房屋转化为$4$个挡板,放在t ...

  7. Oracle不知道用户密码情况下,如何在不更改密码的前提下解锁用户或者延期密码有效期

    1.问题描述: 生产环境,zabbix告警业务用户密码即将过期,但是如何不知道业务用户密码的情况下来解决该问题? 2.实验一: 1)创建新的用户test,并授予test resource角色和conn ...

  8. 如何回答面试中问到的Hibernate和MyBatis的区别

    这边主要是写给那些准备去面试的(没什么经验的)应聘者看的,为了在面试中更好的回答这个问题,我做一个简单的梳理和总结. 作为一名职场新人,经历过多次的面试,由于在简历中提及了Hibernate和MyBa ...

  9. Python-对比两个目录中Excel文件

    背景:我在5月20日收到了一批Excel文件数据,由于文件很多大约有将近5000个,已经通过编写python脚本处理完成.但是6月9日的时候,又收到了一批新的Excel数据.但是在处理过程中发现,本次 ...

  10. .Net Core Host 之详解

    简介: 开发使用有三年经验了,想趁这个机会把net core的知识点梳理一下,也更好的研究一下.NET 5给我们带来的变化. 主机的概念: 一个主机是封装了应用程序的资源,比如一个对象: 依赖注入 ( ...