跳到主要内容

SkyWalking 源码分析 Collector 接收 Trace 数据

1. 概述

分布式链路追踪系统,链路的追踪大体流程如下:

1、 Agent收集Trace数据;
2、 Agent发送Trace数据给Collector;
3、 Collector接收Trace数据
4、 Collector存储Trace数据到存储器,例如,数据库;

本文主要分享【第三部分】 SkyWalking Collector 接收 Trace 数据

> 友情提示:Collector 接收到 TraceSegment 的数据,对应的类是 Protobuf 生成的。考虑到更加易读易懂,本文使用 TraceSegment 相关的原始类

大体流程如下:

 

  • Collector 接收到 TraceSegment 数据后,进行构建
  • 【蓝色流程】构建成功,进行流式处理,最终存储到存储器( 例如,ES / H2 )。
  • 【粉色流程】构建失败,写入 Buffer 文件进行暂存。
  • 【绿色流程】后台线程,定时读取 Buffer 文件,重新提交构建。

什么是构建

从TraceSegment 数据中,会构建出更多的数据维度,如下图所示:

 

构建的过程,本文只分享调用的过程,具体怎么生成新的数据,数据的流式处理与存储,在 《SkyWalking 源码解析 —— Collector 存储 Trace 数据》 详细解析。

为什么构建会失败

在TraceSegment 里的数据结构,例如操作名( operationName )和操作编号( operationId ) ,在 《SkyWalking 源码分析 —— Agent 收集 Trace 数据》 中我们可以看到,考虑到网络传输,优先使用 operationId ,若不存在( 例如操作还未注册,或者注册了 Agent 未同步到本地 ),则使用 operationName