Skywalking学习笔记

1. 总体结构

2. 生产部署

2.1. 启动es

  • docker启动

2.2. 下载解压包

2.3. 配置启动oap-server

  • 修改 config/application.yml
storage:
  selector: elasticsearch7
  • 启动
    bin/oapService.sh

  • 查看启动日志

    • tail -f logs/skywalking-oap-server.log

2.4. 启动skywalking-ui

2.5. 配置系统的启动参数

# SkyWalking Agent 配置
export SW_AGENT_NAME=demo-application # 配置 Agent 名字。一般来说,我们直接使用 Spring Boot 项目的 `spring.application.name` 。
export SW_AGENT_COLLECTOR_BACKEND_SERVICES=127.0.0.1:11800 # 配置 Collector 地址。
export SW_AGENT_SPAN_LIMIT=2000 # 配置链路的最大 Span 数量。一般情况下,不需要配置,默认为 300 。主要考虑,有些新上 SkyWalking Agent 的项目,代码可能比较糟糕。
export JAVA_AGENT=-javaagent:/Users/chenzz/OpenSource/skywalking-distribution/apache-skywalking-apm-bin-es7/agent/skywalking-agent.jar # SkyWalking Agent jar 地址。

# Jar 启动
java -jar $JAVA_AGENT -jar lab-39-demo-2.2.2.RELEASE.jar

启动成功的日志:

DEBUG 2021-10-26 11:45:08:452 main AgentPackagePath : The beacon class location is jar:file:/Users/chenzz/OpenSource/skywalking-distribution/apache-skywalking-apm-bin-es7/agent/skywalking-agent.jar!/org/apache/skywalking/apm/agent/core/boot/AgentPackagePath.class. 
INFO 2021-10-26 11:45:08:455 main SnifferConfigInitializer : Config file found in /Users/chenzz/OpenSource/skywalking-distribution/apache-skywalking-apm-bin-es7/agent/config/agent.config. 

3. 本地调试agent

3.1. 下载编译 skywalking-java 源码

  • git clone git@github.com:apache/skywalking-java.git
  • cd skywalking-java
  • git submodule init
  • git submodule update
  • mvn clean package -DskipTests

3.2. 启动es

  • 参考 "生产环境部署 - 启动es"

3.3. 配置启动oap-server

  • 参考 "生产环境部署 - 配置启动oap-server"

3.4. 启动 skywalking UI

  • 参考 "生产环境部署 - 启动 skywalking UI"

3.4. 断点skywalking-java

  • 把 skywalking-java 作为一个module和agent工程在一个窗口打开

  • 断点

    • org.apache.skywalking.apm.agent.SkyWalkingAgent#premain

3.5. 启动agent

  • 找一个spring server 应用进行配置
    • 例如,sc-11-consul-provider-demo
  • VM options:
    • -javaagent:/Users/chenzz/IdeaProjects/skywalking/skywalking-java/skywalking-agent/skywalking-agent.jar
    • jar包的路径为 3.1中编译得到的jar包
  • Environment Variables:
    • SW_AGENT_COLLECTOR_BACKEND_SERVICES=127.0.0.1:11800;SW_AGENT_NAME=demo-provider
    • 1
  • 启动应用

4. 本地调试 oap-server

4.1. 下载编译skywalking源码

  • git clone https://github.com/apache/skywalking.git

  • cd skywalking

  • git submodule init

  • git submodule update

  • mvn clean package -DskipTests

  • cd apm-dist/target # 编译结果目录

  • tar -zxvf apache-skywalking-apm-bin.tar.gz # 解压 Linux 包

  • cd apache-skywalking-apm-bin

  • ls -ls

4.2. todo

5. agent代码分析

  • 所有插件接口 2
    org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.ClassInstanceMethodsEnhancePluginDefine
  • SpringMVC 插件入口
    org.apache.skywalking.apm.plugin.spring.mvc.v4.define.AbstractControllerInstrumentation

  • 异步发送信息给server的代码入口 3
    org.apache.skywalking.apm.agent.core.remote.TraceSegmentServiceClient#consume

  • 获取traceId
    TraceContext.traceId()

  • 创建span (各种插件的入口)
    org.apache.skywalking.apm.agent.core.context.ContextManager#createEntrySpan

协议:https://www.jianshu.com/p/7d9e060c68d2

5. 参考:

https://skywalking.apache.org/zh/2020-04-19-skywalking-quick-start/#23-skywalking-oap-%E6%90%AD%E5%BB%BA

https://skywalking.apache.org/docs/skywalking-java/latest/en/setup/service-agent/java-agent/java-plugin-development-guide/

  1. 启动参数说明

  2. 插件开发手册

  3. 异步发送信息给server的代码

/** * RECOMMENDED CONFIGURATION VARIABLES: EDIT AND UNCOMMENT THE SECTION BELOW TO INSERT DYNAMIC VALUES FROM YOUR PLATFORM OR CMS. * LEARN WHY DEFINING THESE VARIABLES IS IMPORTANT: https://disqus.com/admin/universalcode/#configuration-variables*/ /* var disqus_config = function () { this.page.url = PAGE_URL; // Replace PAGE_URL with your page's canonical URL variable this.page.identifier = PAGE_IDENTIFIER; // Replace PAGE_IDENTIFIER with your page's unique identifier variable }; */ (function() { // DON'T EDIT BELOW THIS LINE var d = document, s = d.createElement('script'); s.src = 'https://chenzz.disqus.com/embed.js'; s.setAttribute('data-timestamp', +new Date()); (d.head || d.body).appendChild(s); })();