SkyWalking
This content is not available in your language yet.
SkyWalking 由进程内 Agent、OAP 分析平台和多种接收协议组成;源码阅读要同时关注“调用点如何被插桩”和“遥测数据如何被接收、分发、聚合、存储”。
本册问题地图
Section titled “本册问题地图”SkyWalking 需要同时理解 Agent 插件、上下文传播和 OAP 分析存储:
- 插件如何做到无侵入? Agent 在类加载或增强阶段插入拦截逻辑,把数据库、HTTP、RPC 等调用转换成 Span。
- Segment、Span、Context 如何配合? Span 表示一次局部操作,Segment 聚合一个线程或请求中的本地调用,Context 负责跨线程和跨进程传递关联信息。
- 为什么以 Segment 为上报单元? 本地调用完成后批量发送,减少每个 Span 一次网络交互;代价是队列积压或进程崩溃会影响尚未上报的链路。
- OAP 为什么分接收、分析、存储? 接收处理协议,分析生成拓扑和指标,存储提供查询模型;Trace、拓扑、指标的读写需求不同,不能只用一张原始表解决。
- 链路不完整如何定位? 先看采样和上下文是否创建,再看跨线程传播、队列是否积压、插件是否增强成功,最后检查 OAP 接收和存储。
| 项 | 值 |
|---|---|
| 仓库 | apache/skywalking |
| 本地路径 | E:\source\java\tools\skywalking |
| 分支 | master |
| Commit | 102af09b4(2026-08-11) |
| 最近 tag | v8.3.0.2 |
| 层 | 职责 | 关键抽象 |
|---|---|---|
| Agent | 插件匹配、字节码增强、上下文 | ClassEnhancePluginDefine、ContextManager |
| Protocol | gRPC/HTTP 数据模型 | TraceSegment、protobuf |
| OAP receiver | 接收 Agent、Meter、Log 等数据 | SourceReceiver |
| OAP analyzer | 分发与聚合 | DispatcherManager、TraceAnalyzer |
| Storage | 指标、拓扑、Trace 持久化 | DAO/Storage SPI |
- 从 Agent 插件定义进入匹配和增强。
- 顺着
ContextManager、AbstractSpan、TraceSegment看一次调用如何形成追踪数据。 - 从 OAP
ModuleManager进入模块启动。 - 从
SourceReceiverImpl、TraceSegmentReportServiceHandler追踪数据进入分析器。