美文网首页
12、Skywalking的埋点-TraceSegment数据的

12、Skywalking的埋点-TraceSegment数据的

作者: rock_fish | 来源:发表于2021-06-23 14:00 被阅读0次
采样创建TraceSegment

默认情况下,每个请求都应该生成一条完整的 Trace。但在面对海量请求时这就会给网络和存储带来更多的压力,浪费很多资源。为了解决这个问题,几乎所有的 Trace 系统都会支持采样的功能。Skywalking agent 中采样的控制大致如下所示:


image.png

详情请看:Skywalking的埋点-Agent动态采样控制

基于时间窗口控制采样率

SamplingService 负责控制采样率,其内部实现是时间窗口+计数器的方式;当进入新时间窗口的时候:

  • 计数器重置清0
  • 每一个采样,计数器+1,当达到阈值后,不再采样,直到下一个时间窗口重置


    image.png
收集TraceSegment

简单来说 TracingContext 通过 stopSpan() 方法关闭最后一个 Span 时,会调用 finish() 方法关闭相应的 TraceSegment,同时会通知TraceSegmentServiceClient(gRPC)或者KafkaTraceSegmentServiceClient(Kafka)对这个TraceSegment进行收集,存放到一个缓冲区中,进而发送到后端的 OAP 集群

这个缓冲队列有长度限制(300*5),当因消费慢引发队列满的情况下,其逻辑是再尝试加入队列3次,如果还不成功,则丢弃当前TraceSegment.

发送Trace

XXXSegmentServiceClient有一个消费线程,不停的拉取缓冲队列中的数据,

  • 如果是TraceSegmentServiceClient,则通过gRPC发送给后端OAP
  • 如果是KafkaTraceSegmentServiceClient,则丢到Kafka中。
image.png

相关文章

网友评论

      本文标题:12、Skywalking的埋点-TraceSegment数据的

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