Skip to content

Commit 7b3fe03

Browse files
committed
tracing: allow the Resource to be set externally
This is a workaround for the brittleness when constructing OTel `Resource` objects. Internally, the OTel libraries do their own detection which can be merged with one created in code. However, the `semconv` spec versions must match. (NOT module version! the `semconv` package has multiple subpackages for each spec version, e.g. `semconv/v1.17`, `semconv/v1.21`, etc.) This creates a problem when BuildKit is used as a library - the importing app might be using a different, otherwise compatible version of the OTel libraries, so when it creates a resource, it will be merged with one of a different version. By allowing the `Resource` to be set (like the `Recorder`), the calling code can construct a resource using known consistent library versions that work, and then allow BuildKit to take over the rest of the initialization process for OTel. Signed-off-by: Milas Bowman <[email protected]>
1 parent 833949d commit 7b3fe03

File tree

1 file changed

+16
-8
lines changed

1 file changed

+16
-8
lines changed

util/tracing/detect/detect.go

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@ type detector struct {
2626
var ServiceName string
2727
var Recorder *TraceRecorder
2828

29+
var Resource *resource.Resource
30+
2931
var detectors map[string]detector
3032
var once sync.Once
3133
var tp trace.TracerProvider
@@ -97,13 +99,16 @@ func detect() error {
9799
// enable log with traceID when valid exporter
98100
bklog.EnableLogWithTraceID(true)
99101

100-
res, err := resource.Detect(context.Background(), serviceNameDetector{})
101-
if err != nil {
102-
return err
103-
}
104-
res, err = resource.Merge(resource.Default(), res)
105-
if err != nil {
106-
return err
102+
if Resource == nil {
103+
res, err := resource.Detect(context.Background(), serviceNameDetector{})
104+
if err != nil {
105+
return err
106+
}
107+
res, err = resource.Merge(resource.Default(), res)
108+
if err != nil {
109+
return err
110+
}
111+
Resource = res
107112
}
108113

109114
sp := sdktrace.NewBatchSpanProcessor(exp)
@@ -112,7 +117,10 @@ func detect() error {
112117
Recorder.flush = sp.ForceFlush
113118
}
114119

115-
sdktp := sdktrace.NewTracerProvider(sdktrace.WithSpanProcessor(sp), sdktrace.WithResource(res))
120+
sdktp := sdktrace.NewTracerProvider(
121+
sdktrace.WithSpanProcessor(sp),
122+
sdktrace.WithResource(Resource),
123+
)
116124
closers = append(closers, sdktp.Shutdown)
117125

118126
exporter = exp

0 commit comments

Comments
 (0)