diff --git a/.chloggen/telemetry-defaultdroppedinstruments.yaml b/.chloggen/telemetry-defaultdroppedinstruments.yaml new file mode 100644 index 00000000000..e6335da1c5a --- /dev/null +++ b/.chloggen/telemetry-defaultdroppedinstruments.yaml @@ -0,0 +1,29 @@ +# Use this changelog template to create an entry for release notes. + +# One of 'breaking', 'deprecation', 'new_component', 'enhancement', 'bug_fix' +change_type: breaking + +# The name of the component, or a single word describing the area of concern, (e.g. receiver/otlp) +component: pkg/service + +# A brief description of the change. Surround your text with quotes ("") if it needs to start with a backtick (`). +note: Replace service/telemetry.MeterSettings.DefaultViews + +# One or more tracking issues or pull requests related to the change +issues: [13809] + +# (Optional) One or more lines of additional information to render under the primary note. +# These lines will be padded with 2 spaces and then inserted directly into the document. +# Use pipe (|) for multiline entries. +subtext: | + The `service/telemetry.MeterSettings.DefaultViews` field has been removed, and replaced with + `service/telemetry.MeterSettings.DefaultDroppedInstruments`. This new field is a function that + returns a slice of `InstrumentSelector`s, each of which identifies a meter name and/or instrument + name to be dropped by default. These are directly translated to views by otelconftelemetry. + +# Optional: The change log or logs in which this entry should be included. +# e.g. '[user]' or '[user, api]' +# Include 'user' if the change is relevant to end users. +# Include 'api' if there is a change to a library API. +# Default: '[user]' +change_logs: [api] diff --git a/internal/e2e/go.mod b/internal/e2e/go.mod index 462023fbacf..cb9d307ef07 100644 --- a/internal/e2e/go.mod +++ b/internal/e2e/go.mod @@ -4,6 +4,8 @@ go 1.24.0 require ( github.com/google/go-cmp v0.7.0 + github.com/google/uuid v1.6.0 + github.com/prometheus/client_model v0.6.2 github.com/prometheus/common v0.67.1 github.com/stretchr/testify v1.11.1 go.opentelemetry.io/collector/component v1.48.0 @@ -68,7 +70,6 @@ require ( github.com/gobwas/glob v0.2.3 // indirect github.com/golang/snappy v1.0.0 // indirect github.com/google/go-tpm v0.9.7 // indirect - github.com/google/uuid v1.6.0 // indirect github.com/grafana/regexp v0.0.0-20240518133315-a468a5bfb3bc // indirect github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.2 // indirect github.com/hashicorp/go-version v1.8.0 // indirect @@ -89,7 +90,6 @@ require ( github.com/pmezard/go-difflib v1.0.0 // indirect github.com/power-devops/perfstat v0.0.0-20240221224432-82ca36839d55 // indirect github.com/prometheus/client_golang v1.23.2 // indirect - github.com/prometheus/client_model v0.6.2 // indirect github.com/prometheus/otlptranslator v0.0.2 // indirect github.com/prometheus/procfs v0.17.0 // indirect github.com/rs/cors v1.11.1 // indirect diff --git a/internal/e2e/internal_telemetry_test.go b/internal/e2e/internal_telemetry_test.go new file mode 100644 index 00000000000..c55838d3cba --- /dev/null +++ b/internal/e2e/internal_telemetry_test.go @@ -0,0 +1,292 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +package e2e + +import ( + "bytes" + "encoding/json" + "fmt" + "io" + "log" + "net/http" + "net/http/httptest" + "net/url" + "os" + "path/filepath" + "slices" + "sync" + "testing" + "time" + + "github.com/google/uuid" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + "go.uber.org/zap" + + "go.opentelemetry.io/collector/component" + "go.opentelemetry.io/collector/confmap" + "go.opentelemetry.io/collector/confmap/provider/fileprovider" + "go.opentelemetry.io/collector/confmap/provider/yamlprovider" + "go.opentelemetry.io/collector/consumer/consumertest" + "go.opentelemetry.io/collector/exporter" + "go.opentelemetry.io/collector/exporter/exportertest" + "go.opentelemetry.io/collector/otelcol" + "go.opentelemetry.io/collector/pdata/ptrace/ptraceotlp" + "go.opentelemetry.io/collector/receiver" + "go.opentelemetry.io/collector/receiver/otlpreceiver" + "go.opentelemetry.io/collector/service/telemetry/otelconftelemetry" +) + +// TestInternalTelemetry_ServiceInstanceID verifies that the service.instance.id +// attribute is generated by default (unless overridden), and is is consistent +// across all internal telemetry providers. +func TestInternalTelemetry_ServiceInstanceID(t *testing.T) { + type testcase struct { + extraYamlConfig string + checkServiceInstanceID func(t *testing.T, serviceInstanceID string) + } + + for name, tt := range map[string]testcase{ + "default": { + checkServiceInstanceID: func(t *testing.T, serviceInstanceID string) { + // By default, service.instance.id should be a generated UUIDv4 + _, err := uuid.Parse(serviceInstanceID) + require.NoError(t, err) + }, + }, + "service.instance.id set in config": { + extraYamlConfig: ` +service: + telemetry: + resource: + service.instance.id: "my-custom-instance-id"`, + checkServiceInstanceID: func(t *testing.T, serviceInstanceID string) { + assert.Equal(t, "my-custom-instance-id", serviceInstanceID) + }, + }, + } { + t.Run(name, func(t *testing.T) { + // Set up HTTP server to capture traces from collector's internal telemetry + traceSink := new(consumertest.TracesSink) + traceServer := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + body, err := io.ReadAll(r.Body) + if err != nil { + http.Error(w, err.Error(), http.StatusBadRequest) + return + } + otlpReq := ptraceotlp.NewExportRequest() + if err := otlpReq.UnmarshalProto(body); err != nil { + http.Error(w, err.Error(), http.StatusBadRequest) + return + } + _ = traceSink.ConsumeTraces(r.Context(), otlpReq.Traces()) + })) + defer traceServer.Close() + + logSink := registerTestLogSink(t) + + // Create temporary directory for the config file + tempdir := t.TempDir() + configFile := filepath.Join(tempdir, "config.yaml") + + // Create YAML config + otlphttpPort := getFreePort(t) + metricsPort := getFreePort(t) + require.NoError(t, os.WriteFile(configFile, []byte(fmt.Sprintf(` +receivers: + otlp: + protocols: + http: + endpoint: localhost:%s + +exporters: + nop: + +service: + telemetry: + logs: + level: info + encoding: json + output_paths: [%q] + metrics: + level: normal + readers: + - pull: + exporter: + prometheus: + host: localhost + port: %s + traces: + level: normal + processors: + - simple: + exporter: + otlp: + protocol: http/protobuf + endpoint: %s + pipelines: + traces: + receivers: [otlp] + exporters: [nop] +`, otlphttpPort, logSink.url, metricsPort, traceServer.URL)[1:]), 0o600)) + + // Create collector + configURIs := []string{configFile} + if tt.extraYamlConfig != "" { + configURIs = append(configURIs, "yaml:"+tt.extraYamlConfig) + } + collector, err := otelcol.NewCollector(otelcol.CollectorSettings{ + BuildInfo: component.NewDefaultBuildInfo(), + Factories: func() (otelcol.Factories, error) { + otlpreceiverFactory := otlpreceiver.NewFactory() + return otelcol.Factories{ + Receivers: map[component.Type]receiver.Factory{ + otlpreceiverFactory.Type(): otlpreceiverFactory, + }, + Exporters: map[component.Type]exporter.Factory{ + nopType: exportertest.NewNopFactory(), + }, + Telemetry: otelconftelemetry.NewFactory(), + }, nil + }, + ConfigProviderSettings: otelcol.ConfigProviderSettings{ + ResolverSettings: confmap.ResolverSettings{ + URIs: configURIs, + ProviderFactories: []confmap.ProviderFactory{ + fileprovider.NewFactory(), + yamlprovider.NewFactory(), + }, + }, + }, + }) + require.NoError(t, err) + + // Start collector + go func() { + assert.NoError(t, collector.Run(t.Context())) + }() + waitMetricsReady(t, metricsPort) + + // Send some data through the pipeline to trigger internal telemetry + err = sendTestTraces(otlphttpPort) + require.NoError(t, err) + + // Capture service.instance.id from the Prometheus endpoint + var metricInstanceID string + parsed := readMetrics(t, metricsPort) + targetInfo := parsed["target_info"] + require.NotNil(t, targetInfo, "target_info metric not found") + require.Len(t, targetInfo.Metric, 1) + for _, label := range targetInfo.Metric[0].Label { + if label.GetName() == "service_instance_id" { + metricInstanceID = label.GetValue() + break + } + } + tt.checkServiceInstanceID(t, metricInstanceID) + + // Wait for traces, verify service.instance.id matches the one from metrics + require.EventuallyWithT(t, func(t *assert.CollectT) { + allTraces := traceSink.AllTraces() + require.NotEmpty(t, allTraces) + + // Find service.instance.id in resource attributes + for _, td := range allTraces { + for i := 0; i < td.ResourceSpans().Len(); i++ { + rs := td.ResourceSpans().At(i) + if attr, ok := rs.Resource().Attributes().Get("service.instance.id"); ok { + traceInstanceID := attr.AsString() + require.Equal(t, metricInstanceID, traceInstanceID) + } + } + } + }, 10*time.Second, 500*time.Millisecond) + + // Check service.instance.id in logs matches the one from metrics + var logsCount int + logContent := logSink.Bytes() + for line := range bytes.Lines(bytes.TrimSpace(logContent)) { + var logEntry map[string]any + if err := json.Unmarshal(line, &logEntry); err != nil { + continue + } + // Check for resource field with service.instance.id + // Resource attributes are nested under "resource" key as a dictionary + resource, ok := logEntry["resource"].(map[string]any) + require.True(t, ok, "log entry should have resource field") + logInstanceID, ok := resource["service.instance.id"].(string) + require.True(t, ok, "resource should have service.instance.id") + require.Equal(t, metricInstanceID, logInstanceID) + logsCount++ + } + assert.NotZero(t, logsCount) + }) + } +} + +// Test-specific zap sink to capture logs as close as possible to logs being written to file. +// The reason we don't actually write to files is because Zap provides no way of closing file +// sinks created by zap.Config.Build. + +var ( + testSinksMu sync.Mutex + testSinks = make(map[string]*testSink) +) + +type testSink struct { + url string + + mu sync.RWMutex + buf bytes.Buffer +} + +func (s *testSink) Write(p []byte) (n int, err error) { + s.mu.Lock() + defer s.mu.Unlock() + return s.buf.Write(p) +} + +func (s *testSink) Bytes() []byte { + s.mu.RLock() + defer s.mu.RUnlock() + return slices.Clone(s.buf.Bytes()) +} + +func (*testSink) Sync() error { + return nil +} + +func (*testSink) Close() error { + return nil +} + +func registerTestLogSink(tb testing.TB) *testSink { + sink := &testSink{} + sink.url = fmt.Sprintf("test://%s.%p", tb.Name(), sink) + + testSinksMu.Lock() + defer testSinksMu.Unlock() + + testSinks[sink.url] = sink + tb.Cleanup(func() { + testSinksMu.Lock() + defer testSinksMu.Unlock() + delete(testSinks, sink.url) + }) + return sink +} + +func init() { + if err := zap.RegisterSink("test", func(u *url.URL) (zap.Sink, error) { + testSinksMu.Lock() + defer testSinksMu.Unlock() + sink, ok := testSinks[u.String()] + if !ok { + return nil, fmt.Errorf("no test sink registered for URL %q", u.String()) + } + return sink, nil + }); err != nil { + log.Fatal(err) + } +} diff --git a/internal/e2e/metric_stability_test.go b/internal/e2e/metric_stability_test.go index d598ae01182..42ae831f864 100644 --- a/internal/e2e/metric_stability_test.go +++ b/internal/e2e/metric_stability_test.go @@ -15,6 +15,7 @@ import ( "testing" "time" + dto "github.com/prometheus/client_model/go" "github.com/prometheus/common/expfmt" "github.com/prometheus/common/model" "github.com/stretchr/testify/assert" @@ -39,25 +40,8 @@ import ( "go.opentelemetry.io/collector/service/telemetry/otelconftelemetry" ) -func assertMetrics(t *testing.T, metricsAddr string, expectedMetrics map[string]bool) bool { - client := &http.Client{} - resp, err := client.Get(fmt.Sprintf("http://%s/metrics", metricsAddr)) - if err != nil { - return false - } - - if resp.StatusCode != http.StatusOK { - return false - } - - defer resp.Body.Close() - - reader := bufio.NewReader(resp.Body) - parser := expfmt.NewTextParser(model.UTF8Validation) - parsed, err := parser.TextToMetricFamilies(reader) - if err != nil { - return false - } +func assertMetrics(t *testing.T, metricsPort string, expectedMetrics map[string]bool) bool { + parsed := readMetrics(t, metricsPort) for metricName, metricFamily := range parsed { if _, ok := expectedMetrics[metricName]; ok { @@ -230,22 +214,14 @@ func testMetricStability(t *testing.T, configFile string, expectedMetrics map[st t.Logf("Collector stopped with error: %v", err) } }() - - require.Eventually(t, func() bool { - resp, err := http.Get(fmt.Sprintf("http://localhost:%s/metrics", metricsPort)) - if err != nil { - return false - } - resp.Body.Close() - return resp.StatusCode == http.StatusOK - }, 5*time.Second, 100*time.Millisecond, "collector failed to start") + waitMetricsReady(t, metricsPort) for range 5 { sendTestData(t, otelPort) } require.Eventually(t, func() bool { - return assertMetrics(t, "localhost:"+metricsPort, expectedMetrics) + return assertMetrics(t, metricsPort, expectedMetrics) }, 10*time.Second, 200*time.Millisecond, "failed to verify metrics") } @@ -367,3 +343,22 @@ func getFreePort(t *testing.T) string { defer l.Close() return strconv.Itoa(l.Addr().(*net.TCPAddr).Port) } + +func waitMetricsReady(t *testing.T, metricsPort string) { + require.EventuallyWithT(t, func(t *assert.CollectT) { + _ = readMetrics(t, metricsPort) + }, 10*time.Second, 100*time.Millisecond, "collector failed to start") +} + +func readMetrics(t require.TestingT, metricsPort string) map[string]*dto.MetricFamily { + resp, err := http.Get(fmt.Sprintf("http://localhost:%s/metrics", metricsPort)) + require.NoError(t, err) + defer resp.Body.Close() + require.Equal(t, http.StatusOK, resp.StatusCode) + + reader := bufio.NewReader(resp.Body) + parser := expfmt.NewTextParser(model.UTF8Validation) + parsed, err := parser.TextToMetricFamilies(reader) + require.NoError(t, err) + return parsed +} diff --git a/otelcol/go.mod b/otelcol/go.mod index a0153d3bce7..0d03b4a6bfb 100644 --- a/otelcol/go.mod +++ b/otelcol/go.mod @@ -38,8 +38,6 @@ require ( ) require ( - github.com/beorn7/perks v1.0.1 // indirect - github.com/cenkalti/backoff/v5 v5.0.3 // indirect github.com/cespare/xxhash/v2 v2.3.0 // indirect github.com/davecgh/go-spew v1.1.1 // indirect github.com/ebitengine/purego v0.9.1 // indirect @@ -49,8 +47,6 @@ require ( github.com/go-viper/mapstructure/v2 v2.4.0 // indirect github.com/gobwas/glob v0.2.3 // indirect github.com/google/uuid v1.6.0 // indirect - github.com/grafana/regexp v0.0.0-20240518133315-a468a5bfb3bc // indirect - github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.2 // indirect github.com/hashicorp/go-version v1.8.0 // indirect github.com/inconshreveable/mousetrap v1.1.0 // indirect github.com/json-iterator/go v1.1.12 // indirect @@ -62,14 +58,8 @@ require ( github.com/mitchellh/reflectwalk v1.0.2 // indirect github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect github.com/modern-go/reflect2 v1.0.3-0.20250322232337-35a7c28c31ee // indirect - github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect github.com/power-devops/perfstat v0.0.0-20240221224432-82ca36839d55 // indirect - github.com/prometheus/client_golang v1.23.2 // indirect - github.com/prometheus/client_model v0.6.2 // indirect - github.com/prometheus/common v0.67.1 // indirect - github.com/prometheus/otlptranslator v0.0.2 // indirect - github.com/prometheus/procfs v0.17.0 // indirect github.com/shirou/gopsutil/v4 v4.25.11 // indirect github.com/spf13/pflag v1.0.9 // indirect github.com/tklauser/go-sysconf v0.3.16 // indirect @@ -92,31 +82,12 @@ require ( go.opentelemetry.io/collector/pipeline/xpipeline v0.142.0 // indirect go.opentelemetry.io/collector/processor/xprocessor v0.142.0 // indirect go.opentelemetry.io/collector/service/hostcapabilities v0.142.0 // indirect - go.opentelemetry.io/contrib/otelconf v0.18.0 // indirect go.opentelemetry.io/otel v1.39.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 - go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.38.0 // indirect - go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.38.0 // indirect - go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.38.0 // indirect - go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.38.0 // indirect - go.opentelemetry.io/otel/exporters/prometheus v0.60.0 // indirect - go.opentelemetry.io/otel/exporters/stdout/stdoutlog v0.14.0 // indirect - go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.38.0 // indirect - go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.38.0 // indirect - go.opentelemetry.io/otel/log v0.15.0 // indirect go.opentelemetry.io/otel/metric v1.39.0 // indirect go.opentelemetry.io/otel/sdk v1.39.0 // indirect - go.opentelemetry.io/otel/sdk/log v0.14.0 // indirect go.opentelemetry.io/otel/sdk/metric v1.39.0 // indirect go.opentelemetry.io/otel/trace v1.39.0 // indirect - go.opentelemetry.io/proto/otlp v1.7.1 // indirect - go.yaml.in/yaml/v2 v2.4.3 // indirect - golang.org/x/net v0.48.0 // indirect - golang.org/x/text v0.32.0 // indirect gonum.org/v1/gonum v0.16.0 // indirect - google.golang.org/genproto/googleapis/api v0.0.0-20251022142026-3a174f9686a8 // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20251022142026-3a174f9686a8 // indirect google.golang.org/protobuf v1.36.11 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect diff --git a/otelcol/go.sum b/otelcol/go.sum index 8b6d9072aab..1d19ddfc9ca 100644 --- a/otelcol/go.sum +++ b/otelcol/go.sum @@ -1,5 +1,3 @@ -github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= -github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= github.com/cenkalti/backoff/v5 v5.0.3 h1:ZN+IMa753KfX5hd8vVaMixjnqRZ3y8CuJKRKj1xcsSM= github.com/cenkalti/backoff/v5 v5.0.3/go.mod h1:rkhZdG3JZukswDf7f0cwqPNk4K0sa+F97BxZthm/crw= github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs= @@ -39,10 +37,6 @@ github.com/google/go-tpm v0.9.7/go.mod h1:h9jEsEECg7gtLis0upRBQU+GhYVH6jMjrFxI8u github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/grafana/regexp v0.0.0-20240518133315-a468a5bfb3bc h1:GN2Lv3MGO7AS6PrRoT6yV5+wkrOpcszoIsO4+4ds248= -github.com/grafana/regexp v0.0.0-20240518133315-a468a5bfb3bc/go.mod h1:+JKpmjMGhpgPL+rXZ5nsZieVzvarn86asRlBg4uNGnk= -github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.2 h1:8Tjv8EJ+pM1xP8mK6egEbD1OgnVTyacbefKhmbLhIhU= -github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.2/go.mod h1:pkJQ2tZHJ0aFOVEEot6oZmaVEZcRme73eIFmhiVuRWs= github.com/hashicorp/go-version v1.8.0 h1:KAkNb1HAiZd1ukkxDFGmokVZe1Xy9HG6NUp+bPle2i4= github.com/hashicorp/go-version v1.8.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= @@ -61,8 +55,6 @@ github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= -github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc= -github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0 h1:6E+4a0GO5zZEnZ81pIr0yLvtUWk2if982qA3F3QD6H4= github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0/go.mod h1:zJYVVT2jmtg6P3p1VtQj7WsuWi/y4VnjVBn7F8KPB3I= github.com/mitchellh/copystructure v1.2.0 h1:vpKXTN4ewci03Vljg/q9QvCGUDttBOGBIa15WveJJGw= @@ -75,24 +67,12 @@ github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJ github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= github.com/modern-go/reflect2 v1.0.3-0.20250322232337-35a7c28c31ee h1:W5t00kpgFdJifH4BDsTlE89Zl93FEloxaWZfGcifgq8= github.com/modern-go/reflect2 v1.0.3-0.20250322232337-35a7c28c31ee/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= -github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA= -github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= github.com/pierrec/lz4/v4 v4.1.22 h1:cKFw6uJDK+/gfw5BcDL0JL5aBsAFdsIT18eRtLj7VIU= github.com/pierrec/lz4/v4 v4.1.22/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/power-devops/perfstat v0.0.0-20240221224432-82ca36839d55 h1:o4JXh1EVt9k/+g42oCprj/FisM4qX9L3sZB3upGN2ZU= github.com/power-devops/perfstat v0.0.0-20240221224432-82ca36839d55/go.mod h1:OmDBASR4679mdNQnz2pUhc2G8CO2JrUAVFDRBDP/hJE= -github.com/prometheus/client_golang v1.23.2 h1:Je96obch5RDVy3FDMndoUsjAhG5Edi49h0RJWRi/o0o= -github.com/prometheus/client_golang v1.23.2/go.mod h1:Tb1a6LWHB3/SPIzCoaDXI4I8UHKeFTEQ1YCr+0Gyqmg= -github.com/prometheus/client_model v0.6.2 h1:oBsgwpGs7iVziMvrGhE53c/GrLUsZdHnqNwqPLxwZyk= -github.com/prometheus/client_model v0.6.2/go.mod h1:y3m2F6Gdpfy6Ut/GBsUqTWZqCUvMVzSfMLjcu6wAwpE= -github.com/prometheus/common v0.67.1 h1:OTSON1P4DNxzTg4hmKCc37o4ZAZDv0cfXLkOt0oEowI= -github.com/prometheus/common v0.67.1/go.mod h1:RpmT9v35q2Y+lsieQsdOh5sXZ6ajUGC8NjZAmr8vb0Q= -github.com/prometheus/otlptranslator v0.0.2 h1:+1CdeLVrRQ6Psmhnobldo0kTp96Rj80DRXRd5OSnMEQ= -github.com/prometheus/otlptranslator v0.0.2/go.mod h1:P8AwMgdD7XEr6QRUJ2QWLpiAZTgTE2UYgjlu3svompI= -github.com/prometheus/procfs v0.17.0 h1:FuLQ+05u4ZI+SS/w9+BWEM2TXiHKsUQ9TADiRH7DuK0= -github.com/prometheus/procfs v0.17.0/go.mod h1:oPQLaDAMRbA+u8H5Pbfq+dl3VDAvHxMUOVhe0wYB2zw= github.com/rogpeppe/go-internal v1.14.1 h1:UQB4HGPB6osV0SQTLymcB4TgvyWu6ZyliaW0tI/otEQ= github.com/rogpeppe/go-internal v1.14.1/go.mod h1:MaRKkUm5W0goXpeCfT7UZI6fk/L7L7so1lCWt35ZSgc= github.com/rs/cors v1.11.1 h1:eU3gRzXLRK57F5rKMGMZURNdIG4EoAmX8k94r9wXWHA= @@ -116,56 +96,20 @@ github.com/yusufpapurcu/wmi v1.2.4 h1:zFUKzehAFReQwLys1b/iSMl+JQGSCSjtVqQn9bBrPo github.com/yusufpapurcu/wmi v1.2.4/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0= 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/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/otelconf v0.18.0 h1:ciF2Gf00BWs0DnexKFZXcxg9kJ8r3SUW1LOzW3CsKA8= -go.opentelemetry.io/contrib/otelconf v0.18.0/go.mod h1:FcP7k+JLwBLdOxS6qY6VQ/4b5VBntI6L6o80IMwhAeI= -go.opentelemetry.io/contrib/propagators/b3 v1.38.0 h1:uHsCCOSKl0kLrV2dLkFK+8Ywk9iKa/fptkytc6aFFEo= -go.opentelemetry.io/contrib/propagators/b3 v1.38.0/go.mod h1:wMRSZJZcY8ya9mApLLhwIMjqmApy2o/Ml+62lhvxyHU= 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.39.0 h1:8yPrr/S0ND9QEfTfdP9V+SiwT4E0G7Y5MO7p85nis48= go.opentelemetry.io/otel v1.39.0/go.mod h1:kLlFTywNWrFyEdH0oj2xK0bFYZtHRYUdv1NklR/tgc8= -go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc v0.14.0 h1:OMqPldHt79PqWKOMYIAQs3CxAi7RLgPxwfFSwr4ZxtM= -go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc v0.14.0/go.mod h1:1biG4qiqTxKiUCtoWDPpL3fB3KxVwCiGw81j3nKMuHE= -go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.14.0 h1:QQqYw3lkrzwVsoEX0w//EhH/TCnpRdEenKBOOEIMjWc= -go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.14.0/go.mod h1:gSVQcr17jk2ig4jqJ2DX30IdWH251JcNAecvrqTxH1s= -go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.38.0 h1:vl9obrcoWVKp/lwl8tRE33853I8Xru9HFbw/skNeLs8= -go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.38.0/go.mod h1:GAXRxmLJcVM3u22IjTg74zWBrRCKq8BnOqUVLodpcpw= -go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.38.0 h1:Oe2z/BCg5q7k4iXC3cqJxKYg0ieRiOqF0cecFYdPTwk= -go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.38.0/go.mod h1:ZQM5lAJpOsKnYagGg/zV2krVqTtaVdYdDkhMoX6Oalg= -go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.38.0 h1:GqRJVj7UmLjCVyVJ3ZFLdPRmhDUp2zFmQe3RHIOsw24= -go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.38.0/go.mod h1:ri3aaHSmCTVYu2AWv44YMauwAQc0aqI9gHKIcSbI1pU= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.38.0 h1:lwI4Dc5leUqENgGuQImwLo4WnuXFPetmPpkLi2IrX54= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.38.0/go.mod h1:Kz/oCE7z5wuyhPxsXDuaPteSWqjSBD5YaSdbxZYGbGk= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.38.0 h1:aTL7F04bJHUlztTsNGJ2l+6he8c+y/b//eR0jjjemT4= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.38.0/go.mod h1:kldtb7jDTeol0l3ewcmd8SDvx3EmIE7lyvqbasU3QC4= -go.opentelemetry.io/otel/exporters/prometheus v0.60.0 h1:cGtQxGvZbnrWdC2GyjZi0PDKVSLWP/Jocix3QWfXtbo= -go.opentelemetry.io/otel/exporters/prometheus v0.60.0/go.mod h1:hkd1EekxNo69PTV4OWFGZcKQiIqg0RfuWExcPKFvepk= -go.opentelemetry.io/otel/exporters/stdout/stdoutlog v0.14.0 h1:B/g+qde6Mkzxbry5ZZag0l7QrQBCtVm7lVjaLgmpje8= -go.opentelemetry.io/otel/exporters/stdout/stdoutlog v0.14.0/go.mod h1:mOJK8eMmgW6ocDJn6Bn11CcZ05gi3P8GylBXEkZtbgA= -go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.38.0 h1:wm/Q0GAAykXv83wzcKzGGqAnnfLFyFe7RslekZuv+VI= -go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.38.0/go.mod h1:ra3Pa40+oKjvYh+ZD3EdxFZZB0xdMfuileHAm4nNN7w= -go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.38.0 h1:kJxSDN4SgWWTjG/hPp3O7LCGLcHXFlvS2/FFOrwL+SE= -go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.38.0/go.mod h1:mgIOzS7iZeKJdeB8/NYHrJ48fdGc71Llo5bJ1J4DWUE= -go.opentelemetry.io/otel/log v0.15.0 h1:0VqVnc3MgyYd7QqNVIldC3dsLFKgazR6P3P3+ypkyDY= -go.opentelemetry.io/otel/log v0.15.0/go.mod h1:9c/G1zbyZfgu1HmQD7Qj84QMmwTp2QCQsZH1aeoWDE4= go.opentelemetry.io/otel/metric v1.39.0 h1:d1UzonvEZriVfpNKEVmHXbdf909uGTOQjA0HF0Ls5Q0= go.opentelemetry.io/otel/metric v1.39.0/go.mod h1:jrZSWL33sD7bBxg1xjrqyDjnuzTUB0x1nBERXd7Ftcs= go.opentelemetry.io/otel/sdk v1.39.0 h1:nMLYcjVsvdui1B/4FRkwjzoRVsMK8uL/cj0OyhKzt18= go.opentelemetry.io/otel/sdk v1.39.0/go.mod h1:vDojkC4/jsTJsE+kh+LXYQlbL8CgrEcwmt1ENZszdJE= -go.opentelemetry.io/otel/sdk/log v0.14.0 h1:JU/U3O7N6fsAXj0+CXz21Czg532dW2V4gG1HE/e8Zrg= -go.opentelemetry.io/otel/sdk/log v0.14.0/go.mod h1:imQvII+0ZylXfKU7/wtOND8Hn4OpT3YUoIgqJVksUkM= -go.opentelemetry.io/otel/sdk/log/logtest v0.14.0 h1:Ijbtz+JKXl8T2MngiwqBlPaHqc4YCaP/i13Qrow6gAM= -go.opentelemetry.io/otel/sdk/log/logtest v0.14.0/go.mod h1:dCU8aEL6q+L9cYTqcVOk8rM9Tp8WdnHOPLiBgp0SGOA= go.opentelemetry.io/otel/sdk/metric v1.39.0 h1:cXMVVFVgsIf2YL6QkRF4Urbr/aMInf+2WKg+sEJTtB8= go.opentelemetry.io/otel/sdk/metric v1.39.0/go.mod h1:xq9HEVH7qeX69/JnwEfp6fVq5wosJsY1mt4lLfYdVew= go.opentelemetry.io/otel/trace v1.39.0 h1:2d2vfpEDmCJ5zVYz7ijaJdOF59xLomrvj7bjt6/qCJI= go.opentelemetry.io/otel/trace v1.39.0/go.mod h1:88w4/PnZSazkGzz/w84VHpQafiU4EtqqlVdxWy+rNOA= -go.opentelemetry.io/proto/otlp v1.7.1 h1:gTOMpGDb0WTBOP8JaO72iL3auEZhVmAQg4ipjOVAtj4= -go.opentelemetry.io/proto/otlp v1.7.1/go.mod h1:b2rVh6rfI/s2pHWNlB7ILJcRALpcNDzKhACevjI+ZnE= go.opentelemetry.io/proto/slim/otlp v1.9.0 h1:fPVMv8tP3TrsqlkH1HWYUpbCY9cAIemx184VGkS6vlE= go.opentelemetry.io/proto/slim/otlp v1.9.0/go.mod h1:xXdeJJ90Gqyll+orzUkY4bOd2HECo5JofeoLpymVqdI= go.opentelemetry.io/proto/slim/otlp/collector/profiles/v1development v0.2.0 h1:o13nadWDNkH/quoDomDUClnQBpdQQ2Qqv0lQBjIXjE8= @@ -178,8 +122,6 @@ go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= go.uber.org/zap v1.27.1 h1:08RqriUEv8+ArZRYSTXy1LeBScaMpVSTBhCeaZYfMYc= go.uber.org/zap v1.27.1/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E= -go.yaml.in/yaml/v2 v2.4.3 h1:6gvOSjQoTB3vt1l+CU+tSyi/HOjfOjRLJ4YwYZGwRO0= -go.yaml.in/yaml/v2 v2.4.3/go.mod h1:zSxWcmIDjOzPXpjlTTbAsKokqkDNAVtZO0WOMiT90s8= go.yaml.in/yaml/v3 v3.0.4 h1:tfq32ie2Jv2UxXFdLJdh3jXuOzWiL1fo0bu/FbuKpbc= go.yaml.in/yaml/v3 v3.0.4/go.mod h1:DhzuOOF2ATzADvBadXxruRBLzYTpT36CKvDb3+aBEFg= golang.org/x/crypto v0.46.0 h1:cKRW/pmt1pKAfetfu+RCEvjvZkA9RimPbh7bhFjGVBU= @@ -197,8 +139,6 @@ golang.org/x/text v0.32.0/go.mod h1:o/rUWzghvpD5TXrTIBuJU77MTaN0ljMWE47kxGJQ7jY= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/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/api v0.0.0-20251022142026-3a174f9686a8 h1:mepRgnBZa07I4TRuomDE4sTIYieg/osKmzIf4USdWS4= -google.golang.org/genproto/googleapis/api v0.0.0-20251022142026-3a174f9686a8/go.mod h1:fDMmzKV90WSg1NbozdqrE64fkuTv6mlq2zxo9ad+3yo= google.golang.org/genproto/googleapis/rpc v0.0.0-20251022142026-3a174f9686a8 h1:M1rk8KBnUsBDg1oPGHNCxG4vc1f49epmTO7xscSajMk= google.golang.org/genproto/googleapis/rpc v0.0.0-20251022142026-3a174f9686a8/go.mod h1:7i2o+ce6H/6BluujYR+kqX3GKH+dChPTQU19wjRPiGk= google.golang.org/grpc v1.77.0 h1:wVVY6/8cGA6vvffn+wWK5ToddbgdU3d8MNENr4evgXM= diff --git a/otelcol/otelcoltest/go.mod b/otelcol/otelcoltest/go.mod index f327acffed3..879079f12f2 100644 --- a/otelcol/otelcoltest/go.mod +++ b/otelcol/otelcoltest/go.mod @@ -23,8 +23,6 @@ require ( ) require ( - github.com/beorn7/perks v1.0.1 // indirect - github.com/cenkalti/backoff/v5 v5.0.3 // indirect github.com/cespare/xxhash/v2 v2.3.0 // indirect github.com/davecgh/go-spew v1.1.1 // indirect github.com/ebitengine/purego v0.9.1 // indirect @@ -34,8 +32,6 @@ require ( github.com/go-viper/mapstructure/v2 v2.4.0 // indirect github.com/gobwas/glob v0.2.3 // indirect github.com/google/uuid v1.6.0 // indirect - github.com/grafana/regexp v0.0.0-20240518133315-a468a5bfb3bc // indirect - github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.2 // indirect github.com/hashicorp/go-version v1.8.0 // indirect github.com/inconshreveable/mousetrap v1.1.0 // indirect github.com/json-iterator/go v1.1.12 // indirect @@ -47,14 +43,8 @@ require ( github.com/mitchellh/reflectwalk v1.0.2 // indirect github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect github.com/modern-go/reflect2 v1.0.3-0.20250322232337-35a7c28c31ee // indirect - github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect github.com/power-devops/perfstat v0.0.0-20240221224432-82ca36839d55 // indirect - github.com/prometheus/client_golang v1.23.2 // indirect - github.com/prometheus/client_model v0.6.2 // indirect - github.com/prometheus/common v0.67.1 // indirect - github.com/prometheus/otlptranslator v0.0.2 // indirect - github.com/prometheus/procfs v0.17.0 // indirect github.com/shirou/gopsutil/v4 v4.25.11 // indirect github.com/spf13/cobra v1.10.2 // indirect github.com/spf13/pflag v1.0.9 // indirect @@ -88,36 +78,17 @@ require ( go.opentelemetry.io/collector/receiver v1.48.0 // indirect go.opentelemetry.io/collector/receiver/xreceiver v0.142.0 // indirect go.opentelemetry.io/collector/service/hostcapabilities v0.142.0 // indirect - go.opentelemetry.io/contrib/otelconf v0.18.0 // indirect go.opentelemetry.io/otel v1.39.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 - go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.38.0 // indirect - go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.38.0 // indirect - go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.38.0 // indirect - go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.38.0 // indirect - go.opentelemetry.io/otel/exporters/prometheus v0.60.0 // indirect - go.opentelemetry.io/otel/exporters/stdout/stdoutlog v0.14.0 // indirect - go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.38.0 // indirect - go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.38.0 // indirect - go.opentelemetry.io/otel/log v0.15.0 // indirect go.opentelemetry.io/otel/metric v1.39.0 // indirect go.opentelemetry.io/otel/sdk v1.39.0 // indirect - go.opentelemetry.io/otel/sdk/log v0.14.0 // indirect go.opentelemetry.io/otel/sdk/metric v1.39.0 // indirect go.opentelemetry.io/otel/trace v1.39.0 // indirect - go.opentelemetry.io/proto/otlp v1.7.1 // indirect go.uber.org/multierr v1.11.0 // indirect go.uber.org/zap v1.27.1 // indirect - go.yaml.in/yaml/v2 v2.4.3 // indirect go.yaml.in/yaml/v3 v3.0.4 // indirect golang.org/x/exp v0.0.0-20240506185415-9bf2ced13842 // indirect - golang.org/x/net v0.48.0 // indirect golang.org/x/sys v0.39.0 // indirect - golang.org/x/text v0.32.0 // indirect gonum.org/v1/gonum v0.16.0 // indirect - google.golang.org/genproto/googleapis/api v0.0.0-20251022142026-3a174f9686a8 // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20251022142026-3a174f9686a8 // indirect google.golang.org/grpc v1.77.0 // indirect google.golang.org/protobuf v1.36.11 // indirect diff --git a/otelcol/otelcoltest/go.sum b/otelcol/otelcoltest/go.sum index 8b6d9072aab..1d19ddfc9ca 100644 --- a/otelcol/otelcoltest/go.sum +++ b/otelcol/otelcoltest/go.sum @@ -1,5 +1,3 @@ -github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= -github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= github.com/cenkalti/backoff/v5 v5.0.3 h1:ZN+IMa753KfX5hd8vVaMixjnqRZ3y8CuJKRKj1xcsSM= github.com/cenkalti/backoff/v5 v5.0.3/go.mod h1:rkhZdG3JZukswDf7f0cwqPNk4K0sa+F97BxZthm/crw= github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs= @@ -39,10 +37,6 @@ github.com/google/go-tpm v0.9.7/go.mod h1:h9jEsEECg7gtLis0upRBQU+GhYVH6jMjrFxI8u github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/grafana/regexp v0.0.0-20240518133315-a468a5bfb3bc h1:GN2Lv3MGO7AS6PrRoT6yV5+wkrOpcszoIsO4+4ds248= -github.com/grafana/regexp v0.0.0-20240518133315-a468a5bfb3bc/go.mod h1:+JKpmjMGhpgPL+rXZ5nsZieVzvarn86asRlBg4uNGnk= -github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.2 h1:8Tjv8EJ+pM1xP8mK6egEbD1OgnVTyacbefKhmbLhIhU= -github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.2/go.mod h1:pkJQ2tZHJ0aFOVEEot6oZmaVEZcRme73eIFmhiVuRWs= github.com/hashicorp/go-version v1.8.0 h1:KAkNb1HAiZd1ukkxDFGmokVZe1Xy9HG6NUp+bPle2i4= github.com/hashicorp/go-version v1.8.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= @@ -61,8 +55,6 @@ github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= -github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc= -github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0 h1:6E+4a0GO5zZEnZ81pIr0yLvtUWk2if982qA3F3QD6H4= github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0/go.mod h1:zJYVVT2jmtg6P3p1VtQj7WsuWi/y4VnjVBn7F8KPB3I= github.com/mitchellh/copystructure v1.2.0 h1:vpKXTN4ewci03Vljg/q9QvCGUDttBOGBIa15WveJJGw= @@ -75,24 +67,12 @@ github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJ github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= github.com/modern-go/reflect2 v1.0.3-0.20250322232337-35a7c28c31ee h1:W5t00kpgFdJifH4BDsTlE89Zl93FEloxaWZfGcifgq8= github.com/modern-go/reflect2 v1.0.3-0.20250322232337-35a7c28c31ee/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= -github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA= -github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= github.com/pierrec/lz4/v4 v4.1.22 h1:cKFw6uJDK+/gfw5BcDL0JL5aBsAFdsIT18eRtLj7VIU= github.com/pierrec/lz4/v4 v4.1.22/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/power-devops/perfstat v0.0.0-20240221224432-82ca36839d55 h1:o4JXh1EVt9k/+g42oCprj/FisM4qX9L3sZB3upGN2ZU= github.com/power-devops/perfstat v0.0.0-20240221224432-82ca36839d55/go.mod h1:OmDBASR4679mdNQnz2pUhc2G8CO2JrUAVFDRBDP/hJE= -github.com/prometheus/client_golang v1.23.2 h1:Je96obch5RDVy3FDMndoUsjAhG5Edi49h0RJWRi/o0o= -github.com/prometheus/client_golang v1.23.2/go.mod h1:Tb1a6LWHB3/SPIzCoaDXI4I8UHKeFTEQ1YCr+0Gyqmg= -github.com/prometheus/client_model v0.6.2 h1:oBsgwpGs7iVziMvrGhE53c/GrLUsZdHnqNwqPLxwZyk= -github.com/prometheus/client_model v0.6.2/go.mod h1:y3m2F6Gdpfy6Ut/GBsUqTWZqCUvMVzSfMLjcu6wAwpE= -github.com/prometheus/common v0.67.1 h1:OTSON1P4DNxzTg4hmKCc37o4ZAZDv0cfXLkOt0oEowI= -github.com/prometheus/common v0.67.1/go.mod h1:RpmT9v35q2Y+lsieQsdOh5sXZ6ajUGC8NjZAmr8vb0Q= -github.com/prometheus/otlptranslator v0.0.2 h1:+1CdeLVrRQ6Psmhnobldo0kTp96Rj80DRXRd5OSnMEQ= -github.com/prometheus/otlptranslator v0.0.2/go.mod h1:P8AwMgdD7XEr6QRUJ2QWLpiAZTgTE2UYgjlu3svompI= -github.com/prometheus/procfs v0.17.0 h1:FuLQ+05u4ZI+SS/w9+BWEM2TXiHKsUQ9TADiRH7DuK0= -github.com/prometheus/procfs v0.17.0/go.mod h1:oPQLaDAMRbA+u8H5Pbfq+dl3VDAvHxMUOVhe0wYB2zw= github.com/rogpeppe/go-internal v1.14.1 h1:UQB4HGPB6osV0SQTLymcB4TgvyWu6ZyliaW0tI/otEQ= github.com/rogpeppe/go-internal v1.14.1/go.mod h1:MaRKkUm5W0goXpeCfT7UZI6fk/L7L7so1lCWt35ZSgc= github.com/rs/cors v1.11.1 h1:eU3gRzXLRK57F5rKMGMZURNdIG4EoAmX8k94r9wXWHA= @@ -116,56 +96,20 @@ github.com/yusufpapurcu/wmi v1.2.4 h1:zFUKzehAFReQwLys1b/iSMl+JQGSCSjtVqQn9bBrPo github.com/yusufpapurcu/wmi v1.2.4/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0= 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/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/otelconf v0.18.0 h1:ciF2Gf00BWs0DnexKFZXcxg9kJ8r3SUW1LOzW3CsKA8= -go.opentelemetry.io/contrib/otelconf v0.18.0/go.mod h1:FcP7k+JLwBLdOxS6qY6VQ/4b5VBntI6L6o80IMwhAeI= -go.opentelemetry.io/contrib/propagators/b3 v1.38.0 h1:uHsCCOSKl0kLrV2dLkFK+8Ywk9iKa/fptkytc6aFFEo= -go.opentelemetry.io/contrib/propagators/b3 v1.38.0/go.mod h1:wMRSZJZcY8ya9mApLLhwIMjqmApy2o/Ml+62lhvxyHU= 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.39.0 h1:8yPrr/S0ND9QEfTfdP9V+SiwT4E0G7Y5MO7p85nis48= go.opentelemetry.io/otel v1.39.0/go.mod h1:kLlFTywNWrFyEdH0oj2xK0bFYZtHRYUdv1NklR/tgc8= -go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc v0.14.0 h1:OMqPldHt79PqWKOMYIAQs3CxAi7RLgPxwfFSwr4ZxtM= -go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc v0.14.0/go.mod h1:1biG4qiqTxKiUCtoWDPpL3fB3KxVwCiGw81j3nKMuHE= -go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.14.0 h1:QQqYw3lkrzwVsoEX0w//EhH/TCnpRdEenKBOOEIMjWc= -go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.14.0/go.mod h1:gSVQcr17jk2ig4jqJ2DX30IdWH251JcNAecvrqTxH1s= -go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.38.0 h1:vl9obrcoWVKp/lwl8tRE33853I8Xru9HFbw/skNeLs8= -go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.38.0/go.mod h1:GAXRxmLJcVM3u22IjTg74zWBrRCKq8BnOqUVLodpcpw= -go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.38.0 h1:Oe2z/BCg5q7k4iXC3cqJxKYg0ieRiOqF0cecFYdPTwk= -go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.38.0/go.mod h1:ZQM5lAJpOsKnYagGg/zV2krVqTtaVdYdDkhMoX6Oalg= -go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.38.0 h1:GqRJVj7UmLjCVyVJ3ZFLdPRmhDUp2zFmQe3RHIOsw24= -go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.38.0/go.mod h1:ri3aaHSmCTVYu2AWv44YMauwAQc0aqI9gHKIcSbI1pU= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.38.0 h1:lwI4Dc5leUqENgGuQImwLo4WnuXFPetmPpkLi2IrX54= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.38.0/go.mod h1:Kz/oCE7z5wuyhPxsXDuaPteSWqjSBD5YaSdbxZYGbGk= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.38.0 h1:aTL7F04bJHUlztTsNGJ2l+6he8c+y/b//eR0jjjemT4= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.38.0/go.mod h1:kldtb7jDTeol0l3ewcmd8SDvx3EmIE7lyvqbasU3QC4= -go.opentelemetry.io/otel/exporters/prometheus v0.60.0 h1:cGtQxGvZbnrWdC2GyjZi0PDKVSLWP/Jocix3QWfXtbo= -go.opentelemetry.io/otel/exporters/prometheus v0.60.0/go.mod h1:hkd1EekxNo69PTV4OWFGZcKQiIqg0RfuWExcPKFvepk= -go.opentelemetry.io/otel/exporters/stdout/stdoutlog v0.14.0 h1:B/g+qde6Mkzxbry5ZZag0l7QrQBCtVm7lVjaLgmpje8= -go.opentelemetry.io/otel/exporters/stdout/stdoutlog v0.14.0/go.mod h1:mOJK8eMmgW6ocDJn6Bn11CcZ05gi3P8GylBXEkZtbgA= -go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.38.0 h1:wm/Q0GAAykXv83wzcKzGGqAnnfLFyFe7RslekZuv+VI= -go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.38.0/go.mod h1:ra3Pa40+oKjvYh+ZD3EdxFZZB0xdMfuileHAm4nNN7w= -go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.38.0 h1:kJxSDN4SgWWTjG/hPp3O7LCGLcHXFlvS2/FFOrwL+SE= -go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.38.0/go.mod h1:mgIOzS7iZeKJdeB8/NYHrJ48fdGc71Llo5bJ1J4DWUE= -go.opentelemetry.io/otel/log v0.15.0 h1:0VqVnc3MgyYd7QqNVIldC3dsLFKgazR6P3P3+ypkyDY= -go.opentelemetry.io/otel/log v0.15.0/go.mod h1:9c/G1zbyZfgu1HmQD7Qj84QMmwTp2QCQsZH1aeoWDE4= go.opentelemetry.io/otel/metric v1.39.0 h1:d1UzonvEZriVfpNKEVmHXbdf909uGTOQjA0HF0Ls5Q0= go.opentelemetry.io/otel/metric v1.39.0/go.mod h1:jrZSWL33sD7bBxg1xjrqyDjnuzTUB0x1nBERXd7Ftcs= go.opentelemetry.io/otel/sdk v1.39.0 h1:nMLYcjVsvdui1B/4FRkwjzoRVsMK8uL/cj0OyhKzt18= go.opentelemetry.io/otel/sdk v1.39.0/go.mod h1:vDojkC4/jsTJsE+kh+LXYQlbL8CgrEcwmt1ENZszdJE= -go.opentelemetry.io/otel/sdk/log v0.14.0 h1:JU/U3O7N6fsAXj0+CXz21Czg532dW2V4gG1HE/e8Zrg= -go.opentelemetry.io/otel/sdk/log v0.14.0/go.mod h1:imQvII+0ZylXfKU7/wtOND8Hn4OpT3YUoIgqJVksUkM= -go.opentelemetry.io/otel/sdk/log/logtest v0.14.0 h1:Ijbtz+JKXl8T2MngiwqBlPaHqc4YCaP/i13Qrow6gAM= -go.opentelemetry.io/otel/sdk/log/logtest v0.14.0/go.mod h1:dCU8aEL6q+L9cYTqcVOk8rM9Tp8WdnHOPLiBgp0SGOA= go.opentelemetry.io/otel/sdk/metric v1.39.0 h1:cXMVVFVgsIf2YL6QkRF4Urbr/aMInf+2WKg+sEJTtB8= go.opentelemetry.io/otel/sdk/metric v1.39.0/go.mod h1:xq9HEVH7qeX69/JnwEfp6fVq5wosJsY1mt4lLfYdVew= go.opentelemetry.io/otel/trace v1.39.0 h1:2d2vfpEDmCJ5zVYz7ijaJdOF59xLomrvj7bjt6/qCJI= go.opentelemetry.io/otel/trace v1.39.0/go.mod h1:88w4/PnZSazkGzz/w84VHpQafiU4EtqqlVdxWy+rNOA= -go.opentelemetry.io/proto/otlp v1.7.1 h1:gTOMpGDb0WTBOP8JaO72iL3auEZhVmAQg4ipjOVAtj4= -go.opentelemetry.io/proto/otlp v1.7.1/go.mod h1:b2rVh6rfI/s2pHWNlB7ILJcRALpcNDzKhACevjI+ZnE= go.opentelemetry.io/proto/slim/otlp v1.9.0 h1:fPVMv8tP3TrsqlkH1HWYUpbCY9cAIemx184VGkS6vlE= go.opentelemetry.io/proto/slim/otlp v1.9.0/go.mod h1:xXdeJJ90Gqyll+orzUkY4bOd2HECo5JofeoLpymVqdI= go.opentelemetry.io/proto/slim/otlp/collector/profiles/v1development v0.2.0 h1:o13nadWDNkH/quoDomDUClnQBpdQQ2Qqv0lQBjIXjE8= @@ -178,8 +122,6 @@ go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= go.uber.org/zap v1.27.1 h1:08RqriUEv8+ArZRYSTXy1LeBScaMpVSTBhCeaZYfMYc= go.uber.org/zap v1.27.1/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E= -go.yaml.in/yaml/v2 v2.4.3 h1:6gvOSjQoTB3vt1l+CU+tSyi/HOjfOjRLJ4YwYZGwRO0= -go.yaml.in/yaml/v2 v2.4.3/go.mod h1:zSxWcmIDjOzPXpjlTTbAsKokqkDNAVtZO0WOMiT90s8= go.yaml.in/yaml/v3 v3.0.4 h1:tfq32ie2Jv2UxXFdLJdh3jXuOzWiL1fo0bu/FbuKpbc= go.yaml.in/yaml/v3 v3.0.4/go.mod h1:DhzuOOF2ATzADvBadXxruRBLzYTpT36CKvDb3+aBEFg= golang.org/x/crypto v0.46.0 h1:cKRW/pmt1pKAfetfu+RCEvjvZkA9RimPbh7bhFjGVBU= @@ -197,8 +139,6 @@ golang.org/x/text v0.32.0/go.mod h1:o/rUWzghvpD5TXrTIBuJU77MTaN0ljMWE47kxGJQ7jY= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/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/api v0.0.0-20251022142026-3a174f9686a8 h1:mepRgnBZa07I4TRuomDE4sTIYieg/osKmzIf4USdWS4= -google.golang.org/genproto/googleapis/api v0.0.0-20251022142026-3a174f9686a8/go.mod h1:fDMmzKV90WSg1NbozdqrE64fkuTv6mlq2zxo9ad+3yo= google.golang.org/genproto/googleapis/rpc v0.0.0-20251022142026-3a174f9686a8 h1:M1rk8KBnUsBDg1oPGHNCxG4vc1f49epmTO7xscSajMk= google.golang.org/genproto/googleapis/rpc v0.0.0-20251022142026-3a174f9686a8/go.mod h1:7i2o+ce6H/6BluujYR+kqX3GKH+dChPTQU19wjRPiGk= google.golang.org/grpc v1.77.0 h1:wVVY6/8cGA6vvffn+wWK5ToddbgdU3d8MNENr4evgXM= diff --git a/service/service.go b/service/service.go index dd0ec2b9804..6aa1f1afd7c 100644 --- a/service/service.go +++ b/service/service.go @@ -11,7 +11,6 @@ import ( "fmt" "runtime" - config "go.opentelemetry.io/contrib/otelconf/v0.3.0" noopmetric "go.opentelemetry.io/otel/metric/noop" nooptrace "go.opentelemetry.io/otel/trace/noop" "go.uber.org/multierr" @@ -180,9 +179,9 @@ func New(ctx context.Context, set Settings, cfg Config) (_ *Service, resultErr e srv.loggerShutdownFunc = loggerShutdownFunc meterSettings := telemetry.MeterSettings{ - Settings: telemetrySettings, - Logger: logger, - DefaultViews: configureViews, + Settings: telemetrySettings, + Logger: logger, + DefaultDroppedInstruments: defaultDroppedInstruments, } meterProvider, err := set.TelemetryFactory.CreateMeterProvider(ctx, meterSettings, cfg.Telemetry) if err != nil { @@ -353,54 +352,43 @@ func (srv *Service) Logger() *zap.Logger { return srv.telemetrySettings.Logger } -func dropViewOption(selector *config.ViewSelector) config.View { - return config.View{ - Selector: selector, - Stream: &config.ViewStream{ - Aggregation: &config.ViewStreamAggregation{ - Drop: config.ViewStreamAggregationDrop{}, - }, - }, - } -} - -func configureViews(level configtelemetry.Level) []config.View { - views := []config.View{} +func defaultDroppedInstruments(level configtelemetry.Level) []telemetry.InstrumentSelector { + selectors := []telemetry.InstrumentSelector{} if level < configtelemetry.LevelDetailed { // Drop all otelhttp and otelgrpc metrics if the level is not detailed. - views = append(views, - dropViewOption(&config.ViewSelector{ - MeterName: ptr("go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc"), - }), - dropViewOption(&config.ViewSelector{ - MeterName: ptr("go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp"), - }), + selectors = append(selectors, + telemetry.InstrumentSelector{ + MeterName: "go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc", + }, + telemetry.InstrumentSelector{ + MeterName: "go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp", + }, // Drop duration metric if the level is not detailed - dropViewOption(&config.ViewSelector{ - MeterName: ptr("go.opentelemetry.io/collector/processor/processorhelper"), - InstrumentName: ptr("otelcol_processor_internal_duration"), - }), + telemetry.InstrumentSelector{ + MeterName: "go.opentelemetry.io/collector/processor/processorhelper", + InstrumentName: "otelcol_processor_internal_duration", + }, ) } // otel-arrow library metrics // See https://github.com/open-telemetry/otel-arrow/blob/c39257/pkg/otel/arrow_record/consumer.go#L174-L176 if level < configtelemetry.LevelNormal { - scope := ptr("otel-arrow/pkg/otel/arrow_record") - views = append(views, - dropViewOption(&config.ViewSelector{ + scope := "otel-arrow/pkg/otel/arrow_record" + selectors = append(selectors, + telemetry.InstrumentSelector{ MeterName: scope, - InstrumentName: ptr("arrow_batch_records"), - }), - dropViewOption(&config.ViewSelector{ + InstrumentName: "arrow_batch_records", + }, + telemetry.InstrumentSelector{ MeterName: scope, - InstrumentName: ptr("arrow_schema_resets"), - }), - dropViewOption(&config.ViewSelector{ + InstrumentName: "arrow_schema_resets", + }, + telemetry.InstrumentSelector{ MeterName: scope, - InstrumentName: ptr("arrow_memory_inuse"), - }), + InstrumentName: "arrow_memory_inuse", + }, ) } @@ -409,82 +397,78 @@ func configureViews(level configtelemetry.Level) []config.View { // - https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/a25f05/internal/otelarrow/netstats/netstats.go#L130 // - https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/a25f05/internal/otelarrow/netstats/netstats.go#L165 if level < configtelemetry.LevelDetailed { - scope := ptr("github.com/open-telemetry/opentelemetry-collector-contrib/internal/otelarrow/netstats") + scope := "github.com/open-telemetry/opentelemetry-collector-contrib/internal/otelarrow/netstats" - views = append(views, + selectors = append(selectors, // Compressed size metrics. - dropViewOption(&config.ViewSelector{ + telemetry.InstrumentSelector{ MeterName: scope, - InstrumentName: ptr("otelcol_*_compressed_size"), - }), - dropViewOption(&config.ViewSelector{ + InstrumentName: "otelcol_*_compressed_size", + }, + telemetry.InstrumentSelector{ MeterName: scope, - InstrumentName: ptr("otelcol_*_compressed_size"), - }), + InstrumentName: "otelcol_*_compressed_size", + }, // makeRecvMetrics for exporters. - dropViewOption(&config.ViewSelector{ + telemetry.InstrumentSelector{ MeterName: scope, - InstrumentName: ptr("otelcol_exporter_recv"), - }), - dropViewOption(&config.ViewSelector{ + InstrumentName: "otelcol_exporter_recv", + }, + telemetry.InstrumentSelector{ MeterName: scope, - InstrumentName: ptr("otelcol_exporter_recv_wire"), - }), + InstrumentName: "otelcol_exporter_recv_wire", + }, // makeSentMetrics for receivers. - dropViewOption(&config.ViewSelector{ + telemetry.InstrumentSelector{ MeterName: scope, - InstrumentName: ptr("otelcol_receiver_sent"), - }), - dropViewOption(&config.ViewSelector{ + InstrumentName: "otelcol_receiver_sent", + }, + telemetry.InstrumentSelector{ MeterName: scope, - InstrumentName: ptr("otelcol_receiver_sent_wire"), - }), + InstrumentName: "otelcol_receiver_sent_wire", + }, ) } // Batch exporter metrics if level < configtelemetry.LevelDetailed { - scope := ptr("go.opentelemetry.io/collector/exporter/exporterhelper") - views = append(views, dropViewOption(&config.ViewSelector{ + scope := "go.opentelemetry.io/collector/exporter/exporterhelper" + selectors = append(selectors, telemetry.InstrumentSelector{ MeterName: scope, - InstrumentName: ptr("otelcol_exporter_queue_batch_send_size_bytes"), - })) + InstrumentName: "otelcol_exporter_queue_batch_send_size_bytes", + }) } // Batch processor metrics - scope := ptr("go.opentelemetry.io/collector/processor/batchprocessor") + scope := "go.opentelemetry.io/collector/processor/batchprocessor" if level < configtelemetry.LevelNormal { - views = append(views, dropViewOption(&config.ViewSelector{ + selectors = append(selectors, telemetry.InstrumentSelector{ MeterName: scope, - })) + }) } else if level < configtelemetry.LevelDetailed { - views = append(views, dropViewOption(&config.ViewSelector{ + selectors = append(selectors, telemetry.InstrumentSelector{ MeterName: scope, - InstrumentName: ptr("otelcol_processor_batch_batch_send_size_bytes"), - })) + InstrumentName: "otelcol_processor_batch_batch_send_size_bytes", + }) } // Internal graph metrics - graphScope := ptr("go.opentelemetry.io/collector/service") + graphScope := "go.opentelemetry.io/collector/service" if level < configtelemetry.LevelDetailed { - views = append(views, - dropViewOption(&config.ViewSelector{ + selectors = append(selectors, + telemetry.InstrumentSelector{ MeterName: graphScope, - InstrumentName: ptr("otelcol.*.consumed.size"), - }), - dropViewOption(&config.ViewSelector{ + InstrumentName: "otelcol.*.consumed.size", + }, + telemetry.InstrumentSelector{ MeterName: graphScope, - InstrumentName: ptr("otelcol.*.produced.size"), - })) + InstrumentName: "otelcol.*.produced.size", + }) } - return views -} - -func ptr[T any](v T) *T { - return &v + return selectors } // Validate verifies the graph by calling the internal graph.Build. diff --git a/service/service_test.go b/service/service_test.go index 8083e74fdb3..f35a8f506f0 100644 --- a/service/service_test.go +++ b/service/service_test.go @@ -12,7 +12,6 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - otelconf "go.opentelemetry.io/contrib/otelconf/v0.3.0" noopmetric "go.opentelemetry.io/otel/metric/noop" "go.opentelemetry.io/otel/sdk/metric" "go.opentelemetry.io/otel/sdk/metric/metricdata" @@ -37,7 +36,6 @@ import ( "go.opentelemetry.io/collector/service/internal/builders" "go.opentelemetry.io/collector/service/pipelines" "go.opentelemetry.io/collector/service/telemetry" - "go.opentelemetry.io/collector/service/telemetry/otelconftelemetry" "go.opentelemetry.io/collector/service/telemetry/telemetrytest" ) @@ -256,13 +254,18 @@ func assertMetrics(t *testing.T, rm metricdata.ResourceMetrics) { } func TestServiceTelemetryDefaultViews(t *testing.T) { - var views []otelconf.View + var defaultDroppedInstrumentsCalled bool + var selectors []telemetry.InstrumentSelector set := newNopSettings() set.TelemetryFactory = telemetry.NewFactory( func() component.Config { return nil }, telemetry.WithCreateMeterProvider( func(_ context.Context, set telemetry.MeterSettings, _ component.Config) (telemetry.MeterProvider, error) { - views = set.DefaultViews(configtelemetry.LevelBasic) + // Verify DefaultDroppedInstruments is set and test it + if set.DefaultDroppedInstruments != nil { + defaultDroppedInstrumentsCalled = true + selectors = set.DefaultDroppedInstruments(configtelemetry.LevelBasic) + } return telemetrytest.ShutdownMeterProvider{ MeterProvider: noopmetric.NewMeterProvider(), }, nil @@ -276,7 +279,17 @@ func TestServiceTelemetryDefaultViews(t *testing.T) { defer func() { assert.NoError(t, srv.Shutdown(context.Background())) }() - require.NotEmpty(t, views) + require.True(t, defaultDroppedInstrumentsCalled, "DefaultDroppedInstruments should be set") + require.NotEmpty(t, selectors, "DefaultDroppedInstruments should return selectors at LevelBasic") + // Verify that otelgrpc meter selector is included + foundOtelgrpc := false + for _, sel := range selectors { + if sel.MeterName == "go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc" && sel.InstrumentName == "" { + foundOtelgrpc = true + break + } + } + require.True(t, foundOtelgrpc, "Should include otelgrpc meter selector at LevelBasic") } // TestServiceTelemetryZPages verifies that the zpages extension works correctly with servce telemetry. @@ -570,81 +583,6 @@ func TestNew_NilTelemetryProvider(t *testing.T) { require.EqualError(t, err, "telemetry factory not provided") } -func TestServiceTelemetryConsistentInstanceID(t *testing.T) { - var loggerResource, meterResource, tracerResource *pcommon.Resource - - createLoggerCalled := false - createMeterCalled := false - createTracerCalled := false - - baseFactory := otelconftelemetry.NewFactory() - - set := newNopSettings() - set.TelemetryFactory = telemetry.NewFactory( - baseFactory.CreateDefaultConfig, - telemetry.WithCreateResource(baseFactory.CreateResource), - telemetry.WithCreateLogger(func(ctx context.Context, settings telemetry.LoggerSettings, cfg component.Config) (*zap.Logger, component.ShutdownFunc, error) { - createLoggerCalled = true - loggerResource = settings.Resource - return baseFactory.CreateLogger(ctx, settings, cfg) - }), - telemetry.WithCreateMeterProvider(func(ctx context.Context, settings telemetry.MeterSettings, cfg component.Config) (telemetry.MeterProvider, error) { - createMeterCalled = true - meterResource = settings.Resource - return baseFactory.CreateMeterProvider(ctx, settings, cfg) - }), - telemetry.WithCreateTracerProvider(func(ctx context.Context, settings telemetry.TracerSettings, cfg component.Config) (telemetry.TracerProvider, error) { - createTracerCalled = true - tracerResource = settings.Resource - return baseFactory.CreateTracerProvider(ctx, settings, cfg) - }), - ) - - cfg := newNopConfig() - srv, err := New(context.Background(), set, cfg) - require.NoError(t, err) - - require.True(t, createLoggerCalled, "logger should have been created") - require.True(t, createMeterCalled, "meter provider should have been created") - require.True(t, createTracerCalled, "tracer provider should have been created") - - var serviceInstanceID string - if sid, ok := srv.telemetrySettings.Resource.Attributes().Get("service.instance.id"); ok { - serviceInstanceID = sid.AsString() - } - require.NotEmpty(t, serviceInstanceID, "service.instance.id not found in service resource") - - require.NotNil(t, loggerResource, "logger should have received a resource") - require.NotNil(t, meterResource, "meter provider should have received a resource") - require.NotNil(t, tracerResource, "tracer provider should have received a resource") - - var loggerInstanceID, meterInstanceID, tracerInstanceID string - if sid, ok := loggerResource.Attributes().Get("service.instance.id"); ok { - loggerInstanceID = sid.AsString() - } - if sid, ok := meterResource.Attributes().Get("service.instance.id"); ok { - meterInstanceID = sid.AsString() - } - if sid, ok := tracerResource.Attributes().Get("service.instance.id"); ok { - tracerInstanceID = sid.AsString() - } - - require.NotEmpty(t, loggerInstanceID, "logger resource should have service.instance.id") - require.NotEmpty(t, meterInstanceID, "meter resource should have service.instance.id") - require.NotEmpty(t, tracerInstanceID, "tracer resource should have service.instance.id") - - assert.Equal(t, serviceInstanceID, loggerInstanceID, - "logger should use the same service.instance.id as the service resource") - assert.Equal(t, serviceInstanceID, meterInstanceID, - "meter provider should use the same service.instance.id as the service resource") - assert.Equal(t, serviceInstanceID, tracerInstanceID, - "tracer provider should use the same service.instance.id as the service resource") - - t.Logf("service.instance.id = %s (shared by logger, meter, and tracer)", serviceInstanceID) - - require.NoError(t, srv.Shutdown(context.Background())) -} - func newNopSettings() Settings { receiversConfigs, receiversFactories := builders.NewNopReceiverConfigsAndFactories() processorsConfigs, processorsFactories := builders.NewNopProcessorConfigsAndFactories() @@ -700,27 +638,6 @@ func newNopConfigPipelineConfigs(pipelineCfgs pipelines.Config) Config { return Config{ Extensions: extensions.Config{component.NewID(nopType)}, Pipelines: pipelineCfgs, - Telemetry: &otelconftelemetry.Config{ - Logs: otelconftelemetry.LogsConfig{ - Level: zapcore.InfoLevel, - Development: false, - Encoding: "console", - Sampling: &otelconftelemetry.LogsSamplingConfig{ - Enabled: true, - Tick: 10 * time.Second, - Initial: 100, - Thereafter: 100, - }, - OutputPaths: []string{"stderr"}, - ErrorOutputPaths: []string{"stderr"}, - DisableCaller: false, - DisableStacktrace: false, - InitialFields: map[string]any(nil), - }, - Metrics: otelconftelemetry.MetricsConfig{ - Level: configtelemetry.LevelBasic, - }, - }, } } diff --git a/service/telemetry/otelconftelemetry/config.go b/service/telemetry/otelconftelemetry/config.go index 0229e7c740c..5b131538a75 100644 --- a/service/telemetry/otelconftelemetry/config.go +++ b/service/telemetry/otelconftelemetry/config.go @@ -7,7 +7,7 @@ import ( "errors" "go.opentelemetry.io/collector/config/configtelemetry" - "go.opentelemetry.io/collector/service/telemetry/internal/migration" + "go.opentelemetry.io/collector/service/telemetry/otelconftelemetry/internal/migration" ) // Config defines the configurable settings for service telemetry. diff --git a/service/telemetry/internal/migration/normalize.go b/service/telemetry/otelconftelemetry/internal/migration/normalize.go similarity index 90% rename from service/telemetry/internal/migration/normalize.go rename to service/telemetry/otelconftelemetry/internal/migration/normalize.go index 1f7ff8dfa8d..fb7af03c6d9 100644 --- a/service/telemetry/internal/migration/normalize.go +++ b/service/telemetry/otelconftelemetry/internal/migration/normalize.go @@ -1,7 +1,7 @@ // Copyright The OpenTelemetry Authors // SPDX-License-Identifier: Apache-2.0 -package migration // import "go.opentelemetry.io/collector/service/telemetry/internal/migration" +package migration // import "go.opentelemetry.io/collector/service/telemetry/otelconftelemetry/internal/migration" import "strings" diff --git a/service/telemetry/internal/migration/testdata/v0.2.0_logs.yaml b/service/telemetry/otelconftelemetry/internal/migration/testdata/v0.2.0_logs.yaml similarity index 100% rename from service/telemetry/internal/migration/testdata/v0.2.0_logs.yaml rename to service/telemetry/otelconftelemetry/internal/migration/testdata/v0.2.0_logs.yaml diff --git a/service/telemetry/internal/migration/testdata/v0.2.0_metrics.yaml b/service/telemetry/otelconftelemetry/internal/migration/testdata/v0.2.0_metrics.yaml similarity index 100% rename from service/telemetry/internal/migration/testdata/v0.2.0_metrics.yaml rename to service/telemetry/otelconftelemetry/internal/migration/testdata/v0.2.0_metrics.yaml diff --git a/service/telemetry/internal/migration/testdata/v0.2.0_traces.yaml b/service/telemetry/otelconftelemetry/internal/migration/testdata/v0.2.0_traces.yaml similarity index 100% rename from service/telemetry/internal/migration/testdata/v0.2.0_traces.yaml rename to service/telemetry/otelconftelemetry/internal/migration/testdata/v0.2.0_traces.yaml diff --git a/service/telemetry/internal/migration/testdata/v0.3.0_logs.yaml b/service/telemetry/otelconftelemetry/internal/migration/testdata/v0.3.0_logs.yaml similarity index 100% rename from service/telemetry/internal/migration/testdata/v0.3.0_logs.yaml rename to service/telemetry/otelconftelemetry/internal/migration/testdata/v0.3.0_logs.yaml diff --git a/service/telemetry/internal/migration/testdata/v0.3.0_metrics.yaml b/service/telemetry/otelconftelemetry/internal/migration/testdata/v0.3.0_metrics.yaml similarity index 100% rename from service/telemetry/internal/migration/testdata/v0.3.0_metrics.yaml rename to service/telemetry/otelconftelemetry/internal/migration/testdata/v0.3.0_metrics.yaml diff --git a/service/telemetry/internal/migration/testdata/v0.3.0_traces.yaml b/service/telemetry/otelconftelemetry/internal/migration/testdata/v0.3.0_traces.yaml similarity index 100% rename from service/telemetry/internal/migration/testdata/v0.3.0_traces.yaml rename to service/telemetry/otelconftelemetry/internal/migration/testdata/v0.3.0_traces.yaml diff --git a/service/telemetry/internal/migration/v0.2.0.go b/service/telemetry/otelconftelemetry/internal/migration/v0.2.0.go similarity index 99% rename from service/telemetry/internal/migration/v0.2.0.go rename to service/telemetry/otelconftelemetry/internal/migration/v0.2.0.go index 094b37a357b..06881cee8cd 100644 --- a/service/telemetry/internal/migration/v0.2.0.go +++ b/service/telemetry/otelconftelemetry/internal/migration/v0.2.0.go @@ -1,7 +1,7 @@ // Copyright The OpenTelemetry Authors // SPDX-License-Identifier: Apache-2.0 -package migration // import "go.opentelemetry.io/collector/service/telemetry/internal/migration" +package migration // import "go.opentelemetry.io/collector/service/telemetry/otelconftelemetry/internal/migration" import ( configv02 "go.opentelemetry.io/contrib/otelconf/v0.2.0" diff --git a/service/telemetry/internal/migration/v0.2.0_test.go b/service/telemetry/otelconftelemetry/internal/migration/v0.2.0_test.go similarity index 100% rename from service/telemetry/internal/migration/v0.2.0_test.go rename to service/telemetry/otelconftelemetry/internal/migration/v0.2.0_test.go diff --git a/service/telemetry/internal/migration/v0.3.0.go b/service/telemetry/otelconftelemetry/internal/migration/v0.3.0.go similarity index 99% rename from service/telemetry/internal/migration/v0.3.0.go rename to service/telemetry/otelconftelemetry/internal/migration/v0.3.0.go index ed2f37be80b..8d35fabe9b4 100644 --- a/service/telemetry/internal/migration/v0.3.0.go +++ b/service/telemetry/otelconftelemetry/internal/migration/v0.3.0.go @@ -1,7 +1,7 @@ // Copyright The OpenTelemetry Authors // SPDX-License-Identifier: Apache-2.0 -package migration // import "go.opentelemetry.io/collector/service/telemetry/internal/migration" +package migration // import "go.opentelemetry.io/collector/service/telemetry/otelconftelemetry/internal/migration" import ( "time" diff --git a/service/telemetry/internal/migration/v0.3.0_test.go b/service/telemetry/otelconftelemetry/internal/migration/v0.3.0_test.go similarity index 100% rename from service/telemetry/internal/migration/v0.3.0_test.go rename to service/telemetry/otelconftelemetry/internal/migration/v0.3.0_test.go diff --git a/service/telemetry/otelconftelemetry/metrics.go b/service/telemetry/otelconftelemetry/metrics.go index 2405b7255c9..82c76f31644 100644 --- a/service/telemetry/otelconftelemetry/metrics.go +++ b/service/telemetry/otelconftelemetry/metrics.go @@ -24,8 +24,9 @@ func createMeterProvider( if cfg.Metrics.Level == configtelemetry.LevelNone { set.Logger.Info("Internal metrics telemetry disabled") return noopMeterProvider{MeterProvider: noopmetric.NewMeterProvider()}, nil - } else if cfg.Metrics.Views == nil && set.DefaultViews != nil { - cfg.Metrics.Views = set.DefaultViews(cfg.Metrics.Level) + } else if cfg.Metrics.Views == nil && set.DefaultDroppedInstruments != nil { + selectors := set.DefaultDroppedInstruments(cfg.Metrics.Level) + cfg.Metrics.Views = buildViewsFromSelectors(selectors) } attrs := pcommonAttrsToOTelAttrs(set.Resource) @@ -47,3 +48,29 @@ type noopMeterProvider struct { func (noopMeterProvider) Shutdown(context.Context) error { return nil } + +// buildViewsFromSelectors converts InstrumentSelectors into views. +// +// Each selector is converted to a drop view that matches the specified +// meter and instrument name patterns. +func buildViewsFromSelectors(selectors []telemetry.InstrumentSelector) []config.View { + views := make([]config.View, len(selectors)) + for i, selector := range selectors { + viewSelector := &config.ViewSelector{} + if selector.MeterName != "" { + viewSelector.MeterName = ptr(selector.MeterName) + } + if selector.InstrumentName != "" { + viewSelector.InstrumentName = ptr(selector.InstrumentName) + } + views[i] = config.View{ + Selector: viewSelector, + Stream: &config.ViewStream{ + Aggregation: &config.ViewStreamAggregation{ + Drop: config.ViewStreamAggregationDrop{}, + }, + }, + } + } + return views +} diff --git a/service/telemetry/otelconftelemetry/metrics_test.go b/service/telemetry/otelconftelemetry/metrics_test.go index b4e0facdf27..6ce46585479 100644 --- a/service/telemetry/otelconftelemetry/metrics_test.go +++ b/service/telemetry/otelconftelemetry/metrics_test.go @@ -317,89 +317,133 @@ func TestInstrumentEnabled(t *testing.T) { assert.Implements(t, new(enabledInstrument), floatGauge) } -func TestTelemetryMetrics_DefaultViews(t *testing.T) { - type testcase struct { - configuredViews []config.View - expectedMeterNames []string +func TestTelemetryMetrics_DefaultDroppedInstrument(t *testing.T) { + defaultDroppedInstruments := func(level configtelemetry.Level) []telemetry.InstrumentSelector { + assert.Equal(t, configtelemetry.LevelDetailed, level) + return []telemetry.InstrumentSelector{{ + MeterName: "a", + }, { + InstrumentName: "b.count*", + }, { + MeterName: "c", + InstrumentName: "*.histogram", + }} } - defaultViews := func(level configtelemetry.Level) []config.View { - assert.Equal(t, configtelemetry.LevelDetailed, level) - return []config.View{{ - Selector: &config.ViewSelector{ - MeterName: ptr("a"), - }, - Stream: &config.ViewStream{ - Aggregation: &config.ViewStreamAggregation{ - Drop: config.ViewStreamAggregationDrop{}, + var metrics pmetric.Metrics + srv := httptest.NewServer(http.HandlerFunc(func(_ http.ResponseWriter, req *http.Request) { + body, err := io.ReadAll(req.Body) + assert.NoError(t, err) + + exportRequest := pmetricotlp.NewExportRequest() + assert.NoError(t, exportRequest.UnmarshalProto(body)) + metrics = exportRequest.Metrics() + })) + defer srv.Close() + + cfg := createDefaultConfig().(*Config) + cfg.Metrics.Level = configtelemetry.LevelDetailed + cfg.Metrics.Readers = []config.MetricReader{{ + Periodic: &config.PeriodicMetricReader{ + Exporter: config.PushMetricExporter{ + OTLP: &config.OTLPMetric{ + Endpoint: ptr(srv.URL), + Protocol: ptr("http/protobuf"), + Insecure: ptr(true), }, }, - }} + }, + }} + + factory := NewFactory() + settings := telemetry.MeterSettings{DefaultDroppedInstruments: defaultDroppedInstruments} + provider, err := factory.CreateMeterProvider(t.Context(), settings, cfg) + require.NoError(t, err) + + for _, meterName := range []string{"a", "b", "c"} { + counter, _ := provider.Meter(meterName).Int64Counter(meterName + ".counter") + counter.Add(t.Context(), 1) + + gauge, _ := provider.Meter(meterName).Int64Gauge(meterName + ".gauge") + gauge.Record(t.Context(), 2) + + histogram, _ := provider.Meter(meterName).Float64Histogram(meterName + ".histogram") + histogram.Record(t.Context(), 3) + } + require.NoError(t, provider.Shutdown(t.Context())) // should flush metrics + + var metricNames []string + for _, rm := range metrics.ResourceMetrics().All() { + for _, sm := range rm.ScopeMetrics().All() { + for _, metric := range sm.Metrics().All() { + metricNames = append(metricNames, metric.Name()) + } + } } + assert.ElementsMatch(t, []string{ + "b.gauge", + "b.histogram", + "c.counter", + "c.gauge", + }, metricNames) +} + +func TestTelemetryMetrics_DefaultDroppedInstruments_ViewsConfig(t *testing.T) { + var metrics pmetric.Metrics + srv := httptest.NewServer(http.HandlerFunc(func(_ http.ResponseWriter, req *http.Request) { + body, err := io.ReadAll(req.Body) + assert.NoError(t, err) + + exportRequest := pmetricotlp.NewExportRequest() + assert.NoError(t, exportRequest.UnmarshalProto(body)) + metrics = exportRequest.Metrics() + })) + defer srv.Close() - for name, tc := range map[string]testcase{ - "no_configured_views": { - expectedMeterNames: []string{"b", "c"}, + cfg := createDefaultConfig().(*Config) + cfg.Metrics.Level = configtelemetry.LevelDetailed + cfg.Metrics.Views = []config.View{{ + Selector: &config.ViewSelector{ + MeterName: ptr("b"), }, - "configured_views": { - configuredViews: []config.View{{ - Selector: &config.ViewSelector{ - MeterName: ptr("b"), - }, - Stream: &config.ViewStream{ - Aggregation: &config.ViewStreamAggregation{ - Drop: config.ViewStreamAggregationDrop{}, - }, - }, - }}, - expectedMeterNames: []string{"a", "c"}, + Stream: &config.ViewStream{ + Aggregation: &config.ViewStreamAggregation{ + Drop: config.ViewStreamAggregationDrop{}, + }, }, - } { - t.Run(name, func(t *testing.T) { - var metrics pmetric.Metrics - srv := httptest.NewServer(http.HandlerFunc(func(_ http.ResponseWriter, req *http.Request) { - body, err := io.ReadAll(req.Body) - assert.NoError(t, err) - - exportRequest := pmetricotlp.NewExportRequest() - assert.NoError(t, exportRequest.UnmarshalProto(body)) - metrics = exportRequest.Metrics() - })) - defer srv.Close() - - cfg := createDefaultConfig().(*Config) - cfg.Metrics.Level = configtelemetry.LevelDetailed - cfg.Metrics.Views = tc.configuredViews - cfg.Metrics.Readers = []config.MetricReader{{ - Periodic: &config.PeriodicMetricReader{ - Exporter: config.PushMetricExporter{ - OTLP: &config.OTLPMetric{ - Endpoint: ptr(srv.URL), - Protocol: ptr("http/protobuf"), - Insecure: ptr(true), - }, - }, + }} + cfg.Metrics.Readers = []config.MetricReader{{ + Periodic: &config.PeriodicMetricReader{ + Exporter: config.PushMetricExporter{ + OTLP: &config.OTLPMetric{ + Endpoint: ptr(srv.URL), + Protocol: ptr("http/protobuf"), + Insecure: ptr(true), }, - }} + }, + }, + }} - factory := NewFactory() - settings := telemetry.MeterSettings{DefaultViews: defaultViews} - provider, err := factory.CreateMeterProvider(t.Context(), settings, cfg) - require.NoError(t, err) + factory := NewFactory() + settings := telemetry.MeterSettings{ + DefaultDroppedInstruments: func(configtelemetry.Level) []telemetry.InstrumentSelector { + panic("DefaultDroppedInstruments function should not be called when views are configured") + }, + } + provider, err := factory.CreateMeterProvider(t.Context(), settings, cfg) + require.NoError(t, err) - for _, meterName := range []string{"a", "b", "c"} { - counter, _ := provider.Meter(meterName).Int64Counter(meterName + ".counter") - counter.Add(t.Context(), 1) - } - require.NoError(t, provider.Shutdown(t.Context())) // should flush metrics + for _, meterName := range []string{"a", "b", "c"} { + counter, _ := provider.Meter(meterName).Int64Counter(meterName + ".counter") + counter.Add(t.Context(), 1) + } + require.NoError(t, provider.Shutdown(t.Context())) // should flush metrics - var scopes []string - for _, rm := range metrics.ResourceMetrics().All() { - for _, sm := range rm.ScopeMetrics().All() { - scopes = append(scopes, sm.Scope().Name()) - } - } - assert.ElementsMatch(t, tc.expectedMeterNames, scopes) - }) + var scopes []string + for _, rm := range metrics.ResourceMetrics().All() { + for _, sm := range rm.ScopeMetrics().All() { + scopes = append(scopes, sm.Scope().Name()) + } } + assert.ElementsMatch(t, []string{"a", "c"}, scopes) } diff --git a/service/telemetry/telemetry.go b/service/telemetry/telemetry.go index fcc0d6cf0cb..4f96348a966 100644 --- a/service/telemetry/telemetry.go +++ b/service/telemetry/telemetry.go @@ -6,7 +6,6 @@ package telemetry // import "go.opentelemetry.io/collector/service/telemetry" import ( "context" - otelconf "go.opentelemetry.io/contrib/otelconf/v0.3.0" "go.opentelemetry.io/otel/metric" noopmetric "go.opentelemetry.io/otel/metric/noop" "go.opentelemetry.io/otel/trace" @@ -46,15 +45,27 @@ type MeterSettings struct { // for logging its internal operations. Logger *zap.Logger - // DefaultViews holds a function that returns default metric - // views for the given internal telemetry metrics level. + // DefaultDroppedInstruments holds a function that takes the configured + // metrics telemetry level, and returns a list of selectors that + // indicate which instruments should be dropped by default. // - // The meter provider is expected to use this if no user-provided - // view configuration is supplied. + // The meter provider implementation is expected to use this to create + // appropriate views if and only if no user-provided view configuration + // is supplied. + DefaultDroppedInstruments func(level configtelemetry.Level) []InstrumentSelector +} + +// InstrumentSelector holds parameters for selecting a metric instrument. +type InstrumentSelector struct { + // MeterName is a wildcard pattern for matching meter names. + // + // If MeterName is empty, it matches all meter names. + MeterName string + + // InstrumentName is a wildcard pattern for matching instrument names. // - // TODO we should not use otelconf.View directly here, change - // to something independent of otelconf. - DefaultViews func(configtelemetry.Level) []otelconf.View + // If InstrumentName is empty, it matches all instrument names. + InstrumentName string } // TracerSettings holds settings for building tracer providers. diff --git a/service/telemetry/telemetrytest/go.mod b/service/telemetry/telemetrytest/go.mod index 80ebdce0013..6cb1e66d254 100644 --- a/service/telemetry/telemetrytest/go.mod +++ b/service/telemetry/telemetrytest/go.mod @@ -13,57 +13,18 @@ require ( ) require ( - github.com/beorn7/perks v1.0.1 // indirect - github.com/cenkalti/backoff/v5 v5.0.3 // indirect github.com/cespare/xxhash/v2 v2.3.0 // indirect github.com/davecgh/go-spew v1.1.1 // indirect - github.com/go-logr/logr v1.4.3 // indirect - github.com/go-logr/stdr v1.2.2 // indirect - github.com/google/uuid v1.6.0 // indirect - github.com/grafana/regexp v0.0.0-20240518133315-a468a5bfb3bc // indirect - github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.2 // indirect github.com/hashicorp/go-version v1.8.0 // indirect github.com/json-iterator/go v1.1.12 // indirect github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect github.com/modern-go/reflect2 v1.0.3-0.20250322232337-35a7c28c31ee // indirect - github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect - github.com/prometheus/client_golang v1.23.2 // indirect - github.com/prometheus/client_model v0.6.2 // indirect - github.com/prometheus/common v0.67.1 // indirect - github.com/prometheus/otlptranslator v0.0.2 // indirect - github.com/prometheus/procfs v0.17.0 // indirect - go.opentelemetry.io/auto/sdk v1.2.1 // indirect + github.com/rogpeppe/go-internal v1.14.1 // indirect go.opentelemetry.io/collector/config/configtelemetry v0.142.0 // indirect go.opentelemetry.io/collector/featuregate v1.48.0 // indirect - go.opentelemetry.io/contrib/otelconf v0.18.0 // indirect go.opentelemetry.io/otel v1.39.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 - go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.38.0 // indirect - go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.38.0 // indirect - go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.38.0 // indirect - go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.38.0 // indirect - go.opentelemetry.io/otel/exporters/prometheus v0.60.0 // indirect - go.opentelemetry.io/otel/exporters/stdout/stdoutlog v0.14.0 // indirect - go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.38.0 // indirect - go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.38.0 // indirect - go.opentelemetry.io/otel/log v0.15.0 // indirect - go.opentelemetry.io/otel/sdk v1.39.0 // indirect - go.opentelemetry.io/otel/sdk/log v0.14.0 // indirect - go.opentelemetry.io/otel/sdk/metric v1.39.0 // indirect - go.opentelemetry.io/proto/otlp v1.7.1 // indirect go.uber.org/multierr v1.11.0 // indirect - go.yaml.in/yaml/v2 v2.4.3 // indirect - go.yaml.in/yaml/v3 v3.0.4 // indirect - golang.org/x/net v0.48.0 // indirect - golang.org/x/sys v0.39.0 // indirect - golang.org/x/text v0.32.0 // indirect - google.golang.org/genproto/googleapis/api v0.0.0-20251022142026-3a174f9686a8 // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20251022142026-3a174f9686a8 // indirect - google.golang.org/grpc v1.77.0 // indirect - google.golang.org/protobuf v1.36.11 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/service/telemetry/telemetrytest/go.sum b/service/telemetry/telemetrytest/go.sum index 4e14c40281b..7228f36f9dc 100644 --- a/service/telemetry/telemetrytest/go.sum +++ b/service/telemetry/telemetrytest/go.sum @@ -1,60 +1,31 @@ -github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= -github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= -github.com/cenkalti/backoff/v5 v5.0.3 h1:ZN+IMa753KfX5hd8vVaMixjnqRZ3y8CuJKRKj1xcsSM= -github.com/cenkalti/backoff/v5 v5.0.3/go.mod h1:rkhZdG3JZukswDf7f0cwqPNk4K0sa+F97BxZthm/crw= github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs= github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= github.com/go-logr/logr v1.4.3 h1:CjnDlHq8ikf6E492q6eKboGOC0T8CDaOvkHCIg8idEI= github.com/go-logr/logr v1.4.3/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= -github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek= -github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps= github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8= github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= -github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= -github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/grafana/regexp v0.0.0-20240518133315-a468a5bfb3bc h1:GN2Lv3MGO7AS6PrRoT6yV5+wkrOpcszoIsO4+4ds248= -github.com/grafana/regexp v0.0.0-20240518133315-a468a5bfb3bc/go.mod h1:+JKpmjMGhpgPL+rXZ5nsZieVzvarn86asRlBg4uNGnk= -github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.2 h1:8Tjv8EJ+pM1xP8mK6egEbD1OgnVTyacbefKhmbLhIhU= -github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.2/go.mod h1:pkJQ2tZHJ0aFOVEEot6oZmaVEZcRme73eIFmhiVuRWs= github.com/hashicorp/go-version v1.8.0 h1:KAkNb1HAiZd1ukkxDFGmokVZe1Xy9HG6NUp+bPle2i4= github.com/hashicorp/go-version v1.8.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= -github.com/klauspost/compress v1.18.2 h1:iiPHWW0YrcFgpBYhsA6D1+fqHssJscY/Tm/y2Uqnapk= -github.com/klauspost/compress v1.18.2/go.mod h1:R0h/fSBs8DE4ENlcrlib3PsXS61voFxhIs2DeRhCvJ4= github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= -github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc= -github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= github.com/modern-go/reflect2 v1.0.3-0.20250322232337-35a7c28c31ee h1:W5t00kpgFdJifH4BDsTlE89Zl93FEloxaWZfGcifgq8= github.com/modern-go/reflect2 v1.0.3-0.20250322232337-35a7c28c31ee/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= -github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA= -github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/prometheus/client_golang v1.23.2 h1:Je96obch5RDVy3FDMndoUsjAhG5Edi49h0RJWRi/o0o= -github.com/prometheus/client_golang v1.23.2/go.mod h1:Tb1a6LWHB3/SPIzCoaDXI4I8UHKeFTEQ1YCr+0Gyqmg= -github.com/prometheus/client_model v0.6.2 h1:oBsgwpGs7iVziMvrGhE53c/GrLUsZdHnqNwqPLxwZyk= -github.com/prometheus/client_model v0.6.2/go.mod h1:y3m2F6Gdpfy6Ut/GBsUqTWZqCUvMVzSfMLjcu6wAwpE= -github.com/prometheus/common v0.67.1 h1:OTSON1P4DNxzTg4hmKCc37o4ZAZDv0cfXLkOt0oEowI= -github.com/prometheus/common v0.67.1/go.mod h1:RpmT9v35q2Y+lsieQsdOh5sXZ6ajUGC8NjZAmr8vb0Q= -github.com/prometheus/otlptranslator v0.0.2 h1:+1CdeLVrRQ6Psmhnobldo0kTp96Rj80DRXRd5OSnMEQ= -github.com/prometheus/otlptranslator v0.0.2/go.mod h1:P8AwMgdD7XEr6QRUJ2QWLpiAZTgTE2UYgjlu3svompI= -github.com/prometheus/procfs v0.17.0 h1:FuLQ+05u4ZI+SS/w9+BWEM2TXiHKsUQ9TADiRH7DuK0= -github.com/prometheus/procfs v0.17.0/go.mod h1:oPQLaDAMRbA+u8H5Pbfq+dl3VDAvHxMUOVhe0wYB2zw= github.com/rogpeppe/go-internal v1.14.1 h1:UQB4HGPB6osV0SQTLymcB4TgvyWu6ZyliaW0tI/otEQ= github.com/rogpeppe/go-internal v1.14.1/go.mod h1:MaRKkUm5W0goXpeCfT7UZI6fk/L7L7so1lCWt35ZSgc= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= @@ -63,48 +34,12 @@ 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/contrib/otelconf v0.18.0 h1:ciF2Gf00BWs0DnexKFZXcxg9kJ8r3SUW1LOzW3CsKA8= -go.opentelemetry.io/contrib/otelconf v0.18.0/go.mod h1:FcP7k+JLwBLdOxS6qY6VQ/4b5VBntI6L6o80IMwhAeI= go.opentelemetry.io/otel v1.39.0 h1:8yPrr/S0ND9QEfTfdP9V+SiwT4E0G7Y5MO7p85nis48= go.opentelemetry.io/otel v1.39.0/go.mod h1:kLlFTywNWrFyEdH0oj2xK0bFYZtHRYUdv1NklR/tgc8= -go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc v0.14.0 h1:OMqPldHt79PqWKOMYIAQs3CxAi7RLgPxwfFSwr4ZxtM= -go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc v0.14.0/go.mod h1:1biG4qiqTxKiUCtoWDPpL3fB3KxVwCiGw81j3nKMuHE= -go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.14.0 h1:QQqYw3lkrzwVsoEX0w//EhH/TCnpRdEenKBOOEIMjWc= -go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.14.0/go.mod h1:gSVQcr17jk2ig4jqJ2DX30IdWH251JcNAecvrqTxH1s= -go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.38.0 h1:vl9obrcoWVKp/lwl8tRE33853I8Xru9HFbw/skNeLs8= -go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.38.0/go.mod h1:GAXRxmLJcVM3u22IjTg74zWBrRCKq8BnOqUVLodpcpw= -go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.38.0 h1:Oe2z/BCg5q7k4iXC3cqJxKYg0ieRiOqF0cecFYdPTwk= -go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.38.0/go.mod h1:ZQM5lAJpOsKnYagGg/zV2krVqTtaVdYdDkhMoX6Oalg= -go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.38.0 h1:GqRJVj7UmLjCVyVJ3ZFLdPRmhDUp2zFmQe3RHIOsw24= -go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.38.0/go.mod h1:ri3aaHSmCTVYu2AWv44YMauwAQc0aqI9gHKIcSbI1pU= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.38.0 h1:lwI4Dc5leUqENgGuQImwLo4WnuXFPetmPpkLi2IrX54= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.38.0/go.mod h1:Kz/oCE7z5wuyhPxsXDuaPteSWqjSBD5YaSdbxZYGbGk= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.38.0 h1:aTL7F04bJHUlztTsNGJ2l+6he8c+y/b//eR0jjjemT4= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.38.0/go.mod h1:kldtb7jDTeol0l3ewcmd8SDvx3EmIE7lyvqbasU3QC4= -go.opentelemetry.io/otel/exporters/prometheus v0.60.0 h1:cGtQxGvZbnrWdC2GyjZi0PDKVSLWP/Jocix3QWfXtbo= -go.opentelemetry.io/otel/exporters/prometheus v0.60.0/go.mod h1:hkd1EekxNo69PTV4OWFGZcKQiIqg0RfuWExcPKFvepk= -go.opentelemetry.io/otel/exporters/stdout/stdoutlog v0.14.0 h1:B/g+qde6Mkzxbry5ZZag0l7QrQBCtVm7lVjaLgmpje8= -go.opentelemetry.io/otel/exporters/stdout/stdoutlog v0.14.0/go.mod h1:mOJK8eMmgW6ocDJn6Bn11CcZ05gi3P8GylBXEkZtbgA= -go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.38.0 h1:wm/Q0GAAykXv83wzcKzGGqAnnfLFyFe7RslekZuv+VI= -go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.38.0/go.mod h1:ra3Pa40+oKjvYh+ZD3EdxFZZB0xdMfuileHAm4nNN7w= -go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.38.0 h1:kJxSDN4SgWWTjG/hPp3O7LCGLcHXFlvS2/FFOrwL+SE= -go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.38.0/go.mod h1:mgIOzS7iZeKJdeB8/NYHrJ48fdGc71Llo5bJ1J4DWUE= -go.opentelemetry.io/otel/log v0.15.0 h1:0VqVnc3MgyYd7QqNVIldC3dsLFKgazR6P3P3+ypkyDY= -go.opentelemetry.io/otel/log v0.15.0/go.mod h1:9c/G1zbyZfgu1HmQD7Qj84QMmwTp2QCQsZH1aeoWDE4= go.opentelemetry.io/otel/metric v1.39.0 h1:d1UzonvEZriVfpNKEVmHXbdf909uGTOQjA0HF0Ls5Q0= go.opentelemetry.io/otel/metric v1.39.0/go.mod h1:jrZSWL33sD7bBxg1xjrqyDjnuzTUB0x1nBERXd7Ftcs= -go.opentelemetry.io/otel/sdk v1.39.0 h1:nMLYcjVsvdui1B/4FRkwjzoRVsMK8uL/cj0OyhKzt18= -go.opentelemetry.io/otel/sdk v1.39.0/go.mod h1:vDojkC4/jsTJsE+kh+LXYQlbL8CgrEcwmt1ENZszdJE= -go.opentelemetry.io/otel/sdk/log v0.14.0 h1:JU/U3O7N6fsAXj0+CXz21Czg532dW2V4gG1HE/e8Zrg= -go.opentelemetry.io/otel/sdk/log v0.14.0/go.mod h1:imQvII+0ZylXfKU7/wtOND8Hn4OpT3YUoIgqJVksUkM= -go.opentelemetry.io/otel/sdk/log/logtest v0.14.0 h1:Ijbtz+JKXl8T2MngiwqBlPaHqc4YCaP/i13Qrow6gAM= -go.opentelemetry.io/otel/sdk/log/logtest v0.14.0/go.mod h1:dCU8aEL6q+L9cYTqcVOk8rM9Tp8WdnHOPLiBgp0SGOA= -go.opentelemetry.io/otel/sdk/metric v1.39.0 h1:cXMVVFVgsIf2YL6QkRF4Urbr/aMInf+2WKg+sEJTtB8= -go.opentelemetry.io/otel/sdk/metric v1.39.0/go.mod h1:xq9HEVH7qeX69/JnwEfp6fVq5wosJsY1mt4lLfYdVew= go.opentelemetry.io/otel/trace v1.39.0 h1:2d2vfpEDmCJ5zVYz7ijaJdOF59xLomrvj7bjt6/qCJI= go.opentelemetry.io/otel/trace v1.39.0/go.mod h1:88w4/PnZSazkGzz/w84VHpQafiU4EtqqlVdxWy+rNOA= -go.opentelemetry.io/proto/otlp v1.7.1 h1:gTOMpGDb0WTBOP8JaO72iL3auEZhVmAQg4ipjOVAtj4= -go.opentelemetry.io/proto/otlp v1.7.1/go.mod h1:b2rVh6rfI/s2pHWNlB7ILJcRALpcNDzKhACevjI+ZnE= go.opentelemetry.io/proto/slim/otlp v1.9.0 h1:fPVMv8tP3TrsqlkH1HWYUpbCY9cAIemx184VGkS6vlE= go.opentelemetry.io/proto/slim/otlp v1.9.0/go.mod h1:xXdeJJ90Gqyll+orzUkY4bOd2HECo5JofeoLpymVqdI= go.opentelemetry.io/proto/slim/otlp/collector/profiles/v1development v0.2.0 h1:o13nadWDNkH/quoDomDUClnQBpdQQ2Qqv0lQBjIXjE8= @@ -117,24 +52,6 @@ go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= go.uber.org/zap v1.27.1 h1:08RqriUEv8+ArZRYSTXy1LeBScaMpVSTBhCeaZYfMYc= go.uber.org/zap v1.27.1/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E= -go.yaml.in/yaml/v2 v2.4.3 h1:6gvOSjQoTB3vt1l+CU+tSyi/HOjfOjRLJ4YwYZGwRO0= -go.yaml.in/yaml/v2 v2.4.3/go.mod h1:zSxWcmIDjOzPXpjlTTbAsKokqkDNAVtZO0WOMiT90s8= -go.yaml.in/yaml/v3 v3.0.4 h1:tfq32ie2Jv2UxXFdLJdh3jXuOzWiL1fo0bu/FbuKpbc= -go.yaml.in/yaml/v3 v3.0.4/go.mod h1:DhzuOOF2ATzADvBadXxruRBLzYTpT36CKvDb3+aBEFg= -golang.org/x/net v0.48.0 h1:zyQRTTrjc33Lhh0fBgT/H3oZq9WuvRR5gPC70xpDiQU= -golang.org/x/net v0.48.0/go.mod h1:+ndRgGjkh8FGtu1w1FGbEC31if4VrNVMuKTgcAAnQRY= -golang.org/x/sys v0.39.0 h1:CvCKL8MeisomCi6qNZ+wbb0DN9E5AATixKsvNtMoMFk= -golang.org/x/sys v0.39.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks= -golang.org/x/text v0.32.0 h1:ZD01bjUt1FQ9WJ0ClOL5vxgxOI/sVCNgX1YtKwcY0mU= -golang.org/x/text v0.32.0/go.mod h1:o/rUWzghvpD5TXrTIBuJU77MTaN0ljMWE47kxGJQ7jY= -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/api v0.0.0-20251022142026-3a174f9686a8 h1:mepRgnBZa07I4TRuomDE4sTIYieg/osKmzIf4USdWS4= -google.golang.org/genproto/googleapis/api v0.0.0-20251022142026-3a174f9686a8/go.mod h1:fDMmzKV90WSg1NbozdqrE64fkuTv6mlq2zxo9ad+3yo= -google.golang.org/genproto/googleapis/rpc v0.0.0-20251022142026-3a174f9686a8 h1:M1rk8KBnUsBDg1oPGHNCxG4vc1f49epmTO7xscSajMk= -google.golang.org/genproto/googleapis/rpc v0.0.0-20251022142026-3a174f9686a8/go.mod h1:7i2o+ce6H/6BluujYR+kqX3GKH+dChPTQU19wjRPiGk= -google.golang.org/grpc v1.77.0 h1:wVVY6/8cGA6vvffn+wWK5ToddbgdU3d8MNENr4evgXM= -google.golang.org/grpc v1.77.0/go.mod h1:z0BY1iVj0q8E1uSQCjL9cppRj+gnZjzDnzV0dHhrNig= google.golang.org/protobuf v1.36.11 h1:fV6ZwhNocDyBLK0dj+fg8ektcVegBBuEolpbTQyBNVE= google.golang.org/protobuf v1.36.11/go.mod h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=