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()
}
}
浙公网安备 33010602011771号