diff --git a/pkg/tracing/tracing.go b/pkg/tracing/tracing.go index 884c96b7c..5ac07bf9e 100644 --- a/pkg/tracing/tracing.go +++ b/pkg/tracing/tracing.go @@ -25,7 +25,7 @@ import ( // Backend is an abstraction for tracking backend (OpenTelemetry, ...). type Backend interface { - Setup(serviceName string, sampleRate float64, globalAttributes map[string]string) (trace.Tracer, io.Closer, error) + Setup(serviceName string, sampleRate float64, resourceAttributes map[string]string) (trace.Tracer, io.Closer, error) } // NewTracing Creates a Tracing. @@ -44,7 +44,7 @@ func NewTracing(conf *static.Tracing) (*Tracer, io.Closer, error) { otel.SetTextMapPropagator(autoprop.NewTextMapPropagator()) - tr, closer, err := backend.Setup(conf.ServiceName, conf.SampleRate, conf.GlobalAttributes) + tr, closer, err := backend.Setup(conf.ServiceName, conf.SampleRate, conf.ResourceAttributes) if err != nil { return nil, nil, err } diff --git a/pkg/tracing/tracing_test.go b/pkg/tracing/tracing_test.go index f6d69a716..b5e0d9b02 100644 --- a/pkg/tracing/tracing_test.go +++ b/pkg/tracing/tracing_test.go @@ -73,6 +73,7 @@ func TestTracing(t *testing.T) { desc string propagators string headers map[string]string + resourceAttributes map[string]string wantServiceHeadersFn func(t *testing.T, headers http.Header) assertFn func(*testing.T, string) }{ @@ -85,6 +86,17 @@ func TestTracing(t *testing.T) { assert.Regexp(t, `({"key":"service.version","value":{"stringValue":"dev"}})`, trace) }, }, + { + desc: "resource attributes must be propagated", + resourceAttributes: map[string]string{ + "service.environment": "custom", + }, + assertFn: func(t *testing.T, trace string) { + t.Helper() + + assert.Regexp(t, `({"key":"service.environment","value":{"stringValue":"custom"}})`, trace) + }, + }, { desc: "TraceContext propagation", propagators: "tracecontext", @@ -328,8 +340,9 @@ func TestTracing(t *testing.T) { }) tracingConfig := &static.Tracing{ - ServiceName: "traefik", - SampleRate: 1.0, + ServiceName: "traefik", + SampleRate: 1.0, + ResourceAttributes: test.resourceAttributes, OTLP: &types.OTelTracing{ HTTP: &types.OTelHTTP{ Endpoint: collector.URL, diff --git a/pkg/types/tracing.go b/pkg/types/tracing.go index 2346e3b69..c232ad37a 100644 --- a/pkg/types/tracing.go +++ b/pkg/types/tracing.go @@ -36,7 +36,7 @@ func (c *OTelTracing) SetDefaults() { } // Setup sets up the tracer. -func (c *OTelTracing) Setup(serviceName string, sampleRate float64, globalAttributes map[string]string) (trace.Tracer, io.Closer, error) { +func (c *OTelTracing) Setup(serviceName string, sampleRate float64, resourceAttributes map[string]string) (trace.Tracer, io.Closer, error) { var ( err error exporter *otlptrace.Exporter @@ -55,7 +55,7 @@ func (c *OTelTracing) Setup(serviceName string, sampleRate float64, globalAttrib semconv.ServiceVersionKey.String(version.Version), } - for k, v := range globalAttributes { + for k, v := range resourceAttributes { attr = append(attr, attribute.String(k, v)) }