From 3cc110d7297e5224705ac35892aac1ca409c30c1 Mon Sep 17 00:00:00 2001 From: wpessers Date: Sat, 9 May 2026 12:25:02 +0200 Subject: [PATCH 1/3] chore(collector): upgrade semconv to 1.40.0 --- collector/go.mod | 1 - collector/go.sum | 2 - collector/lambdacomponents/go.mod | 1 - collector/lambdacomponents/go.sum | 2 - collector/processor/coldstartprocessor/go.mod | 3 +- collector/processor/coldstartprocessor/go.sum | 2 - .../processor/coldstartprocessor/processor.go | 6 +- .../coldstartprocessor/processor_test.go | 18 ++--- .../receiver/telemetryapireceiver/go.mod | 4 +- .../receiver/telemetryapireceiver/go.sum | 12 ++-- .../telemetryapireceiver/metric_builder.go | 51 ++++++++------- .../metric_builder_test.go | 65 ++++++++++--------- .../receiver/telemetryapireceiver/receiver.go | 2 +- .../telemetryapireceiver/receiver_test.go | 9 +-- 14 files changed, 93 insertions(+), 85 deletions(-) diff --git a/collector/go.mod b/collector/go.mod index bd9e92dcba..6fc125f6bd 100644 --- a/collector/go.mod +++ b/collector/go.mod @@ -240,7 +240,6 @@ require ( go.opentelemetry.io/collector/receiver/otlpreceiver v0.153.0 // indirect go.opentelemetry.io/collector/receiver/receiverhelper v0.153.0 // indirect go.opentelemetry.io/collector/receiver/xreceiver v0.153.0 // indirect - go.opentelemetry.io/collector/semconv v0.128.0 // indirect go.opentelemetry.io/collector/service/hostcapabilities v0.153.0 // indirect go.opentelemetry.io/contrib/bridges/otelzap v0.18.0 // indirect go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.68.0 // indirect diff --git a/collector/go.sum b/collector/go.sum index f7548e0a1e..80d09bbc54 100644 --- a/collector/go.sum +++ b/collector/go.sum @@ -646,8 +646,6 @@ go.opentelemetry.io/collector/receiver/receivertest v0.153.0 h1:YHvywYcyV1G0I5r/ go.opentelemetry.io/collector/receiver/receivertest v0.153.0/go.mod h1:Zkf5hQ9qk9ACx/WBMZIaSri6LIJzFgfRxmScigP05tg= go.opentelemetry.io/collector/receiver/xreceiver v0.153.0 h1:yz6By4iJzOsvl9GxVOXTn0GoSr5ZxOuvk9+24obhqDQ= go.opentelemetry.io/collector/receiver/xreceiver v0.153.0/go.mod h1:4cM85JHe5weHwUAc60P/vPKU1uLtrhI46lzDOsSpqz4= -go.opentelemetry.io/collector/semconv v0.128.0 h1:MzYOz7Vgb3Kf5D7b49pqqgeUhEmOCuT10bIXb/Cc+k4= -go.opentelemetry.io/collector/semconv v0.128.0/go.mod h1:OPXer4l43X23cnjLXIZnRj/qQOjSuq4TgBLI76P9hns= go.opentelemetry.io/collector/service v0.153.0 h1:y0hQFJHBKwy+8gFrhvOjzfiEOMqX0vnd25nmxgKulF4= go.opentelemetry.io/collector/service v0.153.0/go.mod h1:Se1rFE464pVOYzfdXL7SIytP8fRODH4mXvAi0aW2iHg= go.opentelemetry.io/collector/service/hostcapabilities v0.153.0 h1:0Wd6KbrpyMimuuAMAcDfPiEIlkYCiuU5+N08DoUhMQ8= diff --git a/collector/lambdacomponents/go.mod b/collector/lambdacomponents/go.mod index 423f3b095d..e9ddde6b91 100644 --- a/collector/lambdacomponents/go.mod +++ b/collector/lambdacomponents/go.mod @@ -210,7 +210,6 @@ require ( go.opentelemetry.io/collector/receiver/receiverhelper v0.153.0 // indirect go.opentelemetry.io/collector/receiver/receivertest v0.153.0 // indirect go.opentelemetry.io/collector/receiver/xreceiver v0.153.0 // indirect - go.opentelemetry.io/collector/semconv v0.128.0 // indirect go.opentelemetry.io/collector/service/hostcapabilities v0.153.0 // indirect go.opentelemetry.io/contrib/bridges/otelzap v0.18.0 // indirect go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.68.0 // indirect diff --git a/collector/lambdacomponents/go.sum b/collector/lambdacomponents/go.sum index dab0d6b5ed..570e9f39de 100644 --- a/collector/lambdacomponents/go.sum +++ b/collector/lambdacomponents/go.sum @@ -630,8 +630,6 @@ go.opentelemetry.io/collector/receiver/receivertest v0.153.0 h1:YHvywYcyV1G0I5r/ go.opentelemetry.io/collector/receiver/receivertest v0.153.0/go.mod h1:Zkf5hQ9qk9ACx/WBMZIaSri6LIJzFgfRxmScigP05tg= go.opentelemetry.io/collector/receiver/xreceiver v0.153.0 h1:yz6By4iJzOsvl9GxVOXTn0GoSr5ZxOuvk9+24obhqDQ= go.opentelemetry.io/collector/receiver/xreceiver v0.153.0/go.mod h1:4cM85JHe5weHwUAc60P/vPKU1uLtrhI46lzDOsSpqz4= -go.opentelemetry.io/collector/semconv v0.128.0 h1:MzYOz7Vgb3Kf5D7b49pqqgeUhEmOCuT10bIXb/Cc+k4= -go.opentelemetry.io/collector/semconv v0.128.0/go.mod h1:OPXer4l43X23cnjLXIZnRj/qQOjSuq4TgBLI76P9hns= go.opentelemetry.io/collector/service v0.153.0 h1:y0hQFJHBKwy+8gFrhvOjzfiEOMqX0vnd25nmxgKulF4= go.opentelemetry.io/collector/service v0.153.0/go.mod h1:Se1rFE464pVOYzfdXL7SIytP8fRODH4mXvAi0aW2iHg= go.opentelemetry.io/collector/service/hostcapabilities v0.153.0 h1:0Wd6KbrpyMimuuAMAcDfPiEIlkYCiuU5+N08DoUhMQ8= diff --git a/collector/processor/coldstartprocessor/go.mod b/collector/processor/coldstartprocessor/go.mod index 7a09fd7d18..52645c5063 100644 --- a/collector/processor/coldstartprocessor/go.mod +++ b/collector/processor/coldstartprocessor/go.mod @@ -12,7 +12,7 @@ require ( go.opentelemetry.io/collector/processor v1.59.0 go.opentelemetry.io/collector/processor/processorhelper v0.153.0 go.opentelemetry.io/collector/processor/processortest v0.153.0 - go.opentelemetry.io/collector/semconv v0.128.0 + go.opentelemetry.io/otel v1.44.0 go.uber.org/multierr v1.11.0 go.uber.org/zap v1.28.0 ) @@ -38,7 +38,6 @@ require ( go.opentelemetry.io/collector/pdata/testdata v0.153.0 // indirect go.opentelemetry.io/collector/pipeline v1.59.0 // indirect go.opentelemetry.io/collector/processor/xprocessor v0.153.0 // indirect - go.opentelemetry.io/otel v1.44.0 // indirect go.opentelemetry.io/otel/metric v1.44.0 // indirect go.opentelemetry.io/otel/sdk v1.43.0 // indirect go.opentelemetry.io/otel/sdk/metric v1.43.0 // indirect diff --git a/collector/processor/coldstartprocessor/go.sum b/collector/processor/coldstartprocessor/go.sum index 905c6fc2ad..d9de604d50 100644 --- a/collector/processor/coldstartprocessor/go.sum +++ b/collector/processor/coldstartprocessor/go.sum @@ -77,8 +77,6 @@ go.opentelemetry.io/collector/processor/processortest v0.153.0 h1:aMH8+omUXs2iCK go.opentelemetry.io/collector/processor/processortest v0.153.0/go.mod h1:LAPHps5FhQyd0MnNd1ZHmoykG/EWsIpJLs7fivFf5Mc= go.opentelemetry.io/collector/processor/xprocessor v0.153.0 h1:mXtOAwZAXcHgAgVRzAk4NRoyj7yHV88LVFrn0CCedog= go.opentelemetry.io/collector/processor/xprocessor v0.153.0/go.mod h1:yGFU58TvheCedrVkdqU8jW/vnCFqcyYElf+5lidn0nA= -go.opentelemetry.io/collector/semconv v0.128.0 h1:MzYOz7Vgb3Kf5D7b49pqqgeUhEmOCuT10bIXb/Cc+k4= -go.opentelemetry.io/collector/semconv v0.128.0/go.mod h1:OPXer4l43X23cnjLXIZnRj/qQOjSuq4TgBLI76P9hns= go.opentelemetry.io/otel v1.44.0 h1:JjwHmHpA4iZ3wBxluu2fbbE7j4kqlE8jXyAyPXH7HqU= go.opentelemetry.io/otel v1.44.0/go.mod h1:BMgjTHL9WPRlRjL2oZCBTL4whCGtXch2H4BhOPIAyYc= go.opentelemetry.io/otel/metric v1.44.0 h1:1w0gILTcHdr3YI+ixLyjemwrVnsMURbTZFrSYCdDdmc= diff --git a/collector/processor/coldstartprocessor/processor.go b/collector/processor/coldstartprocessor/processor.go index 805169079d..94347a48a2 100644 --- a/collector/processor/coldstartprocessor/processor.go +++ b/collector/processor/coldstartprocessor/processor.go @@ -22,7 +22,7 @@ import ( "go.opentelemetry.io/collector/pdata/ptrace" "go.opentelemetry.io/collector/processor" "go.opentelemetry.io/collector/processor/processorhelper" - semconv "go.opentelemetry.io/collector/semconv/v1.5.0" + semconv "go.opentelemetry.io/otel/semconv/v1.40.0" "go.uber.org/zap" ) @@ -52,7 +52,7 @@ func (p *coldstartProcessor) processTraces(ctx context.Context, td ptrace.Traces if p.reported { return false } - if attr, ok := span.Attributes().Get(semconv.AttributeFaaSColdstart); ok && attr.Bool() { + if attr, ok := span.Attributes().Get(string(semconv.FaaSColdstartKey)); ok && attr.Bool() { if p.faasExecution == nil { sp := ptrace.NewSpan() p.coldstartSpan = &sp @@ -67,7 +67,7 @@ func (p *coldstartProcessor) processTraces(ctx context.Context, td ptrace.Traces return false } } - if _, ok := span.Attributes().Get(semconv.AttributeFaaSExecution); ok { + if _, ok := span.Attributes().Get(string(semconv.FaaSInvocationIDKey)); ok { if p.coldstartSpan == nil { p.faasExecution = &faasExecution{ span: ptrace.NewSpan(), diff --git a/collector/processor/coldstartprocessor/processor_test.go b/collector/processor/coldstartprocessor/processor_test.go index 8f30b10acd..893cc84d47 100644 --- a/collector/processor/coldstartprocessor/processor_test.go +++ b/collector/processor/coldstartprocessor/processor_test.go @@ -33,7 +33,7 @@ import ( "go.opentelemetry.io/collector/pdata/ptrace" "go.opentelemetry.io/collector/processor/processorhelper" "go.opentelemetry.io/collector/processor/processortest" - semconv "go.opentelemetry.io/collector/semconv/v1.5.0" + semconv "go.opentelemetry.io/otel/semconv/v1.40.0" "go.uber.org/multierr" ) @@ -57,7 +57,7 @@ func TestProcessor(t *testing.T) { input: func() ptrace.Traces { td := ptrace.NewTraces() span := td.ResourceSpans().AppendEmpty().ScopeSpans().AppendEmpty().Spans().AppendEmpty() - span.Attributes().PutBool(semconv.AttributeFaaSColdstart, true) + span.Attributes().PutBool(string(semconv.FaaSColdstartKey), true) return td }(), expected: ptrace.NewTraces(), @@ -81,7 +81,7 @@ func TestProcessor(t *testing.T) { input: func() ptrace.Traces { td := ptrace.NewTraces() span := td.ResourceSpans().AppendEmpty().ScopeSpans().AppendEmpty().Spans().AppendEmpty() - span.Attributes().PutBool(semconv.AttributeFaaSColdstart, true) + span.Attributes().PutBool(string(semconv.FaaSColdstartKey), true) span.Attributes().PutBool("faas.initialization", true) addExecutionSpan(td, executionTraceID) return td @@ -105,7 +105,7 @@ func TestProcessor(t *testing.T) { td := ptrace.NewTraces() addExecutionSpan(td, executionTraceID) span := td.ResourceSpans().AppendEmpty().ScopeSpans().AppendEmpty().Spans().AppendEmpty() - span.Attributes().PutBool(semconv.AttributeFaaSColdstart, true) + span.Attributes().PutBool(string(semconv.FaaSColdstartKey), true) span.Attributes().PutBool("faas.initialization", true) return td }(), @@ -164,7 +164,7 @@ func TestMultipleProcessTraces(t *testing.T) { input = ptrace.NewTraces() expected = ptrace.NewTraces() span := input.ResourceSpans().AppendEmpty().ScopeSpans().AppendEmpty().Spans().AppendEmpty() - span.Attributes().PutBool(semconv.AttributeFaaSColdstart, true) + span.Attributes().PutBool(string(semconv.FaaSColdstartKey), true) span.Attributes().PutBool("faas.initialization", true) input.CopyTo(expected) output, err = c.processTraces(context.Background(), input) @@ -186,7 +186,7 @@ func TestMultipleProcessTraces(t *testing.T) { input = ptrace.NewTraces() expected = ptrace.NewTraces() span = input.ResourceSpans().AppendEmpty().ScopeSpans().AppendEmpty().Spans().AppendEmpty() - span.Attributes().PutBool(semconv.AttributeFaaSColdstart, true) + span.Attributes().PutBool(string(semconv.FaaSColdstartKey), true) span.Attributes().PutBool("faas.initialization", true) input.CopyTo(expected) output, err = c.processTraces(context.Background(), input) @@ -225,17 +225,17 @@ func addExecutionSpan(td ptrace.Traces, id pcommon.TraceID) { ss.Scope().SetName("app/execution") span := ss.Spans().AppendEmpty() span.SetTraceID(id) - span.Attributes().PutStr(semconv.AttributeFaaSExecution, "af9d5aa4-a685-4c5f-a22b-444f80b3cc28") + span.Attributes().PutStr(string(semconv.FaaSInvocationIDKey), "af9d5aa4-a685-4c5f-a22b-444f80b3cc28") } func executionSpan(span ptrace.Span, id pcommon.TraceID) { span.SetTraceID(id) - span.Attributes().PutStr(semconv.AttributeFaaSExecution, "af9d5aa4-a685-4c5f-a22b-444f80b3cc28") + span.Attributes().PutStr(string(semconv.FaaSInvocationIDKey), "af9d5aa4-a685-4c5f-a22b-444f80b3cc28") } func initializationSpan(span ptrace.Span, id pcommon.TraceID) { span.SetTraceID(id) - span.Attributes().PutBool(semconv.AttributeFaaSColdstart, true) + span.Attributes().PutBool(string(semconv.FaaSColdstartKey), true) span.Attributes().PutBool("faas.initialization", true) } diff --git a/collector/receiver/telemetryapireceiver/go.mod b/collector/receiver/telemetryapireceiver/go.mod index b412d519f5..01c912a6fb 100644 --- a/collector/receiver/telemetryapireceiver/go.mod +++ b/collector/receiver/telemetryapireceiver/go.mod @@ -56,8 +56,8 @@ require ( go.opentelemetry.io/collector/receiver/xreceiver v0.153.0 // indirect go.opentelemetry.io/otel v1.44.0 go.opentelemetry.io/otel/metric v1.44.0 // indirect - go.opentelemetry.io/otel/sdk v1.43.0 // indirect - go.opentelemetry.io/otel/sdk/metric v1.43.0 // indirect + go.opentelemetry.io/otel/sdk v1.44.0 // indirect + go.opentelemetry.io/otel/sdk/metric v1.44.0 // indirect go.opentelemetry.io/otel/trace v1.44.0 // indirect go.uber.org/multierr v1.11.0 // indirect golang.org/x/sys v0.45.0 // indirect diff --git a/collector/receiver/telemetryapireceiver/go.sum b/collector/receiver/telemetryapireceiver/go.sum index c1692e73df..ed65b494be 100644 --- a/collector/receiver/telemetryapireceiver/go.sum +++ b/collector/receiver/telemetryapireceiver/go.sum @@ -59,7 +59,7 @@ github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U= go.opentelemetry.io/auto/sdk v1.2.1 h1:jXsnJ4Lmnqd11kwkBV2LgLoFMZKizbCi5fNZ/ipaZ64= go.opentelemetry.io/auto/sdk v1.2.1/go.mod h1:KRTj+aOaElaLi+wW1kO/DZRXwkF4C5xPbEe3ZiIhN7Y= -go.opentelemetry.io/collector v0.152.0 h1:0c3jSABotrW6dtQ2n+pfAErR+W+MJGcjbDvmFWilijs= +go.opentelemetry.io/collector v0.153.0 h1:hXKZdQtwHdUfNwMHfzhg4dANlfv+kgg3RIUYMoXReiA= go.opentelemetry.io/collector/component v1.59.0 h1:WtulkwzsdAOM/LE0cH/IiudUgiyb2ueVDDeEh5HsXzo= go.opentelemetry.io/collector/component v1.59.0/go.mod h1:5eQCM0tS6qbG2XJ6Bt67kgCxuhCbg4csVv6SywyHZ6w= go.opentelemetry.io/collector/component/componenttest v0.153.0 h1:u6O1l+9PUNnI22k8q4sF9wgLAUyt+y2Ov7xi1yZ+wE4= @@ -100,10 +100,12 @@ go.opentelemetry.io/otel v1.44.0 h1:JjwHmHpA4iZ3wBxluu2fbbE7j4kqlE8jXyAyPXH7HqU= go.opentelemetry.io/otel v1.44.0/go.mod h1:BMgjTHL9WPRlRjL2oZCBTL4whCGtXch2H4BhOPIAyYc= go.opentelemetry.io/otel/metric v1.44.0 h1:1w0gILTcHdr3YI+ixLyjemwrVnsMURbTZFrSYCdDdmc= go.opentelemetry.io/otel/metric v1.44.0/go.mod h1:8O7hanEPBNgEMmybD3s2VBKcgWOCsA6tzHBPODAiquo= -go.opentelemetry.io/otel/sdk v1.43.0 h1:pi5mE86i5rTeLXqoF/hhiBtUNcrAGHLKQdhg4h4V9Dg= -go.opentelemetry.io/otel/sdk v1.43.0/go.mod h1:P+IkVU3iWukmiit/Yf9AWvpyRDlUeBaRg6Y+C58QHzg= -go.opentelemetry.io/otel/sdk/metric v1.43.0 h1:S88dyqXjJkuBNLeMcVPRFXpRw2fuwdvfCGLEo89fDkw= -go.opentelemetry.io/otel/sdk/metric v1.43.0/go.mod h1:C/RJtwSEJ5hzTiUz5pXF1kILHStzb9zFlIEe85bhj6A= +go.opentelemetry.io/otel/metric/x v0.66.0 h1:YkCrx1zLOChi9ZcZ6euupOcsgzbVlec7D/xoEU1+cTA= +go.opentelemetry.io/otel/metric/x v0.66.0/go.mod h1:d1+BDj9t96do0/1LoU1ayfCv79ZgNE41qbhBvnMOBZk= +go.opentelemetry.io/otel/sdk v1.44.0 h1:nHYwb9lK+fJPU/dnT6s7W7Z8itMWyqrnVfbheVYrZ58= +go.opentelemetry.io/otel/sdk v1.44.0/go.mod h1:Osuydd3Se74nqjAKxid74N5eC+jfEqfTegHRnq58oK0= +go.opentelemetry.io/otel/sdk/metric v1.44.0 h1:3LlKgI+VjbVsjNRFZJZAJ30WjXC5VkNRks6si09iEfI= +go.opentelemetry.io/otel/sdk/metric v1.44.0/go.mod h1:5B5pMARnXxKhltooO4xUuCBorl65a4EpnTalObqOigA= go.opentelemetry.io/otel/trace v1.44.0 h1:jxF5CsGYCe74MCRx2X4g7WsY/VBKRqqpNvXlX/6gtIk= go.opentelemetry.io/otel/trace v1.44.0/go.mod h1:oLl1jrMQAVo6v3GAggN+1VH9VIz9iUSvW53sW1Q8PIE= go.opentelemetry.io/proto/slim/otlp v1.10.0 h1:iR97Vs/ZDR+y9TfuP9b1XBtdPWeC+OMslIBmhcLU7jM= diff --git a/collector/receiver/telemetryapireceiver/metric_builder.go b/collector/receiver/telemetryapireceiver/metric_builder.go index 8e8becc9bc..cb6e797281 100644 --- a/collector/receiver/telemetryapireceiver/metric_builder.go +++ b/collector/receiver/telemetryapireceiver/metric_builder.go @@ -20,7 +20,7 @@ import ( "github.com/open-telemetry/opentelemetry-collector-contrib/pkg/pdatautil" "go.opentelemetry.io/collector/pdata/pcommon" "go.opentelemetry.io/collector/pdata/pmetric" - semconv "go.opentelemetry.io/otel/semconv/v1.25.0" + "go.opentelemetry.io/otel/semconv/v1.40.0/faasconv" ) const MiB = float64(1 << 20) @@ -284,10 +284,11 @@ func (c *CounterMetricBuilder) AppendDataPoints(scopeMetrics pmetric.ScopeMetric } func NewFaaSInvokeDurationMetricBuilder(startTime pcommon.Timestamp, temporality pmetric.AggregationTemporality) *HistogramMetricBuilder { + m := faasconv.InvokeDuration{} return NewHistogramMetricBuilder( - semconv.FaaSInvokeDurationName, - semconv.FaaSInvokeDurationDescription, - semconv.FaaSInvokeDurationUnit, + m.Name(), + m.Description(), + m.Unit(), DurationHistogramBounds, startTime, temporality, @@ -295,10 +296,11 @@ func NewFaaSInvokeDurationMetricBuilder(startTime pcommon.Timestamp, temporality } func NewFaaSInitDurationMetricBuilder(startTime pcommon.Timestamp, temporality pmetric.AggregationTemporality) *HistogramMetricBuilder { + m := faasconv.InitDuration{} return NewHistogramMetricBuilder( - semconv.FaaSInitDurationName, - semconv.FaaSInitDurationDescription, - semconv.FaaSInitDurationUnit, + m.Name(), + m.Description(), + m.Unit(), DurationHistogramBounds, startTime, temporality, @@ -306,10 +308,11 @@ func NewFaaSInitDurationMetricBuilder(startTime pcommon.Timestamp, temporality p } func NewFaaSMemUsageMetricBuilder(startTime pcommon.Timestamp, temporality pmetric.AggregationTemporality) *HistogramMetricBuilder { + m := faasconv.MemUsage{} return NewHistogramMetricBuilder( - semconv.FaaSMemUsageName, - semconv.FaaSMemUsageDescription, - semconv.FaaSMemUsageUnit, + m.Name(), + m.Description(), + m.Unit(), MemUsageHistogramBounds, startTime, temporality, @@ -317,10 +320,11 @@ func NewFaaSMemUsageMetricBuilder(startTime pcommon.Timestamp, temporality pmetr } func NewFaaSColdstartsMetricBuilder(startTime pcommon.Timestamp, temporality pmetric.AggregationTemporality) *CounterMetricBuilder { + m := faasconv.Coldstarts{} return NewCounterMetricBuilder( - semconv.FaaSColdstartsName, - semconv.FaaSColdstartsDescription, - semconv.FaaSColdstartsUnit, + m.Name(), + m.Description(), + m.Unit(), true, startTime, temporality, @@ -328,10 +332,11 @@ func NewFaaSColdstartsMetricBuilder(startTime pcommon.Timestamp, temporality pme } func NewFaaSErrorsMetricBuilder(startTime pcommon.Timestamp, temporality pmetric.AggregationTemporality) *CounterMetricBuilder { + m := faasconv.Errors{} return NewCounterMetricBuilder( - semconv.FaaSErrorsName, - semconv.FaaSErrorsDescription, - semconv.FaaSErrorsUnit, + m.Name(), + m.Description(), + m.Unit(), true, startTime, temporality, @@ -339,10 +344,11 @@ func NewFaaSErrorsMetricBuilder(startTime pcommon.Timestamp, temporality pmetric } func NewFaaSInvocationsMetricBuilder(startTime pcommon.Timestamp, temporality pmetric.AggregationTemporality) *CounterMetricBuilder { + m := faasconv.Invocations{} return NewCounterMetricBuilder( - semconv.FaaSInvocationsName, - semconv.FaaSInvocationsDescription, - semconv.FaaSInvocationsUnit, + m.Name(), + m.Description(), + m.Unit(), true, startTime, temporality, @@ -350,10 +356,11 @@ func NewFaaSInvocationsMetricBuilder(startTime pcommon.Timestamp, temporality pm } func NewFaaSTimeoutsMetricBuilder(startTime pcommon.Timestamp, temporality pmetric.AggregationTemporality) *CounterMetricBuilder { + m := faasconv.Timeouts{} return NewCounterMetricBuilder( - semconv.FaaSTimeoutsName, - semconv.FaaSTimeoutsDescription, - semconv.FaaSTimeoutsUnit, + m.Name(), + m.Description(), + m.Unit(), true, startTime, temporality, diff --git a/collector/receiver/telemetryapireceiver/metric_builder_test.go b/collector/receiver/telemetryapireceiver/metric_builder_test.go index 5d3e8bcbdf..982780acdb 100644 --- a/collector/receiver/telemetryapireceiver/metric_builder_test.go +++ b/collector/receiver/telemetryapireceiver/metric_builder_test.go @@ -22,7 +22,7 @@ import ( "github.com/stretchr/testify/require" "go.opentelemetry.io/collector/pdata/pcommon" "go.opentelemetry.io/collector/pdata/pmetric" - semconv "go.opentelemetry.io/otel/semconv/v1.25.0" + "go.opentelemetry.io/otel/semconv/v1.40.0/faasconv" ) func TestHistogramMetricBuilder_AppendDataPoint(t *testing.T) { @@ -202,9 +202,10 @@ func TestFaaSMetricBuilderFactories(t *testing.T) { t.Run("NewFasSInvokeDurationMetricBuilder", func(t *testing.T) { builder := NewFaaSInvokeDurationMetricBuilder(startTime, pmetric.AggregationTemporalityCumulative) - assert.Equal(t, semconv.FaaSInvokeDurationName, builder.name) - assert.Equal(t, semconv.FaaSInvokeDurationDescription, builder.description) - assert.Equal(t, semconv.FaaSInvokeDurationUnit, builder.unit) + m := faasconv.InvokeDuration{} + assert.Equal(t, m.Name(), builder.name) + assert.Equal(t, m.Description(), builder.description) + assert.Equal(t, m.Unit(), builder.unit) assert.Equal(t, DurationHistogramBounds, builder.bounds) assert.Equal(t, pmetric.AggregationTemporalityCumulative, builder.temporality) assert.Equal(t, startTime, builder.startTime) @@ -212,9 +213,10 @@ func TestFaaSMetricBuilderFactories(t *testing.T) { t.Run("NewFasSInitDurationMetricBuilder", func(t *testing.T) { builder := NewFaaSInitDurationMetricBuilder(startTime, pmetric.AggregationTemporalityCumulative) - assert.Equal(t, semconv.FaaSInitDurationName, builder.name) - assert.Equal(t, semconv.FaaSInitDurationDescription, builder.description) - assert.Equal(t, semconv.FaaSInitDurationUnit, builder.unit) + m := faasconv.InitDuration{} + assert.Equal(t, m.Name(), builder.name) + assert.Equal(t, m.Description(), builder.description) + assert.Equal(t, m.Unit(), builder.unit) assert.Equal(t, DurationHistogramBounds, builder.bounds) assert.Equal(t, pmetric.AggregationTemporalityCumulative, builder.temporality) assert.Equal(t, startTime, builder.startTime) @@ -222,9 +224,10 @@ func TestFaaSMetricBuilderFactories(t *testing.T) { t.Run("NewFaaSMemUsageMetricBuilder", func(t *testing.T) { builder := NewFaaSMemUsageMetricBuilder(startTime, pmetric.AggregationTemporalityCumulative) - assert.Equal(t, semconv.FaaSMemUsageName, builder.name) - assert.Equal(t, semconv.FaaSMemUsageDescription, builder.description) - assert.Equal(t, semconv.FaaSMemUsageUnit, builder.unit) + m := faasconv.MemUsage{} + assert.Equal(t, m.Name(), builder.name) + assert.Equal(t, m.Description(), builder.description) + assert.Equal(t, m.Unit(), builder.unit) assert.Equal(t, MemUsageHistogramBounds, builder.bounds) assert.Equal(t, pmetric.AggregationTemporalityCumulative, builder.temporality) assert.Equal(t, startTime, builder.startTime) @@ -232,9 +235,10 @@ func TestFaaSMetricBuilderFactories(t *testing.T) { t.Run("NewFaaSColdstartsMetricBuilder", func(t *testing.T) { builder := NewFaaSColdstartsMetricBuilder(startTime, pmetric.AggregationTemporalityCumulative) - assert.Equal(t, semconv.FaaSColdstartsName, builder.name) - assert.Equal(t, semconv.FaaSColdstartsDescription, builder.description) - assert.Equal(t, semconv.FaaSColdstartsUnit, builder.unit) + m := faasconv.Coldstarts{} + assert.Equal(t, m.Name(), builder.name) + assert.Equal(t, m.Description(), builder.description) + assert.Equal(t, m.Unit(), builder.unit) assert.True(t, builder.isMonotonic) assert.Equal(t, pmetric.AggregationTemporalityCumulative, builder.temporality) assert.Equal(t, startTime, builder.startTime) @@ -242,9 +246,10 @@ func TestFaaSMetricBuilderFactories(t *testing.T) { t.Run("NewFaaSErrorsMetricBuilder", func(t *testing.T) { builder := NewFaaSErrorsMetricBuilder(startTime, pmetric.AggregationTemporalityCumulative) - assert.Equal(t, semconv.FaaSErrorsName, builder.name) - assert.Equal(t, semconv.FaaSErrorsDescription, builder.description) - assert.Equal(t, semconv.FaaSErrorsUnit, builder.unit) + m := faasconv.Errors{} + assert.Equal(t, m.Name(), builder.name) + assert.Equal(t, m.Description(), builder.description) + assert.Equal(t, m.Unit(), builder.unit) assert.True(t, builder.isMonotonic) assert.Equal(t, pmetric.AggregationTemporalityCumulative, builder.temporality) assert.Equal(t, startTime, builder.startTime) @@ -252,9 +257,10 @@ func TestFaaSMetricBuilderFactories(t *testing.T) { t.Run("NewFaaSInvocationsMetricBuilder", func(t *testing.T) { builder := NewFaaSInvocationsMetricBuilder(startTime, pmetric.AggregationTemporalityCumulative) - assert.Equal(t, semconv.FaaSInvocationsName, builder.name) - assert.Equal(t, semconv.FaaSInvocationsDescription, builder.description) - assert.Equal(t, semconv.FaaSInvocationsUnit, builder.unit) + m := faasconv.Invocations{} + assert.Equal(t, m.Name(), builder.name) + assert.Equal(t, m.Description(), builder.description) + assert.Equal(t, m.Unit(), builder.unit) assert.True(t, builder.isMonotonic) assert.Equal(t, pmetric.AggregationTemporalityCumulative, builder.temporality) assert.Equal(t, startTime, builder.startTime) @@ -262,9 +268,10 @@ func TestFaaSMetricBuilderFactories(t *testing.T) { t.Run("NewFaaSTimeoutsMetricBuilder", func(t *testing.T) { builder := NewFaaSTimeoutsMetricBuilder(startTime, pmetric.AggregationTemporalityCumulative) - assert.Equal(t, semconv.FaaSTimeoutsName, builder.name) - assert.Equal(t, semconv.FaaSTimeoutsDescription, builder.description) - assert.Equal(t, semconv.FaaSTimeoutsUnit, builder.unit) + m := faasconv.Timeouts{} + assert.Equal(t, m.Name(), builder.name) + assert.Equal(t, m.Description(), builder.description) + assert.Equal(t, m.Unit(), builder.unit) assert.True(t, builder.isMonotonic) assert.Equal(t, pmetric.AggregationTemporalityCumulative, builder.temporality) assert.Equal(t, startTime, builder.startTime) @@ -284,13 +291,13 @@ func TestNewFaaSMetricBuilders(t *testing.T) { require.NotNil(t, builders.invocationsMetric) require.NotNil(t, builders.timeoutsMetric) - assert.Equal(t, semconv.FaaSInvokeDurationName, builders.invokeDurationMetric.name) - assert.Equal(t, semconv.FaaSInitDurationName, builders.initDurationMetric.name) - assert.Equal(t, semconv.FaaSMemUsageName, builders.memUsageMetric.name) - assert.Equal(t, semconv.FaaSColdstartsName, builders.coldstartsMetric.name) - assert.Equal(t, semconv.FaaSErrorsName, builders.errorsMetric.name) - assert.Equal(t, semconv.FaaSInvocationsName, builders.invocationsMetric.name) - assert.Equal(t, semconv.FaaSTimeoutsName, builders.timeoutsMetric.name) + assert.Equal(t, faasconv.InvokeDuration{}.Name(), builders.invokeDurationMetric.name) + assert.Equal(t, faasconv.InitDuration{}.Name(), builders.initDurationMetric.name) + assert.Equal(t, faasconv.MemUsage{}.Name(), builders.memUsageMetric.name) + assert.Equal(t, faasconv.Coldstarts{}.Name(), builders.coldstartsMetric.name) + assert.Equal(t, faasconv.Errors{}.Name(), builders.errorsMetric.name) + assert.Equal(t, faasconv.Invocations{}.Name(), builders.invocationsMetric.name) + assert.Equal(t, faasconv.Timeouts{}.Name(), builders.timeoutsMetric.name) } func TestDefaultHistogramBounds(t *testing.T) { diff --git a/collector/receiver/telemetryapireceiver/receiver.go b/collector/receiver/telemetryapireceiver/receiver.go index 25640d71c1..dde5b58326 100644 --- a/collector/receiver/telemetryapireceiver/receiver.go +++ b/collector/receiver/telemetryapireceiver/receiver.go @@ -39,7 +39,7 @@ import ( "go.opentelemetry.io/collector/pdata/pmetric" "go.opentelemetry.io/collector/pdata/ptrace" "go.opentelemetry.io/collector/receiver" - semconv "go.opentelemetry.io/otel/semconv/v1.25.0" + semconv "go.opentelemetry.io/otel/semconv/v1.40.0" "go.uber.org/zap" ) diff --git a/collector/receiver/telemetryapireceiver/receiver_test.go b/collector/receiver/telemetryapireceiver/receiver_test.go index acc656027b..164e6103dc 100644 --- a/collector/receiver/telemetryapireceiver/receiver_test.go +++ b/collector/receiver/telemetryapireceiver/receiver_test.go @@ -28,7 +28,8 @@ import ( "go.opentelemetry.io/collector/pdata/pmetric" "go.opentelemetry.io/collector/pdata/ptrace" "go.opentelemetry.io/collector/receiver/receivertest" - semconv "go.opentelemetry.io/otel/semconv/v1.25.0" + semconv "go.opentelemetry.io/otel/semconv/v1.40.0" + "go.opentelemetry.io/otel/semconv/v1.40.0/faasconv" ) func TestListenOnAddress(t *testing.T) { @@ -148,13 +149,13 @@ func TestRecordMetrics(t *testing.T) { sm := rm.ScopeMetrics().At(0) for i := 0; i < sm.Metrics().Len(); i++ { m := sm.Metrics().At(i) - if m.Name() == semconv.FaaSColdstartsName { + if m.Name() == (faasconv.Coldstarts{}).Name() { foundColdstart = true } - if m.Name() == semconv.FaaSInvocationsName { + if m.Name() == (faasconv.Invocations{}).Name() { foundInvocation = true } - if m.Name() == semconv.FaaSInvokeDurationName { + if m.Name() == (faasconv.InvokeDuration{}).Name() { foundDuration = true } } From 78a748790605bb4f8d622acce860dd8b7c5c0fe2 Mon Sep 17 00:00:00 2001 From: wpessers Date: Sat, 9 May 2026 13:24:41 +0200 Subject: [PATCH 2/3] docs(collector): update coldstartprocessor docs --- collector/processor/coldstartprocessor/README.md | 2 +- collector/processor/coldstartprocessor/doc.go | 2 +- collector/processor/coldstartprocessor/processor_test.go | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/collector/processor/coldstartprocessor/README.md b/collector/processor/coldstartprocessor/README.md index 4ef1124c61..4958998956 100644 --- a/collector/processor/coldstartprocessor/README.md +++ b/collector/processor/coldstartprocessor/README.md @@ -7,7 +7,7 @@ | Distributions | [extension] | This processor associates cold start information generated by the [telemetryapireceiver](../../receiver/telemetryapireceiver) with incoming span data processed by -the Collector extension. It reads the following of incoming Lambda execution spans identified by the `faas.execution` attribute: +the Collector extension. It reads the following of incoming Lambda execution spans identified by the `faas.invocation_id` attribute: - trace ID - parent span ID diff --git a/collector/processor/coldstartprocessor/doc.go b/collector/processor/coldstartprocessor/doc.go index 445abb573b..01817c57a3 100644 --- a/collector/processor/coldstartprocessor/doc.go +++ b/collector/processor/coldstartprocessor/doc.go @@ -15,7 +15,7 @@ // Package coldstartprocessor correlates cold start information generated by the telemetryapireceiver // with incoming span data. // -// It reads the following of incoming Lambda execution spans identified by the faas.execution attribute: +// It reads the following of incoming Lambda execution spans identified by the faas.invocation_id attribute: // // - trace ID // - parent span ID diff --git a/collector/processor/coldstartprocessor/processor_test.go b/collector/processor/coldstartprocessor/processor_test.go index 893cc84d47..1580ded9d3 100644 --- a/collector/processor/coldstartprocessor/processor_test.go +++ b/collector/processor/coldstartprocessor/processor_test.go @@ -77,7 +77,7 @@ func TestProcessor(t *testing.T) { }(), }, { - desc: "faas.execution and faas.coldstart with coldstart is first", + desc: "faas.invocation_id and faas.coldstart with coldstart is first", input: func() ptrace.Traces { td := ptrace.NewTraces() span := td.ResourceSpans().AppendEmpty().ScopeSpans().AppendEmpty().Spans().AppendEmpty() @@ -100,7 +100,7 @@ func TestProcessor(t *testing.T) { reported: true, }, { - desc: "faas.execution and faas.coldstart with execution is first", + desc: "faas.invocation_id and faas.coldstart with execution is first", input: func() ptrace.Traces { td := ptrace.NewTraces() addExecutionSpan(td, executionTraceID) From ae32451deda2958bededb0e2ec23a430220255c9 Mon Sep 17 00:00:00 2001 From: wpessers Date: Sun, 31 May 2026 22:31:33 +0200 Subject: [PATCH 3/3] fix(collector): add fallback for nodejs instrumentation that still uses old semconv instead of faas invocation id --- collector/processor/coldstartprocessor/processor.go | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/collector/processor/coldstartprocessor/processor.go b/collector/processor/coldstartprocessor/processor.go index 94347a48a2..e6792f078c 100644 --- a/collector/processor/coldstartprocessor/processor.go +++ b/collector/processor/coldstartprocessor/processor.go @@ -26,6 +26,11 @@ import ( "go.uber.org/zap" ) +// TODO: faas.execution was renamed to faas.invocation_id in semconv v1.17.0. +// Node.js instrumentation still emits the old name, so we accept both for now. +// Remove this fallback once the JS layer migrates to faas.invocation_id. +const attributeFaaSExecutionDeprecated = "faas.execution" + type faasExecution struct { span ptrace.Span scope pcommon.InstrumentationScope @@ -67,7 +72,11 @@ func (p *coldstartProcessor) processTraces(ctx context.Context, td ptrace.Traces return false } } - if _, ok := span.Attributes().Get(string(semconv.FaaSInvocationIDKey)); ok { + _, hasInvocationID := span.Attributes().Get(string(semconv.FaaSInvocationIDKey)) + if !hasInvocationID { + _, hasInvocationID = span.Attributes().Get(attributeFaaSExecutionDeprecated) + } + if hasInvocationID { if p.coldstartSpan == nil { p.faasExecution = &faasExecution{ span: ptrace.NewSpan(),