美文网首页
Jeager采样率疑问

Jeager采样率疑问

作者: huiwq1990 | 来源:发表于2019-11-19 16:57 被阅读0次

1、问题

A调用B,B调用C,它们采样率不一样,一个trace中是否会只包含部分服务的Span(比如缺少B的)?
答案:不会的。

2、解释

当A节点接收到一个请求,这个请求没有包含trace信息,jaeger会产生一个新的trace,生成一个新的traceId,同时根据当前的采样策略决定是否采样。这个采样结果会传递给B和C,B和C不需要自己进行采样判断,使用A传的值即可。

https://www.jaegertracing.io/docs/1.14/sampling/

3、验证

span生成

span := tracer.StartSpan("say-hello")

span创建

tracer.go:startSpanWithOptions创建span,并将sample设置到flag中。

    var samplerTags []Tag
    newTrace := false
    if !isSelfRef {
        if !hasParent || !parent.IsValid() {
            // 需要新建trace场景
            newTrace = true
            // 概率采样策略使用traceID低位判断是否采样
            ctx.traceID.Low = t.randomID()
            if t.options.gen128Bit {
                ctx.traceID.High = t.options.highTraceIDGenerator()
            }
            ctx.spanID = SpanID(ctx.traceID.Low)
            ctx.parentID = 0
            ctx.flags = byte(0)
            // 一定有父节点,但是父节点的trace不合法,用户需要在httpheader设置jaeger-debug-id
            if hasParent && parent.isDebugIDContainerOnly() && t.isDebugAllowed(operationName) {
                // debug模式,一定会采样
                ctx.flags |= (flagSampled | flagDebug)
                samplerTags = []Tag{{key: JaegerDebugHeader, value: parent.debugID}}
            } else if sampled, tags := t.sampler.IsSampled(ctx.traceID, operationName); sampled {
                //t.sampler是用户配置的采样策略
                ctx.flags |= flagSampled
                samplerTags = tags
            }
        } else {
            ctx.traceID = parent.traceID
            if rpcServer && t.options.zipkinSharedRPCSpan {
                // Support Zipkin's one-span-per-RPC model
                ctx.spanID = parent.spanID
                ctx.parentID = parent.parentID
            } else {
                ctx.spanID = SpanID(t.randomID())
                ctx.parentID = parent.spanID
            }
            // 如果存在parentTrace,直接使用parent的采样值
            ctx.flags = parent.flags
        }
        if hasParent {
            // copy baggage items
            if l := len(parent.baggage); l > 0 {
                ctx.baggage = make(map[string]string, len(parent.baggage))
                for k, v := range parent.baggage {
                    ctx.baggage[k] = v
                }
            }
        }
    }

采样策略

概率采样策略是根据traceId判断是否需要采样。

func (s *ProbabilisticSampler) IsSampled(id TraceID, operation string) (bool, []Tag) {
    return s.samplingBoundary >= id.Low, s.tags
}

span结束

span.go:FinishWithOptions

func (s *Span) FinishWithOptions(options opentracing.FinishOptions) {
    if options.FinishTime.IsZero() {
        options.FinishTime = s.tracer.timeNow()
    }
    s.observer.OnFinish(options)
    s.Lock()
        // 如果采样,才会计算耗时,日志等
    if s.context.IsSampled() {
        s.duration = options.FinishTime.Sub(s.startTime)
        // Note: bulk logs are not subject to maxLogsPerSpan limit
        if options.LogRecords != nil {
            s.logs = append(s.logs, options.LogRecords...)
        }
        for _, ld := range options.BulkLogData {
            s.logs = append(s.logs, ld.ToLogRecord())
        }
    }
    s.Unlock()
    // 上报到reporter
    s.tracer.reportSpan(s)
}
func (t *Tracer) reportSpan(sp *Span) {
    t.metrics.SpansFinished.Inc(1)
        // 取span中的flag决定是否上报
    if sp.context.IsSampled() {
        t.reporter.Report(sp)
    }

    sp.Release()
}

相关文章

  • Jeager采样率疑问

    1、问题 A调用B,B调用C,它们采样率不一样,一个trace中是否会只包含部分服务的Span(比如缺少B的)?答...

  • rtp时间戳

    1. 概念 采样率:采样率就是每秒钟抽取图像或声波幅度样本的次数。比如音频采样率8k,表示1秒有8000次采样,视...

  • Bitmap知识点

    采样率压缩 根据ImageView的大小,通过设置inSampleSize采样率,加载压缩后的图片。如下: inS...

  • 音视频-AAC编码

    采样格式 必须是16位整数PCM。 采样率 支持的采样率有(Hz): 8000、11025、12000、16000...

  • android AudioRecord音频采集与AudioTra

    AudioRecord 音频采集 一、参数相关 1:什么是采样率? 采样率(也称为采样速度或者采样频率)定义了每秒...

  • 音频开发中常用到的概念

    在音频开发中,下面的这几个概念经常会遇到。 (1) 采样率(samplerate) 采样率,注意,目前44100H...

  • 音频-MP3

    采样率与帧 MP3:

  • Jaeger采样率初始化

    一、采样率配置属性 可以通过环境变量对采样率配置JAEGER_SAMPLER_TYPE 配置采集器的类型JAEGE...

  • 音频的基础知识参数分析_day94

    采样率sample_rate: 44100 采样率指一秒钟采集44100次 声道channels: 2一般有左声道...

  • 学习总结第二篇 5.3

    1、内容总结 (1)读SPEC 了解如何查看数据手册 采样率即单位时间内采样数 采样率及采样精度越高,采集信...

网友评论

      本文标题:Jeager采样率疑问

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