From 69a5a5274e2fe46056ce88b6d11d28bd650a91c2 Mon Sep 17 00:00:00 2001 From: Andrew Wilkins Date: Wed, 17 Sep 2025 10:28:16 +0800 Subject: [PATCH 1/2] Make telemetry register with zpages Instead of having zpagesextension register a zpages span processor on the tracer provider, make this the responsibility of the telemetry implementation. To make this happen, the service now creates the zpages mux and exposes it as a host capability. Components may register their own zpages routes, which the zpagesextension does for exposing expvar; and otherwise the zpagesextension just exists to expose the HTTP endpoint. --- cmd/otelcorecol/go.mod | 2 +- component/componentstatus/go.mod | 2 - component/go.mod | 2 - config/configauth/go.mod | 2 - config/configmiddleware/go.mod | 2 - connector/go.mod | 2 - connector/xconnector/go.mod | 2 - exporter/go.mod | 2 - exporter/xexporter/go.mod | 2 - .../extensionauth/extensionauthtest/go.mod | 2 - extension/extensioncapabilities/go.mod | 2 - .../extensionmiddlewaretest/go.mod | 2 - extension/go.mod | 2 - extension/xextension/go.mod | 2 - extension/zpagesextension/go.mod | 23 ++- extension/zpagesextension/go.sum | 24 +-- extension/zpagesextension/zpagesextension.go | 73 ++----- .../zpagesextension/zpagesextension_test.go | 179 ++++++------------ internal/e2e/go.mod | 1 + internal/memorylimiter/go.mod | 2 - .../componentattribute/tracer_provider.go | 21 +- otelcol/go.mod | 1 + otelcol/otelcoltest/go.mod | 1 + processor/go.mod | 2 - processor/xprocessor/go.mod | 2 - receiver/go.mod | 2 - receiver/xreceiver/go.mod | 2 - service/go.mod | 2 +- service/hostcapabilities/go.mod | 2 - service/hostcapabilities/interfaces.go | 22 +++ service/internal/graph/host.go | 31 +-- service/service.go | 11 +- service/telemetry/otelconftelemetry/tracer.go | 24 ++- .../otelconftelemetry/tracer_test.go | 13 ++ service/telemetry/telemetry.go | 9 + 35 files changed, 200 insertions(+), 275 deletions(-) diff --git a/cmd/otelcorecol/go.mod b/cmd/otelcorecol/go.mod index 3f25ddb0286..a8a9c35a1a3 100644 --- a/cmd/otelcorecol/go.mod +++ b/cmd/otelcorecol/go.mod @@ -4,7 +4,7 @@ module go.opentelemetry.io/collector/cmd/otelcorecol go 1.24.0 -toolchain go1.24.7 +toolchain go1.24.8 require ( go.opentelemetry.io/collector/component v1.43.0 diff --git a/component/componentstatus/go.mod b/component/componentstatus/go.mod index 264796369a2..ab8fce7ef4a 100644 --- a/component/componentstatus/go.mod +++ b/component/componentstatus/go.mod @@ -14,7 +14,6 @@ require ( github.com/go-logr/logr v1.4.3 // indirect github.com/go-logr/stdr v1.2.2 // indirect github.com/gogo/protobuf v1.3.2 // indirect - github.com/google/uuid v1.6.0 // indirect github.com/hashicorp/go-version v1.7.0 // indirect github.com/json-iterator/go v1.1.12 // indirect github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect @@ -27,7 +26,6 @@ require ( go.opentelemetry.io/otel v1.38.0 // indirect go.opentelemetry.io/otel/log v0.14.0 // indirect go.opentelemetry.io/otel/metric v1.38.0 // indirect - go.opentelemetry.io/otel/sdk v1.38.0 // indirect go.opentelemetry.io/otel/trace v1.38.0 // indirect go.uber.org/multierr v1.11.0 // indirect go.uber.org/zap v1.27.0 // indirect diff --git a/component/go.mod b/component/go.mod index fc7d698ec09..b692acd73c4 100644 --- a/component/go.mod +++ b/component/go.mod @@ -13,7 +13,6 @@ require ( github.com/go-logr/logr v1.4.3 // indirect github.com/go-logr/stdr v1.2.2 // indirect github.com/gogo/protobuf v1.3.2 // indirect - github.com/google/uuid v1.6.0 // indirect github.com/hashicorp/go-version v1.7.0 // indirect github.com/json-iterator/go v1.1.12 // indirect github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect @@ -26,7 +25,6 @@ require ( go.opentelemetry.io/otel v1.38.0 // indirect go.opentelemetry.io/otel/log v0.14.0 // indirect go.opentelemetry.io/otel/metric v1.38.0 // indirect - go.opentelemetry.io/otel/sdk v1.38.0 // indirect go.opentelemetry.io/otel/trace v1.38.0 // indirect go.uber.org/multierr v1.11.0 // indirect go.uber.org/zap v1.27.0 // indirect diff --git a/config/configauth/go.mod b/config/configauth/go.mod index a89b1a99d9a..00a2b3f7ade 100644 --- a/config/configauth/go.mod +++ b/config/configauth/go.mod @@ -16,7 +16,6 @@ require ( github.com/go-logr/logr v1.4.3 // indirect github.com/go-logr/stdr v1.2.2 // indirect github.com/gogo/protobuf v1.3.2 // indirect - github.com/google/uuid v1.6.0 // indirect github.com/hashicorp/go-version v1.7.0 // indirect github.com/json-iterator/go v1.1.12 // indirect github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect @@ -30,7 +29,6 @@ require ( go.opentelemetry.io/otel v1.38.0 // indirect go.opentelemetry.io/otel/log v0.14.0 // indirect go.opentelemetry.io/otel/metric v1.38.0 // indirect - go.opentelemetry.io/otel/sdk v1.38.0 // indirect go.opentelemetry.io/otel/trace v1.38.0 // indirect go.uber.org/multierr v1.11.0 // indirect go.uber.org/zap v1.27.0 // indirect diff --git a/config/configmiddleware/go.mod b/config/configmiddleware/go.mod index 0d4fab5b306..8c6c8f9d9b8 100644 --- a/config/configmiddleware/go.mod +++ b/config/configmiddleware/go.mod @@ -16,7 +16,6 @@ require ( github.com/go-logr/logr v1.4.3 // indirect github.com/go-logr/stdr v1.2.2 // indirect github.com/gogo/protobuf v1.3.2 // indirect - github.com/google/uuid v1.6.0 // indirect github.com/hashicorp/go-version v1.7.0 // indirect github.com/json-iterator/go v1.1.12 // indirect github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect @@ -30,7 +29,6 @@ require ( go.opentelemetry.io/otel v1.38.0 // indirect go.opentelemetry.io/otel/log v0.14.0 // indirect go.opentelemetry.io/otel/metric v1.38.0 // indirect - go.opentelemetry.io/otel/sdk v1.38.0 // indirect go.opentelemetry.io/otel/trace v1.38.0 // indirect go.uber.org/multierr v1.11.0 // indirect go.uber.org/zap v1.27.0 // indirect diff --git a/connector/go.mod b/connector/go.mod index a79b8fa7b25..25366cbe887 100644 --- a/connector/go.mod +++ b/connector/go.mod @@ -20,7 +20,6 @@ require ( github.com/go-logr/logr v1.4.3 // indirect github.com/go-logr/stdr v1.2.2 // indirect github.com/gogo/protobuf v1.3.2 // indirect - github.com/google/uuid v1.6.0 // indirect github.com/hashicorp/go-version v1.7.0 // indirect github.com/json-iterator/go v1.1.12 // indirect github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect @@ -35,7 +34,6 @@ require ( go.opentelemetry.io/otel v1.38.0 // indirect go.opentelemetry.io/otel/log v0.14.0 // indirect go.opentelemetry.io/otel/metric v1.38.0 // indirect - go.opentelemetry.io/otel/sdk v1.38.0 // indirect go.opentelemetry.io/otel/trace v1.38.0 // indirect go.uber.org/zap v1.27.0 // indirect golang.org/x/net v0.42.0 // indirect diff --git a/connector/xconnector/go.mod b/connector/xconnector/go.mod index 9d2bc5e95d4..948f24c87c0 100644 --- a/connector/xconnector/go.mod +++ b/connector/xconnector/go.mod @@ -21,7 +21,6 @@ require ( github.com/go-logr/logr v1.4.3 // indirect github.com/go-logr/stdr v1.2.2 // indirect github.com/gogo/protobuf v1.3.2 // indirect - github.com/google/uuid v1.6.0 // indirect github.com/hashicorp/go-version v1.7.0 // indirect github.com/json-iterator/go v1.1.12 // indirect github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect @@ -35,7 +34,6 @@ require ( go.opentelemetry.io/otel v1.38.0 // indirect go.opentelemetry.io/otel/log v0.14.0 // indirect go.opentelemetry.io/otel/metric v1.38.0 // indirect - go.opentelemetry.io/otel/sdk v1.38.0 // indirect go.opentelemetry.io/otel/trace v1.38.0 // indirect go.uber.org/multierr v1.11.0 // indirect go.uber.org/zap v1.27.0 // indirect diff --git a/exporter/go.mod b/exporter/go.mod index 98c50853219..7341452f1d3 100644 --- a/exporter/go.mod +++ b/exporter/go.mod @@ -23,7 +23,6 @@ require ( github.com/go-viper/mapstructure/v2 v2.4.0 // indirect github.com/gobwas/glob v0.2.3 // indirect github.com/gogo/protobuf v1.3.2 // indirect - github.com/google/uuid v1.6.0 // indirect github.com/hashicorp/go-version v1.7.0 // indirect github.com/json-iterator/go v1.1.12 // indirect github.com/knadh/koanf/maps v0.1.2 // indirect @@ -51,7 +50,6 @@ require ( go.opentelemetry.io/otel v1.38.0 // indirect go.opentelemetry.io/otel/log v0.14.0 // indirect go.opentelemetry.io/otel/metric v1.38.0 // indirect - go.opentelemetry.io/otel/sdk v1.38.0 // indirect go.opentelemetry.io/otel/trace v1.38.0 // indirect go.uber.org/multierr v1.11.0 // indirect go.yaml.in/yaml/v3 v3.0.4 // indirect diff --git a/exporter/xexporter/go.mod b/exporter/xexporter/go.mod index 6313d6af4a8..b5123545e83 100644 --- a/exporter/xexporter/go.mod +++ b/exporter/xexporter/go.mod @@ -16,7 +16,6 @@ require ( github.com/go-logr/logr v1.4.3 // indirect github.com/go-logr/stdr v1.2.2 // indirect github.com/gogo/protobuf v1.3.2 // indirect - github.com/google/uuid v1.6.0 // indirect github.com/hashicorp/go-version v1.7.0 // indirect github.com/json-iterator/go v1.1.12 // indirect github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect @@ -32,7 +31,6 @@ require ( go.opentelemetry.io/otel v1.38.0 // indirect go.opentelemetry.io/otel/log v0.14.0 // indirect go.opentelemetry.io/otel/metric v1.38.0 // indirect - go.opentelemetry.io/otel/sdk v1.38.0 // indirect go.opentelemetry.io/otel/trace v1.38.0 // indirect go.uber.org/multierr v1.11.0 // indirect go.uber.org/zap v1.27.0 // indirect diff --git a/extension/extensionauth/extensionauthtest/go.mod b/extension/extensionauth/extensionauthtest/go.mod index a13420a533f..ccebe2e61b5 100644 --- a/extension/extensionauth/extensionauthtest/go.mod +++ b/extension/extensionauth/extensionauthtest/go.mod @@ -16,7 +16,6 @@ require ( github.com/go-logr/logr v1.4.3 // indirect github.com/go-logr/stdr v1.2.2 // indirect github.com/gogo/protobuf v1.3.2 // indirect - github.com/google/uuid v1.6.0 // indirect github.com/hashicorp/go-version v1.7.0 // indirect github.com/json-iterator/go v1.1.12 // indirect github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect @@ -30,7 +29,6 @@ require ( go.opentelemetry.io/otel v1.38.0 // indirect go.opentelemetry.io/otel/log v0.14.0 // indirect go.opentelemetry.io/otel/metric v1.38.0 // indirect - go.opentelemetry.io/otel/sdk v1.38.0 // indirect go.opentelemetry.io/otel/trace v1.38.0 // indirect go.uber.org/multierr v1.11.0 // indirect go.uber.org/zap v1.27.0 // indirect diff --git a/extension/extensioncapabilities/go.mod b/extension/extensioncapabilities/go.mod index d038511de0d..d8b92cd66e7 100644 --- a/extension/extensioncapabilities/go.mod +++ b/extension/extensioncapabilities/go.mod @@ -14,7 +14,6 @@ require ( github.com/go-viper/mapstructure/v2 v2.4.0 // indirect github.com/gobwas/glob v0.2.3 // indirect github.com/gogo/protobuf v1.3.2 // indirect - github.com/google/uuid v1.6.0 // indirect github.com/hashicorp/go-version v1.7.0 // indirect github.com/json-iterator/go v1.1.12 // indirect github.com/knadh/koanf/maps v0.1.2 // indirect @@ -32,7 +31,6 @@ require ( go.opentelemetry.io/otel v1.38.0 // indirect go.opentelemetry.io/otel/log v0.14.0 // indirect go.opentelemetry.io/otel/metric v1.38.0 // indirect - go.opentelemetry.io/otel/sdk v1.38.0 // indirect go.opentelemetry.io/otel/trace v1.38.0 // indirect go.uber.org/multierr v1.11.0 // indirect go.uber.org/zap v1.27.0 // indirect diff --git a/extension/extensionmiddleware/extensionmiddlewaretest/go.mod b/extension/extensionmiddleware/extensionmiddlewaretest/go.mod index a6c2ec81c9b..0b23da486ed 100644 --- a/extension/extensionmiddleware/extensionmiddlewaretest/go.mod +++ b/extension/extensionmiddleware/extensionmiddlewaretest/go.mod @@ -15,7 +15,6 @@ require ( github.com/go-logr/logr v1.4.3 // indirect github.com/go-logr/stdr v1.2.2 // indirect github.com/gogo/protobuf v1.3.2 // indirect - github.com/google/uuid v1.6.0 // indirect github.com/hashicorp/go-version v1.7.0 // indirect github.com/json-iterator/go v1.1.12 // indirect github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect @@ -29,7 +28,6 @@ require ( go.opentelemetry.io/otel v1.38.0 // indirect go.opentelemetry.io/otel/log v0.14.0 // indirect go.opentelemetry.io/otel/metric v1.38.0 // indirect - go.opentelemetry.io/otel/sdk v1.38.0 // indirect go.opentelemetry.io/otel/trace v1.38.0 // indirect go.uber.org/multierr v1.11.0 // indirect go.uber.org/zap v1.27.0 // indirect diff --git a/extension/go.mod b/extension/go.mod index bbb784f8cce..90f5e59d0ee 100644 --- a/extension/go.mod +++ b/extension/go.mod @@ -13,7 +13,6 @@ require ( github.com/go-logr/logr v1.4.3 // indirect github.com/go-logr/stdr v1.2.2 // indirect github.com/gogo/protobuf v1.3.2 // indirect - github.com/google/uuid v1.6.0 // indirect github.com/hashicorp/go-version v1.7.0 // indirect github.com/json-iterator/go v1.1.12 // indirect github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect @@ -27,7 +26,6 @@ require ( go.opentelemetry.io/otel v1.38.0 // indirect go.opentelemetry.io/otel/log v0.14.0 // indirect go.opentelemetry.io/otel/metric v1.38.0 // indirect - go.opentelemetry.io/otel/sdk v1.38.0 // indirect go.opentelemetry.io/otel/trace v1.38.0 // indirect go.uber.org/multierr v1.11.0 // indirect go.uber.org/zap v1.27.0 // indirect diff --git a/extension/xextension/go.mod b/extension/xextension/go.mod index d8220be3a3d..8e3e207b11c 100644 --- a/extension/xextension/go.mod +++ b/extension/xextension/go.mod @@ -11,7 +11,6 @@ require ( github.com/go-logr/logr v1.4.3 // indirect github.com/go-logr/stdr v1.2.2 // indirect github.com/gogo/protobuf v1.3.2 // indirect - github.com/google/uuid v1.6.0 // indirect github.com/hashicorp/go-version v1.7.0 // indirect github.com/json-iterator/go v1.1.12 // indirect github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect @@ -24,7 +23,6 @@ require ( go.opentelemetry.io/otel v1.38.0 // indirect go.opentelemetry.io/otel/log v0.14.0 // indirect go.opentelemetry.io/otel/metric v1.38.0 // indirect - go.opentelemetry.io/otel/sdk v1.38.0 // indirect go.opentelemetry.io/otel/trace v1.38.0 // indirect go.uber.org/multierr v1.11.0 // indirect go.uber.org/zap v1.27.0 // indirect diff --git a/extension/zpagesextension/go.mod b/extension/zpagesextension/go.mod index 256362e6949..494bb1f4738 100644 --- a/extension/zpagesextension/go.mod +++ b/extension/zpagesextension/go.mod @@ -8,15 +8,11 @@ require ( go.opentelemetry.io/collector/component v1.43.0 go.opentelemetry.io/collector/component/componentstatus v0.137.0 go.opentelemetry.io/collector/component/componenttest v0.137.0 - go.opentelemetry.io/collector/config/configauth v1.43.0 go.opentelemetry.io/collector/config/confighttp v0.137.0 - go.opentelemetry.io/collector/config/configoptional v1.43.0 go.opentelemetry.io/collector/confmap v1.43.0 go.opentelemetry.io/collector/extension v1.43.0 go.opentelemetry.io/collector/extension/extensiontest v0.137.0 - go.opentelemetry.io/contrib/zpages v0.63.0 - go.opentelemetry.io/otel/sdk v1.38.0 - go.opentelemetry.io/otel/trace v1.38.0 + go.opentelemetry.io/collector/service/hostcapabilities v0.137.0 go.uber.org/goleak v1.3.0 go.uber.org/zap v1.27.0 ) @@ -49,9 +45,11 @@ require ( github.com/rs/cors v1.11.1 // indirect go.opentelemetry.io/auto/sdk v1.1.0 // indirect go.opentelemetry.io/collector/client v1.43.0 // indirect + go.opentelemetry.io/collector/config/configauth v1.43.0 // indirect go.opentelemetry.io/collector/config/configcompression v1.43.0 // indirect go.opentelemetry.io/collector/config/configmiddleware v1.43.0 // indirect go.opentelemetry.io/collector/config/configopaque v1.43.0 // indirect + go.opentelemetry.io/collector/config/configoptional v1.43.0 // indirect go.opentelemetry.io/collector/config/configtls v1.43.0 // indirect go.opentelemetry.io/collector/confmap/xconfmap v0.137.0 // indirect go.opentelemetry.io/collector/extension/extensionauth v1.43.0 // indirect @@ -60,19 +58,22 @@ require ( go.opentelemetry.io/collector/internal/telemetry v0.137.0 // indirect go.opentelemetry.io/collector/pdata v1.43.0 // indirect go.opentelemetry.io/collector/pipeline v1.43.0 // indirect + go.opentelemetry.io/collector/service v0.137.0 // indirect go.opentelemetry.io/contrib/bridges/otelzap v0.13.0 // indirect go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.63.0 // indirect go.opentelemetry.io/otel v1.38.0 // indirect go.opentelemetry.io/otel/log v0.14.0 // indirect go.opentelemetry.io/otel/metric v1.38.0 // indirect + go.opentelemetry.io/otel/sdk v1.38.0 // indirect go.opentelemetry.io/otel/sdk/metric v1.38.0 // indirect + go.opentelemetry.io/otel/trace v1.38.0 // indirect go.uber.org/multierr v1.11.0 // indirect go.yaml.in/yaml/v3 v3.0.4 // indirect - golang.org/x/crypto v0.41.0 // indirect - golang.org/x/net v0.43.0 // indirect - golang.org/x/sys v0.35.0 // indirect - golang.org/x/text v0.28.0 // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20250804133106-a7a43d27e69b // indirect + golang.org/x/crypto v0.42.0 // indirect + golang.org/x/net v0.44.0 // indirect + golang.org/x/sys v0.36.0 // indirect + golang.org/x/text v0.29.0 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20250825161204-c5933d9347a5 // indirect google.golang.org/grpc v1.76.0 // indirect google.golang.org/protobuf v1.36.10 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect @@ -132,3 +133,5 @@ replace go.opentelemetry.io/collector/config/configmiddleware => ../../config/co replace go.opentelemetry.io/collector/extension/extensionmiddleware/extensionmiddlewaretest => ../extensionmiddleware/extensionmiddlewaretest replace go.opentelemetry.io/collector/confmap/xconfmap => ../../confmap/xconfmap + +replace go.opentelemetry.io/collector/service/hostcapabilities => ../../service/hostcapabilities diff --git a/extension/zpagesextension/go.sum b/extension/zpagesextension/go.sum index a1e86240b15..da278740889 100644 --- a/extension/zpagesextension/go.sum +++ b/extension/zpagesextension/go.sum @@ -77,12 +77,12 @@ github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9de github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= go.opentelemetry.io/auto/sdk v1.1.0 h1:cH53jehLUN6UFLY71z+NDOiNJqDdPRaXzTel0sJySYA= go.opentelemetry.io/auto/sdk v1.1.0/go.mod h1:3wSPjt5PWp2RhlCcmmOial7AvC4DQqZb7a7wCow3W8A= +go.opentelemetry.io/collector/service v0.137.0 h1:I2SUiVjj79CVx45EjF/7Z8WPSFXz8C8UJG+Ugfwl9Eg= +go.opentelemetry.io/collector/service v0.137.0/go.mod h1:BK2rGpbFNXH9IaJqnpv14z/oz1gpDAftoYKZSuwLFPc= go.opentelemetry.io/contrib/bridges/otelzap v0.13.0 h1:aBKdhLVieqvwWe9A79UHI/0vgp2t/s2euY8X59pGRlw= go.opentelemetry.io/contrib/bridges/otelzap v0.13.0/go.mod h1:SYqtxLQE7iINgh6WFuVi2AI70148B8EI35DSk0Wr8m4= go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.63.0 h1:RbKq8BG0FI8OiXhBfcRtqqHcZcka+gU3cskNuf05R18= go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.63.0/go.mod h1:h06DGIukJOevXaj/xrNjhi/2098RZzcLTbc0jDAUbsg= -go.opentelemetry.io/contrib/zpages v0.63.0 h1:TppOKuZGbqXMgsfjqq3i09N5Vbo1JLtLImUqiTPGnX4= -go.opentelemetry.io/contrib/zpages v0.63.0/go.mod h1:5F8uugz75ay/MMhRRhxAXY33FuaI8dl7jTxefrIy5qk= go.opentelemetry.io/otel v1.38.0 h1:RkfdswUDRimDg0m2Az18RKOsnI8UDzppJAtj01/Ymk8= go.opentelemetry.io/otel v1.38.0/go.mod h1:zcmtmQ1+YmQM9wrNsTGV/q/uyusom3P8RxwExxkZhjM= go.opentelemetry.io/otel/log v0.14.0 h1:2rzJ+pOAZ8qmZ3DDHg73NEKzSZkhkGIua9gXtxNGgrM= @@ -114,28 +114,28 @@ go.yaml.in/yaml/v3 v3.0.4/go.mod h1:DhzuOOF2ATzADvBadXxruRBLzYTpT36CKvDb3+aBEFg= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.41.0 h1:WKYxWedPGCTVVl5+WHSSrOBT0O8lx32+zxmHxijgXp4= -golang.org/x/crypto v0.41.0/go.mod h1:pO5AFd7FA68rFak7rOAGVuygIISepHftHnr8dr6+sUc= +golang.org/x/crypto v0.42.0 h1:chiH31gIWm57EkTXpwnqf8qeuMUi0yekh6mT2AvFlqI= +golang.org/x/crypto v0.42.0/go.mod h1:4+rDnOTJhQCx2q7/j6rAN5XDw8kPjeaXEUR2eL94ix8= golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.43.0 h1:lat02VYK2j4aLzMzecihNvTlJNQUq316m2Mr9rnM6YE= -golang.org/x/net v0.43.0/go.mod h1:vhO1fvI4dGsIjh73sWfUVjj3N7CA9WkKJNQm2svM6Jg= +golang.org/x/net v0.44.0 h1:evd8IRDyfNBMBTTY5XRF1vaZlD+EmWx6x8PkhR04H/I= +golang.org/x/net v0.44.0/go.mod h1:ECOoLqd5U3Lhyeyo/QDCEVQ4sNgYsqvCZ722XogGieY= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.35.0 h1:vz1N37gP5bs89s7He8XuIYXpyY0+QlsKmzipCbUtyxI= -golang.org/x/sys v0.35.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= +golang.org/x/sys v0.36.0 h1:KVRy2GtZBrk1cBYA7MKu5bEZFxQk4NIDV6RLVcC8o0k= +golang.org/x/sys v0.36.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.28.0 h1:rhazDwis8INMIwQ4tpjLDzUhx6RlXqZNPEM0huQojng= -golang.org/x/text v0.28.0/go.mod h1:U8nCwOR8jO/marOQ0QbDiOngZVEBB7MAiitBuMjXiNU= +golang.org/x/text v0.29.0 h1:1neNs90w9YzJ9BocxfsQNHKuAT4pkghyXc4nhZ6sJvk= +golang.org/x/text v0.29.0/go.mod h1:7MhJOA9CD2qZyOKYazxdYMF85OwPdEr9jTtBpO7ydH4= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= @@ -146,8 +146,8 @@ golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8T golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= gonum.org/v1/gonum v0.16.0 h1:5+ul4Swaf3ESvrOnidPp4GZbzf0mxVQpDCYUQE7OJfk= gonum.org/v1/gonum v0.16.0/go.mod h1:fef3am4MQ93R2HHpKnLk4/Tbh/s0+wqD5nfa6Pnwy4E= -google.golang.org/genproto/googleapis/rpc v0.0.0-20250804133106-a7a43d27e69b h1:zPKJod4w6F1+nRGDI9ubnXYhU9NSWoFAijkHkUXeTK8= -google.golang.org/genproto/googleapis/rpc v0.0.0-20250804133106-a7a43d27e69b/go.mod h1:qQ0YXyHHx3XkvlzUtpXDkS29lDSafHMZBAZDc03LQ3A= +google.golang.org/genproto/googleapis/rpc v0.0.0-20250825161204-c5933d9347a5 h1:eaY8u2EuxbRv7c3NiGK0/NedzVsCcV6hDuU5qPX5EGE= +google.golang.org/genproto/googleapis/rpc v0.0.0-20250825161204-c5933d9347a5/go.mod h1:M4/wBTSeyLxupu3W3tJtOgB14jILAS/XWPSSa3TAlJc= google.golang.org/grpc v1.76.0 h1:UnVkv1+uMLYXoIz6o7chp59WfQUYA2ex/BXQ9rHZu7A= google.golang.org/grpc v1.76.0/go.mod h1:Ju12QI8M6iQJtbcsV+awF5a4hfJMLi4X0JLo94ULZ6c= google.golang.org/protobuf v1.36.10 h1:AYd7cD/uASjIL6Q9LiTjz8JLcrh/88q5UObnmY3aOOE= diff --git a/extension/zpagesextension/zpagesextension.go b/extension/zpagesextension/zpagesextension.go index 107ba962ba0..b77837ceff1 100644 --- a/extension/zpagesextension/zpagesextension.go +++ b/extension/zpagesextension/zpagesextension.go @@ -8,71 +8,40 @@ import ( "errors" "expvar" "net/http" - "path" - "go.opentelemetry.io/contrib/zpages" - "go.opentelemetry.io/otel/sdk/trace" "go.uber.org/zap" "go.opentelemetry.io/collector/component" "go.opentelemetry.io/collector/component/componentstatus" + "go.opentelemetry.io/collector/service/hostcapabilities" ) const ( - tracezPath = "tracez" - expvarzPath = "expvarz" + expvarzPath = "/debug/expvarz" ) type zpagesExtension struct { - config *Config - telemetry component.TelemetrySettings - zpagesSpanProcessor *zpages.SpanProcessor - server *http.Server - stopCh chan struct{} -} - -// registerableTracerProvider is a tracer that supports -// the SDK methods RegisterSpanProcessor and UnregisterSpanProcessor. -// -// We use an interface instead of casting to the SDK tracer type to support tracer providers -// that extend the SDK. -type registerableTracerProvider interface { - // RegisterSpanProcessor adds the given SpanProcessor to the list of SpanProcessors. - // https://pkg.go.dev/go.opentelemetry.io/otel/sdk/trace#TracerProvider.RegisterSpanProcessor. - RegisterSpanProcessor(SpanProcessor trace.SpanProcessor) - - // UnregisterSpanProcessor removes the given SpanProcessor from the list of SpanProcessors. - // https://pkg.go.dev/go.opentelemetry.io/otel/sdk/trace#TracerProvider.UnregisterSpanProcessor. - UnregisterSpanProcessor(SpanProcessor trace.SpanProcessor) + config *Config + telemetry component.TelemetrySettings + server *http.Server + stopCh chan struct{} } func (zpe *zpagesExtension) Start(ctx context.Context, host component.Host) error { - zPagesMux := http.NewServeMux() - - sdktracer, ok := zpe.telemetry.TracerProvider.(registerableTracerProvider) - if ok { - sdktracer.RegisterSpanProcessor(zpe.zpagesSpanProcessor) - zPagesMux.Handle(path.Join("/debug", tracezPath), zpages.NewTracezHandler(zpe.zpagesSpanProcessor)) - zpe.telemetry.Logger.Info("Registered zPages span processor on tracer provider") - } else { - zpe.telemetry.Logger.Warn("zPages span processor registration is not available") + var zPagesMux *http.ServeMux + if zpagesHost, ok := host.(hostcapabilities.ZPages); ok { + zPagesMux = zpagesHost.GetZPagesMux() + } + if zPagesMux == nil { + zpe.telemetry.Logger.Debug("host does not provide a zPages mux, creating one") + zPagesMux = http.NewServeMux() } if zpe.config.Expvar.Enabled { - zPagesMux.Handle(path.Join("/debug", expvarzPath), expvar.Handler()) + zPagesMux.Handle(expvarzPath, expvar.Handler()) zpe.telemetry.Logger.Info("Registered zPages expvar handler") } - hostZPages, ok := host.(interface { - RegisterZPages(mux *http.ServeMux, pathPrefix string) - }) - if ok { - hostZPages.RegisterZPages(zPagesMux, "/debug") - zpe.telemetry.Logger.Info("Registered Host's zPages") - } else { - zpe.telemetry.Logger.Warn("Host's zPages not available") - } - // Start the listener here so we can have earlier failure if port is // already in use. ln, err := zpe.config.ToListener(ctx) @@ -105,22 +74,12 @@ func (zpe *zpagesExtension) Shutdown(context.Context) error { if zpe.stopCh != nil { <-zpe.stopCh } - - sdktracer, ok := zpe.telemetry.TracerProvider.(registerableTracerProvider) - if ok { - sdktracer.UnregisterSpanProcessor(zpe.zpagesSpanProcessor) - zpe.telemetry.Logger.Info("Unregistered zPages span processor on tracer provider") - } else { - zpe.telemetry.Logger.Warn("zPages span processor registration is not available") - } - return err } func newServer(config *Config, telemetry component.TelemetrySettings) *zpagesExtension { return &zpagesExtension{ - config: config, - telemetry: telemetry, - zpagesSpanProcessor: zpages.NewSpanProcessor(), + config: config, + telemetry: telemetry, } } diff --git a/extension/zpagesextension/zpagesextension_test.go b/extension/zpagesextension/zpagesextension_test.go index 75da997e678..a4f61ec6bd2 100644 --- a/extension/zpagesextension/zpagesextension_test.go +++ b/extension/zpagesextension/zpagesextension_test.go @@ -5,108 +5,83 @@ package zpagesextension import ( "context" - "net" "net/http" - "runtime" "testing" "github.com/stretchr/testify/require" - sdktrace "go.opentelemetry.io/otel/sdk/trace" - "go.opentelemetry.io/otel/trace" "go.opentelemetry.io/collector/component" "go.opentelemetry.io/collector/component/componenttest" - "go.opentelemetry.io/collector/config/configauth" "go.opentelemetry.io/collector/config/confighttp" - "go.opentelemetry.io/collector/config/configoptional" "go.opentelemetry.io/collector/internal/testutil" ) type zpagesHost struct { component.Host + mux *http.ServeMux } func newZPagesHost() *zpagesHost { - return &zpagesHost{Host: componenttest.NewNopHost()} -} - -func (*zpagesHost) RegisterZPages(*http.ServeMux, string) {} - -var ( - _ registerableTracerProvider = (*registerableProvider)(nil) - _ registerableTracerProvider = sdktrace.NewTracerProvider() -) - -type registerableProvider struct { - trace.TracerProvider + return &zpagesHost{ + Host: componenttest.NewNopHost(), + mux: http.NewServeMux(), + } } -func (*registerableProvider) RegisterSpanProcessor(sdktrace.SpanProcessor) {} -func (*registerableProvider) UnregisterSpanProcessor(sdktrace.SpanProcessor) {} - -func newZpagesTelemetrySettings() component.TelemetrySettings { - set := componenttest.NewNopTelemetrySettings() - set.TracerProvider = ®isterableProvider{set.TracerProvider} - return set +func (h *zpagesHost) GetZPagesMux() *http.ServeMux { + return h.mux } func TestZPagesExtensionUsage(t *testing.T) { - cfg := &Config{ - ServerConfig: confighttp.ServerConfig{ - Endpoint: testutil.GetAvailableLocalAddress(t), - }, + type testcase struct { + expvarEnabled bool } - zpagesExt := newServer(cfg, newZpagesTelemetrySettings()) - require.NotNil(t, zpagesExt) - - require.NoError(t, zpagesExt.Start(context.Background(), newZPagesHost())) - t.Cleanup(func() { require.NoError(t, zpagesExt.Shutdown(context.Background())) }) - - // Give a chance for the server goroutine to run. - runtime.Gosched() - - _, zpagesPort, err := net.SplitHostPort(cfg.Endpoint) - require.NoError(t, err) - - client := &http.Client{} - resp, err := client.Get("http://localhost:" + zpagesPort + "/debug/tracez") - require.NoError(t, err) - defer resp.Body.Close() - - require.Equal(t, http.StatusOK, resp.StatusCode) -} - -func TestZPagesExtensionBadAuthExtension(t *testing.T) { - cfg := &Config{ - ServerConfig: confighttp.ServerConfig{ - Endpoint: "localhost:0", - Auth: configoptional.Some(confighttp.AuthConfig{ - Config: configauth.Config{ - AuthenticatorID: component.MustNewIDWithName("foo", "bar"), - }, - }), + for name, tc := range map[string]testcase{ + "expvar disabled": { + expvarEnabled: false, }, - } - zpagesExt := newServer(cfg, newZpagesTelemetrySettings()) - require.EqualError(t, zpagesExt.Start(context.Background(), componenttest.NewNopHost()), `failed to resolve authenticator "foo/bar": authenticator not found`) -} - -func TestZPagesExtensionPortAlreadyInUse(t *testing.T) { - endpoint := testutil.GetAvailableLocalAddress(t) - ln, err := net.Listen("tcp", endpoint) - require.NoError(t, err) - defer ln.Close() - - cfg := &Config{ - ServerConfig: confighttp.ServerConfig{ - Endpoint: endpoint, + "expvar enabled": { + expvarEnabled: true, }, + } { + t.Run(name, func(t *testing.T) { + cfg := &Config{ + ServerConfig: confighttp.ServerConfig{ + Endpoint: testutil.GetAvailableLocalAddress(t), + }, + Expvar: ExpvarConfig{ + Enabled: tc.expvarEnabled, + }, + } + + zpagesExt := newServer(cfg, componenttest.NewNopTelemetrySettings()) + require.NotNil(t, zpagesExt) + + host := newZPagesHost() + host.mux.HandleFunc("/debug/tracez", func(w http.ResponseWriter, _ *http.Request) { + w.WriteHeader(http.StatusTeapot) + }) + require.NoError(t, zpagesExt.Start(t.Context(), host)) + t.Cleanup(func() { + require.NoError(t, zpagesExt.Shutdown(context.WithoutCancel(t.Context()))) + }) + + resp, err := http.Get("http://" + cfg.Endpoint + "/debug/tracez") + require.NoError(t, err) + defer resp.Body.Close() + require.Equal(t, http.StatusTeapot, resp.StatusCode) + + resp, err = http.Get("http://" + cfg.Endpoint + "/debug/expvarz") + require.NoError(t, err) + defer resp.Body.Close() + if tc.expvarEnabled { + require.Equal(t, http.StatusOK, resp.StatusCode) + } else { + require.Equal(t, http.StatusNotFound, resp.StatusCode) + } + }) } - zpagesExt := newServer(cfg, newZpagesTelemetrySettings()) - require.NotNil(t, zpagesExt) - - require.Error(t, zpagesExt.Start(context.Background(), componenttest.NewNopHost())) } func TestZPagesMultipleStarts(t *testing.T) { @@ -116,14 +91,15 @@ func TestZPagesMultipleStarts(t *testing.T) { }, } - zpagesExt := newServer(cfg, newZpagesTelemetrySettings()) + zpagesExt := newServer(cfg, componenttest.NewNopTelemetrySettings()) require.NotNil(t, zpagesExt) - require.NoError(t, zpagesExt.Start(context.Background(), componenttest.NewNopHost())) + host := newZPagesHost() + require.NoError(t, zpagesExt.Start(context.Background(), host)) t.Cleanup(func() { require.NoError(t, zpagesExt.Shutdown(context.Background())) }) // Try to start it again, it will fail since it is on the same endpoint. - require.Error(t, zpagesExt.Start(context.Background(), componenttest.NewNopHost())) + require.Error(t, zpagesExt.Start(context.Background(), host)) } func TestZPagesMultipleShutdowns(t *testing.T) { @@ -133,53 +109,10 @@ func TestZPagesMultipleShutdowns(t *testing.T) { }, } - zpagesExt := newServer(cfg, newZpagesTelemetrySettings()) + zpagesExt := newServer(cfg, componenttest.NewNopTelemetrySettings()) require.NotNil(t, zpagesExt) require.NoError(t, zpagesExt.Start(context.Background(), componenttest.NewNopHost())) require.NoError(t, zpagesExt.Shutdown(context.Background())) require.NoError(t, zpagesExt.Shutdown(context.Background())) } - -func TestZPagesShutdownWithoutStart(t *testing.T) { - cfg := &Config{ - ServerConfig: confighttp.ServerConfig{ - Endpoint: testutil.GetAvailableLocalAddress(t), - }, - } - - zpagesExt := newServer(cfg, newZpagesTelemetrySettings()) - require.NotNil(t, zpagesExt) - - require.NoError(t, zpagesExt.Shutdown(context.Background())) -} - -func TestZPagesEnableExpvar(t *testing.T) { - cfg := &Config{ - ServerConfig: confighttp.ServerConfig{ - Endpoint: testutil.GetAvailableLocalAddress(t), - }, - Expvar: ExpvarConfig{ - Enabled: true, - }, - } - - zpagesExt := newServer(cfg, newZpagesTelemetrySettings()) - require.NotNil(t, zpagesExt) - - require.NoError(t, zpagesExt.Start(context.Background(), newZPagesHost())) - t.Cleanup(func() { require.NoError(t, zpagesExt.Shutdown(context.Background())) }) - - // Give a chance for the server goroutine to run. - runtime.Gosched() - - _, zpagesPort, err := net.SplitHostPort(cfg.Endpoint) - require.NoError(t, err) - - client := &http.Client{} - resp, err := client.Get("http://localhost:" + zpagesPort + "/debug/expvarz") - require.NoError(t, err) - defer resp.Body.Close() - - require.Equal(t, http.StatusOK, resp.StatusCode) -} diff --git a/internal/e2e/go.mod b/internal/e2e/go.mod index ee79e4c3777..a80ab75b6ae 100644 --- a/internal/e2e/go.mod +++ b/internal/e2e/go.mod @@ -132,6 +132,7 @@ require ( go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.63.0 // indirect go.opentelemetry.io/contrib/otelconf v0.18.0 // indirect go.opentelemetry.io/contrib/propagators/b3 v1.38.0 // indirect + go.opentelemetry.io/contrib/zpages v0.63.0 // indirect go.opentelemetry.io/otel v1.38.0 // indirect go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc v0.14.0 // indirect go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.14.0 // indirect diff --git a/internal/memorylimiter/go.mod b/internal/memorylimiter/go.mod index 02ff5ce872b..face3ecc1b6 100644 --- a/internal/memorylimiter/go.mod +++ b/internal/memorylimiter/go.mod @@ -20,7 +20,6 @@ require ( github.com/go-viper/mapstructure/v2 v2.4.0 // indirect github.com/gobwas/glob v0.2.3 // indirect github.com/gogo/protobuf v1.3.2 // indirect - github.com/google/uuid v1.6.0 // indirect github.com/hashicorp/go-version v1.7.0 // indirect github.com/json-iterator/go v1.1.12 // indirect github.com/knadh/koanf/maps v0.1.2 // indirect @@ -44,7 +43,6 @@ require ( go.opentelemetry.io/otel v1.38.0 // indirect go.opentelemetry.io/otel/log v0.14.0 // indirect go.opentelemetry.io/otel/metric v1.38.0 // indirect - go.opentelemetry.io/otel/sdk v1.38.0 // indirect go.opentelemetry.io/otel/trace v1.38.0 // indirect go.uber.org/multierr v1.11.0 // indirect go.yaml.in/yaml/v3 v3.0.4 // indirect diff --git a/internal/telemetry/componentattribute/tracer_provider.go b/internal/telemetry/componentattribute/tracer_provider.go index b2cb69404bc..9fd094a14b8 100644 --- a/internal/telemetry/componentattribute/tracer_provider.go +++ b/internal/telemetry/componentattribute/tracer_provider.go @@ -7,7 +7,6 @@ import ( "slices" "go.opentelemetry.io/otel/attribute" - sdkTrace "go.opentelemetry.io/otel/sdk/trace" "go.opentelemetry.io/otel/trace" ) @@ -16,24 +15,10 @@ type tracerProviderWithAttributes struct { attrs []attribute.KeyValue } -// Necessary for components that use SDK-only methods, such as zpagesextension -type tracerProviderWithAttributesSdk struct { - *sdkTrace.TracerProvider - attrs []attribute.KeyValue -} - // TracerProviderWithAttributes creates a TracerProvider with a new set of injected instrumentation scope attributes. func TracerProviderWithAttributes(tp trace.TracerProvider, attrs attribute.Set) trace.TracerProvider { - switch tpwa := tp.(type) { - case tracerProviderWithAttributesSdk: - tp = tpwa.TracerProvider - case tracerProviderWithAttributes: + if tpwa, ok := tp.(tracerProviderWithAttributes); ok { tp = tpwa.TracerProvider - case *sdkTrace.TracerProvider: - return tracerProviderWithAttributesSdk{ - TracerProvider: tpwa, - attrs: attrs.ToSlice(), - } } return tracerProviderWithAttributes{ TracerProvider: tp, @@ -54,7 +39,3 @@ func tracerWithAttributes(tp trace.TracerProvider, attrs []attribute.KeyValue, n func (tpwa tracerProviderWithAttributes) Tracer(name string, options ...trace.TracerOption) trace.Tracer { return tracerWithAttributes(tpwa.TracerProvider, tpwa.attrs, name, options...) } - -func (tpwa tracerProviderWithAttributesSdk) Tracer(name string, options ...trace.TracerOption) trace.Tracer { - return tracerWithAttributes(tpwa.TracerProvider, tpwa.attrs, name, options...) -} diff --git a/otelcol/go.mod b/otelcol/go.mod index 34068adb982..5c2d6b74290 100644 --- a/otelcol/go.mod +++ b/otelcol/go.mod @@ -95,6 +95,7 @@ require ( go.opentelemetry.io/collector/service/hostcapabilities v0.137.0 // indirect go.opentelemetry.io/contrib/bridges/otelzap v0.13.0 // indirect go.opentelemetry.io/contrib/propagators/b3 v1.38.0 // indirect + go.opentelemetry.io/contrib/zpages v0.63.0 // indirect go.opentelemetry.io/otel v1.38.0 // indirect go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc v0.14.0 // indirect go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.14.0 // indirect diff --git a/otelcol/otelcoltest/go.mod b/otelcol/otelcoltest/go.mod index 085edd7a058..f67c5a6c341 100644 --- a/otelcol/otelcoltest/go.mod +++ b/otelcol/otelcoltest/go.mod @@ -92,6 +92,7 @@ require ( go.opentelemetry.io/contrib/bridges/otelzap v0.13.0 // indirect go.opentelemetry.io/contrib/otelconf v0.18.0 // indirect go.opentelemetry.io/contrib/propagators/b3 v1.38.0 // indirect + go.opentelemetry.io/contrib/zpages v0.63.0 // indirect go.opentelemetry.io/otel v1.38.0 // indirect go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc v0.14.0 // indirect go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.14.0 // indirect diff --git a/processor/go.mod b/processor/go.mod index 9a506464a6b..4f311993846 100644 --- a/processor/go.mod +++ b/processor/go.mod @@ -16,7 +16,6 @@ require ( github.com/go-logr/logr v1.4.3 // indirect github.com/go-logr/stdr v1.2.2 // indirect github.com/gogo/protobuf v1.3.2 // indirect - github.com/google/uuid v1.6.0 // indirect github.com/hashicorp/go-version v1.7.0 // indirect github.com/json-iterator/go v1.1.12 // indirect github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect @@ -32,7 +31,6 @@ require ( go.opentelemetry.io/otel v1.38.0 // indirect go.opentelemetry.io/otel/log v0.14.0 // indirect go.opentelemetry.io/otel/metric v1.38.0 // indirect - go.opentelemetry.io/otel/sdk v1.38.0 // indirect go.opentelemetry.io/otel/trace v1.38.0 // indirect go.uber.org/multierr v1.11.0 // indirect go.uber.org/zap v1.27.0 // indirect diff --git a/processor/xprocessor/go.mod b/processor/xprocessor/go.mod index 23f9ace5ad0..9c85b9962b9 100644 --- a/processor/xprocessor/go.mod +++ b/processor/xprocessor/go.mod @@ -16,7 +16,6 @@ require ( github.com/go-logr/logr v1.4.3 // indirect github.com/go-logr/stdr v1.2.2 // indirect github.com/gogo/protobuf v1.3.2 // indirect - github.com/google/uuid v1.6.0 // indirect github.com/hashicorp/go-version v1.7.0 // indirect github.com/json-iterator/go v1.1.12 // indirect github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect @@ -32,7 +31,6 @@ require ( go.opentelemetry.io/otel v1.38.0 // indirect go.opentelemetry.io/otel/log v0.14.0 // indirect go.opentelemetry.io/otel/metric v1.38.0 // indirect - go.opentelemetry.io/otel/sdk v1.38.0 // indirect go.opentelemetry.io/otel/trace v1.38.0 // indirect go.uber.org/multierr v1.11.0 // indirect go.uber.org/zap v1.27.0 // indirect diff --git a/receiver/go.mod b/receiver/go.mod index f35aebdf7b2..9470b72fde9 100644 --- a/receiver/go.mod +++ b/receiver/go.mod @@ -17,7 +17,6 @@ require ( github.com/go-logr/logr v1.4.3 // indirect github.com/go-logr/stdr v1.2.2 // indirect github.com/gogo/protobuf v1.3.2 // indirect - github.com/google/uuid v1.6.0 // indirect github.com/hashicorp/go-version v1.7.0 // indirect github.com/json-iterator/go v1.1.12 // indirect github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect @@ -32,7 +31,6 @@ require ( go.opentelemetry.io/otel v1.38.0 // indirect go.opentelemetry.io/otel/log v0.14.0 // indirect go.opentelemetry.io/otel/metric v1.38.0 // indirect - go.opentelemetry.io/otel/sdk v1.38.0 // indirect go.opentelemetry.io/otel/trace v1.38.0 // indirect go.uber.org/multierr v1.11.0 // indirect go.uber.org/zap v1.27.0 // indirect diff --git a/receiver/xreceiver/go.mod b/receiver/xreceiver/go.mod index 8437bfd8cfe..325b97b06ee 100644 --- a/receiver/xreceiver/go.mod +++ b/receiver/xreceiver/go.mod @@ -16,7 +16,6 @@ require ( github.com/go-logr/logr v1.4.3 // indirect github.com/go-logr/stdr v1.2.2 // indirect github.com/gogo/protobuf v1.3.2 // indirect - github.com/google/uuid v1.6.0 // indirect github.com/hashicorp/go-version v1.7.0 // indirect github.com/json-iterator/go v1.1.12 // indirect github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect @@ -32,7 +31,6 @@ require ( go.opentelemetry.io/otel v1.38.0 // indirect go.opentelemetry.io/otel/log v0.14.0 // indirect go.opentelemetry.io/otel/metric v1.38.0 // indirect - go.opentelemetry.io/otel/sdk v1.38.0 // indirect go.opentelemetry.io/otel/trace v1.38.0 // indirect go.uber.org/multierr v1.11.0 // indirect go.uber.org/zap v1.27.0 // indirect diff --git a/service/go.mod b/service/go.mod index 36ffcf5eb30..8a72f518b25 100644 --- a/service/go.mod +++ b/service/go.mod @@ -49,6 +49,7 @@ require ( go.opentelemetry.io/collector/service/hostcapabilities v0.137.0 go.opentelemetry.io/contrib/otelconf v0.18.0 go.opentelemetry.io/contrib/propagators/b3 v1.38.0 + go.opentelemetry.io/contrib/zpages v0.63.0 go.opentelemetry.io/otel v1.38.0 go.opentelemetry.io/otel/metric v1.38.0 go.opentelemetry.io/otel/sdk v1.38.0 @@ -116,7 +117,6 @@ require ( go.opentelemetry.io/collector/extension/extensionmiddleware v0.137.0 // indirect go.opentelemetry.io/contrib/bridges/otelzap v0.13.0 // indirect go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.63.0 // indirect - go.opentelemetry.io/contrib/zpages v0.63.0 // indirect go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc v0.14.0 // indirect go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.14.0 // indirect go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.38.0 // indirect diff --git a/service/hostcapabilities/go.mod b/service/hostcapabilities/go.mod index f1dd6124eaa..0bfd131c8ae 100644 --- a/service/hostcapabilities/go.mod +++ b/service/hostcapabilities/go.mod @@ -12,7 +12,6 @@ require ( github.com/go-logr/logr v1.4.3 // indirect github.com/go-logr/stdr v1.2.2 // indirect github.com/gogo/protobuf v1.3.2 // indirect - github.com/google/uuid v1.6.0 // indirect github.com/hashicorp/go-version v1.7.0 // indirect github.com/json-iterator/go v1.1.12 // indirect github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect @@ -25,7 +24,6 @@ require ( go.opentelemetry.io/otel v1.38.0 // indirect go.opentelemetry.io/otel/log v0.14.0 // indirect go.opentelemetry.io/otel/metric v1.38.0 // indirect - go.opentelemetry.io/otel/sdk v1.38.0 // indirect go.opentelemetry.io/otel/trace v1.38.0 // indirect go.uber.org/multierr v1.11.0 // indirect go.uber.org/zap v1.27.0 // indirect diff --git a/service/hostcapabilities/interfaces.go b/service/hostcapabilities/interfaces.go index 6063cdee7d9..e8f8b95f20c 100644 --- a/service/hostcapabilities/interfaces.go +++ b/service/hostcapabilities/interfaces.go @@ -6,6 +6,8 @@ package hostcapabilities // import "go.opentelemetry.io/collector/service/hostcapabilities" import ( + "net/http" + "go.opentelemetry.io/collector/component" "go.opentelemetry.io/collector/pipeline" "go.opentelemetry.io/collector/service/internal/moduleinfo" @@ -34,3 +36,23 @@ type ComponentFactory interface { // component type GetFactory(kind component.Kind, componentType component.Type) component.Factory } + +// ZPages is an interface that may be implemented by the host to provide +// a zPages HTTP mux, for components to provide or expose diagnostics. +type ZPages interface { + // GetZPagesMux returns the zPages HTTP mux. + // + // The returned mux can be expected to handle the following routes: + // + // GET /debug/extensionz + // GET /debug/featurez + // GET /debug/pipelinez + // GET /debug/servicez + // + // If supported by the service's tracer provider, it may also handle: + // + // GET /debug/tracez + // + // Additional routes may be added to the mux by extensions. + GetZPagesMux() *http.ServeMux +} diff --git a/service/internal/graph/host.go b/service/internal/graph/host.go index 6f5f6bde356..a10b3f28d31 100644 --- a/service/internal/graph/host.go +++ b/service/internal/graph/host.go @@ -5,7 +5,6 @@ package graph // import "go.opentelemetry.io/collector/service/internal/graph" import ( "net/http" - "path" "runtime" "time" @@ -26,6 +25,7 @@ var ( _ hostcapabilities.ModuleInfo = (*Host)(nil) _ hostcapabilities.ExposeExporters = (*Host)(nil) _ hostcapabilities.ComponentFactory = (*Host)(nil) + _ hostcapabilities.ZPages = (*Host)(nil) ) type Host struct { @@ -42,7 +42,8 @@ type Host struct { Pipelines *Graph ServiceExtensions *extensions.Extensions - Reporter status.Reporter + ZPagesMux *http.ServeMux + Reporter status.Reporter } func (host *Host) GetFactory(kind component.Kind, componentType component.Type) component.Factory { @@ -88,10 +89,10 @@ func (host *Host) NotifyComponentStatusChange(source *componentstatus.InstanceID const ( // Paths - zServicePath = "servicez" - zPipelinePath = "pipelinez" - zExtensionPath = "extensionz" - zFeaturePath = "featurez" + zServicePath = "/debug/servicez" + zPipelinePath = "/debug/pipelinez" + zExtensionPath = "/debug/extensionz" + zFeaturePath = "/debug/featurez" ) // InfoVar is a singleton instance of the Info struct. @@ -107,11 +108,19 @@ func init() { } } -func (host *Host) RegisterZPages(mux *http.ServeMux, pathPrefix string) { - mux.HandleFunc(path.Join(pathPrefix, zServicePath), host.zPagesRequest) - mux.HandleFunc(path.Join(pathPrefix, zPipelinePath), host.Pipelines.HandleZPages) - mux.HandleFunc(path.Join(pathPrefix, zExtensionPath), host.ServiceExtensions.HandleZPages) - mux.HandleFunc(path.Join(pathPrefix, zFeaturePath), handleFeaturezRequest) +func (host *Host) GetZPagesMux() *http.ServeMux { + return host.ZPagesMux +} + +// RegisterZPages registers the zPages handlers on the host's ZPagesMux. +// +// This must only be called after the Pipelines and ServiceExtensions fields +// are set on the host. +func (host *Host) RegisterZPages() { + host.ZPagesMux.HandleFunc(zServicePath, host.zPagesRequest) + host.ZPagesMux.HandleFunc(zPipelinePath, host.Pipelines.HandleZPages) + host.ZPagesMux.HandleFunc(zExtensionPath, host.ServiceExtensions.HandleZPages) + host.ZPagesMux.HandleFunc(zFeaturePath, handleFeaturezRequest) } func (host *Host) zPagesRequest(w http.ResponseWriter, _ *http.Request) { diff --git a/service/service.go b/service/service.go index e97e6c5db8d..c5938c48be2 100644 --- a/service/service.go +++ b/service/service.go @@ -9,6 +9,7 @@ import ( "context" "errors" "fmt" + "net/http" "runtime" config "go.opentelemetry.io/contrib/otelconf/v0.3.0" @@ -106,6 +107,7 @@ type Service struct { // New creates a new Service, its telemetry, and Components. func New(ctx context.Context, set Settings, cfg Config) (_ *Service, resultErr error) { + zpagesMux := http.NewServeMux() srv := &Service{ buildInfo: set.BuildInfo, host: &graph.Host{ @@ -118,12 +120,16 @@ func New(ctx context.Context, set Settings, cfg Config) (_ *Service, resultErr e ModuleInfos: set.ModuleInfos, BuildInfo: set.BuildInfo, AsyncErrorChannel: set.AsyncErrorChannel, + ZPagesMux: zpagesMux, }, collectorConf: set.CollectorConf, } telemetryFactory := otelconftelemetry.NewFactory() - telemetrySettings := telemetry.Settings{BuildInfo: set.BuildInfo} + telemetrySettings := telemetry.Settings{ + BuildInfo: set.BuildInfo, + ZPagesMux: zpagesMux, + } // Create the logger & LoggerProvider first. These may be used // when creating the other telemetry providers. @@ -206,6 +212,9 @@ func New(ctx context.Context, set Settings, cfg Config) (_ *Service, resultErr e return nil, err } + // After all components are initialized, register zpages. + srv.host.RegisterZPages() + if err := proctelemetry.RegisterProcessMetrics(srv.telemetrySettings); err != nil { return nil, fmt.Errorf("failed to register process metrics: %w", err) } diff --git a/service/telemetry/otelconftelemetry/tracer.go b/service/telemetry/otelconftelemetry/tracer.go index 85972af4592..10d56a0fce7 100644 --- a/service/telemetry/otelconftelemetry/tracer.go +++ b/service/telemetry/otelconftelemetry/tracer.go @@ -10,8 +10,10 @@ import ( config "go.opentelemetry.io/contrib/otelconf/v0.3.0" "go.opentelemetry.io/contrib/propagators/b3" + "go.opentelemetry.io/contrib/zpages" "go.opentelemetry.io/otel" "go.opentelemetry.io/otel/propagation" + sdktrace "go.opentelemetry.io/otel/sdk/trace" "go.opentelemetry.io/otel/trace" "go.opentelemetry.io/otel/trace/embedded" "go.opentelemetry.io/otel/trace/noop" @@ -58,7 +60,27 @@ func createTracerProvider( if err != nil { return nil, err } - return sdk.TracerProvider().(telemetry.TracerProvider), nil + + sdktraceProvider := sdk.TracerProvider().(*sdktrace.TracerProvider) + + zpagesSpanProcessor := zpages.NewSpanProcessor() + sdktraceProvider.RegisterSpanProcessor(zpagesSpanProcessor) + set.ZPagesMux.Handle("/debug/tracez", zpages.NewTracezHandler(zpagesSpanProcessor)) + + return &withUnregisterZPages{ + TracerProvider: sdktraceProvider, + zpagesSpanProcessor: zpagesSpanProcessor, + }, nil +} + +type withUnregisterZPages struct { + *sdktrace.TracerProvider + zpagesSpanProcessor *zpages.SpanProcessor +} + +func (tp *withUnregisterZPages) Shutdown(ctx context.Context) error { + tp.UnregisterSpanProcessor(tp.zpagesSpanProcessor) + return tp.TracerProvider.Shutdown(ctx) } var errUnsupportedPropagator = errors.New("unsupported trace propagator") diff --git a/service/telemetry/otelconftelemetry/tracer_test.go b/service/telemetry/otelconftelemetry/tracer_test.go index 2830b97b961..9bd9b9cb14f 100644 --- a/service/telemetry/otelconftelemetry/tracer_test.go +++ b/service/telemetry/otelconftelemetry/tracer_test.go @@ -4,6 +4,7 @@ package otelconftelemetry // import "go.opentelemetry.io/collector/service/telemetry" import ( + "bytes" "context" "io" "net/http" @@ -44,9 +45,11 @@ func TestCreateTracerProvider(t *testing.T) { cfg.Traces.Propagators = []string{"b3", "tracecontext"} cfg.Traces.Processors = []config.SpanProcessor{newOTLPSimpleSpanProcessor(srv)} + zpagesMux := http.NewServeMux() provider, err := createTracerProvider(t.Context(), telemetry.TracerSettings{ Settings: telemetry.Settings{ BuildInfo: component.BuildInfo{Command: "otelcol", Version: "latest"}, + ZPagesMux: zpagesMux, }, }, cfg) require.NoError(t, err) @@ -62,6 +65,15 @@ func TestCreateTracerProvider(t *testing.T) { traces := received[0] require.Equal(t, 1, traces.SpanCount()) assert.Equal(t, "test_span", traces.ResourceSpans().At(0).ScopeSpans().At(0).Spans().At(0).Name()) + + // /debug/tracez should have been registered on the mux, + // and the span should be visible there. + var recorder httptest.ResponseRecorder + recorder.Body = bytes.NewBuffer(nil) + req := httptest.NewRequest(http.MethodGet, "/debug/tracez", http.NoBody) + zpagesMux.ServeHTTP(&recorder, req) + assert.Equal(t, http.StatusOK, recorder.Code) + assert.Contains(t, recorder.Body.String(), "test_span") } func TestCreateTracerProvider_Invalid(t *testing.T) { @@ -92,6 +104,7 @@ func TestCreateTracerProvider_Propagators(t *testing.T) { provider, err := createTracerProvider(t.Context(), telemetry.TracerSettings{ Settings: telemetry.Settings{ BuildInfo: component.BuildInfo{Command: "otelcol", Version: "latest"}, + ZPagesMux: http.NewServeMux(), }, }, cfg) require.NoError(t, err) diff --git a/service/telemetry/telemetry.go b/service/telemetry/telemetry.go index 22c9b388ae3..f9fc7b432e0 100644 --- a/service/telemetry/telemetry.go +++ b/service/telemetry/telemetry.go @@ -5,6 +5,7 @@ package telemetry // import "go.opentelemetry.io/collector/service/telemetry" import ( "context" + "net/http" otelconf "go.opentelemetry.io/contrib/otelconf/v0.3.0" "go.opentelemetry.io/otel/metric" @@ -64,6 +65,14 @@ type TracerSettings struct { type Settings struct { // BuildInfo contains build information about the collector. BuildInfo component.BuildInfo + + // ZPagesMux is an http.ServeMux with which telemetry providers + // may register zPages handlers. The mux will always be non-nil, + // but will not be exposed unless the zpages extension is enabled. + // + // Where possible, tracer providers should register a handler + // for "GET /debug/tracez". + ZPagesMux *http.ServeMux } // Factory is a factory interface for internal telemetry. From c53d66534c130bcdaf6359b27d6dc3ae3314a819 Mon Sep 17 00:00:00 2001 From: Andrew Wilkins Date: Wed, 8 Oct 2025 13:42:18 +0800 Subject: [PATCH 2/2] make crosslink gotidy --- extension/zpagesextension/go.mod | 58 ++++++++++++++++++++++++++++++++ extension/zpagesextension/go.sum | 2 -- 2 files changed, 58 insertions(+), 2 deletions(-) diff --git a/extension/zpagesextension/go.mod b/extension/zpagesextension/go.mod index 494bb1f4738..d7e2f1d436c 100644 --- a/extension/zpagesextension/go.mod +++ b/extension/zpagesextension/go.mod @@ -135,3 +135,61 @@ replace go.opentelemetry.io/collector/extension/extensionmiddleware/extensionmid replace go.opentelemetry.io/collector/confmap/xconfmap => ../../confmap/xconfmap replace go.opentelemetry.io/collector/service/hostcapabilities => ../../service/hostcapabilities + +replace go.opentelemetry.io/collector/processor => ../../processor + +replace go.opentelemetry.io/collector/pdata/testdata => ../../pdata/testdata + +replace go.opentelemetry.io/collector/confmap/provider/yamlprovider => ../../confmap/provider/yamlprovider + +replace go.opentelemetry.io/collector/internal/fanoutconsumer => ../../internal/fanoutconsumer + +replace go.opentelemetry.io/collector/exporter/exportertest => ../../exporter/exportertest + +replace go.opentelemetry.io/collector/consumer/consumererror => ../../consumer/consumererror + +replace go.opentelemetry.io/collector/connector => ../../connector + +replace go.opentelemetry.io/collector/pdata/xpdata => ../../pdata/xpdata + +replace go.opentelemetry.io/collector/extension/extensioncapabilities => ../extensioncapabilities + +replace go.opentelemetry.io/collector/consumer/xconsumer => ../../consumer/xconsumer + +replace go.opentelemetry.io/collector/connector/connectortest => ../../connector/connectortest + +replace go.opentelemetry.io/collector/config/configtelemetry => ../../config/configtelemetry + +replace go.opentelemetry.io/collector/receiver/xreceiver => ../../receiver/xreceiver + +replace go.opentelemetry.io/collector/processor/processortest => ../../processor/processortest + +replace go.opentelemetry.io/collector/otelcol => ../../otelcol + +replace go.opentelemetry.io/collector/confmap/provider/fileprovider => ../../confmap/provider/fileprovider + +replace go.opentelemetry.io/collector/processor/xprocessor => ../../processor/xprocessor + +replace go.opentelemetry.io/collector/exporter/xexporter => ../../exporter/xexporter + +replace go.opentelemetry.io/collector/extension/xextension => ../xextension + +replace go.opentelemetry.io/collector/exporter/exporterhelper => ../../exporter/exporterhelper + +replace go.opentelemetry.io/collector/config/configretry => ../../config/configretry + +replace go.opentelemetry.io/collector/consumer/consumertest => ../../consumer/consumertest + +replace go.opentelemetry.io/collector/receiver/receivertest => ../../receiver/receivertest + +replace go.opentelemetry.io/collector/receiver => ../../receiver + +replace go.opentelemetry.io/collector/service => ../../service + +replace go.opentelemetry.io/collector/pipeline/xpipeline => ../../pipeline/xpipeline + +replace go.opentelemetry.io/collector/pdata/pprofile => ../../pdata/pprofile + +replace go.opentelemetry.io/collector/exporter => ../../exporter + +replace go.opentelemetry.io/collector/connector/xconnector => ../../connector/xconnector diff --git a/extension/zpagesextension/go.sum b/extension/zpagesextension/go.sum index da278740889..dc37f3568a4 100644 --- a/extension/zpagesextension/go.sum +++ b/extension/zpagesextension/go.sum @@ -77,8 +77,6 @@ github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9de github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= go.opentelemetry.io/auto/sdk v1.1.0 h1:cH53jehLUN6UFLY71z+NDOiNJqDdPRaXzTel0sJySYA= go.opentelemetry.io/auto/sdk v1.1.0/go.mod h1:3wSPjt5PWp2RhlCcmmOial7AvC4DQqZb7a7wCow3W8A= -go.opentelemetry.io/collector/service v0.137.0 h1:I2SUiVjj79CVx45EjF/7Z8WPSFXz8C8UJG+Ugfwl9Eg= -go.opentelemetry.io/collector/service v0.137.0/go.mod h1:BK2rGpbFNXH9IaJqnpv14z/oz1gpDAftoYKZSuwLFPc= go.opentelemetry.io/contrib/bridges/otelzap v0.13.0 h1:aBKdhLVieqvwWe9A79UHI/0vgp2t/s2euY8X59pGRlw= go.opentelemetry.io/contrib/bridges/otelzap v0.13.0/go.mod h1:SYqtxLQE7iINgh6WFuVi2AI70148B8EI35DSk0Wr8m4= go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.63.0 h1:RbKq8BG0FI8OiXhBfcRtqqHcZcka+gU3cskNuf05R18=