provider和trace 持续分析。

关于traceId生成与traceId复用

当前运行的trace
/pkg/mod/go.opentelemetry.io/otel/sdk@v1.13.0/trace/provider.go
		
生成traceId
/pkg/mod/go.opentelemetry.io/otel/sdk@v1.13.0/trace/tracer.go
	r.provider.idGenerator.NewIDs(ctx)
			
			
负责生成的结构体
// tracerProviderConfig.
type tracerProviderConfig struct {
	// processors contains collection of SpanProcessors that are processing pipeline
	// for spans in the trace signal.
	// SpanProcessors registered with a TracerProvider and are called at the start
	// and end of a Span's lifecycle, and are called in the order they are
	// registered.
	processors []SpanProcessor

	// sampler is the default sampler used when creating new spans.
	sampler Sampler

	// idGenerator is used to generate all Span and Trace IDs when needed.
	idGenerator IDGenerator //该对象负责具体生成

	// spanLimits defines the attribute, event, and link limits for spans.
	spanLimits SpanLimits

	// resource contains attributes representing an entity that produces telemetry.
	resource *resource.Resource
}

复用traceId示例
func generateSpan(t *testing.T, tr trace.Tracer, option testOption) {
	sc := getSpanContext()

	for i := 0; i < option.genNumSpans; i++ {
		tid := sc.TraceID()
		binary.BigEndian.PutUint64(tid[0:8], uint64(i+1))
		newSc := sc.WithTraceID(tid)
		ctx := trace.ContextWithRemoteSpanContext(context.Background(), newSc)
		_, span := tr.Start(ctx, option.name)
		span.End()
	}
}
  

  

 

posted on 2023-10-09 18:59  黑熊一只  阅读(90)  评论(0)    收藏  举报