From ddacaec2b5aac063658c8724389d3c31892b0074 Mon Sep 17 00:00:00 2001 From: Robert Fratto Date: Wed, 20 Mar 2024 08:25:11 -0400 Subject: [PATCH 1/4] add announcement that prometheus.exporter.vsphere was deprecated in v0.40 (#6731) The intent was the prometheus.exporter.vsphere was deprecated in v0.40, but this was mistakenly omitted from the release. This commit adds the deprecation notice. --- CHANGELOG.md | 4 +++- .../components/prometheus.exporter.vsphere.md | 10 +++++++--- docs/sources/flow/release-notes.md | 14 ++++++++------ 3 files changed, 18 insertions(+), 10 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9b754161a2..b7170b58c2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -108,7 +108,9 @@ v0.40.0 (2024-02-27) ### Deprecations -- Module components have been deprecated in favor of import and declare configuration blocks. These deprecated components will be removed in the next release. (@wildum) +- Module components have been deprecated in favor of import and declare configuration blocks. These deprecated components will be removed in a future release. (@wildum) + +- `prometheus.exporter.vsphere` has been deprecated in favor of `otelcol.receiver.vcenter`. This deprecated component will be removed in a future release. (@rfratto) ### Features diff --git a/docs/sources/flow/reference/components/prometheus.exporter.vsphere.md b/docs/sources/flow/reference/components/prometheus.exporter.vsphere.md index 558eff9f90..6cb16c8ec5 100644 --- a/docs/sources/flow/reference/components/prometheus.exporter.vsphere.md +++ b/docs/sources/flow/reference/components/prometheus.exporter.vsphere.md @@ -9,15 +9,19 @@ title: prometheus.exporter.vsphere description: Learn about prometheus.exporter.vsphere --- -# prometheus.exporter.vsphere +# prometheus.exporter.vsphere (deprecated) -The `prometheus.exporter.vsphere` component embeds [`vmware_exporter`](https://github.com/grafana/vmware_exporter) to collect vSphere metrics +{{< admonition type="caution" >}} +Starting with release v0.40, `prometheus.exporter.vsphere` is deprecated. Consider using `otelcol.receiver.vcenter` instead. +`prometheus.exporter.vsphere` will be removed in a future release. +{{< /admonition >}} + +The `prometheus.exporter.vsphere` component embeds [`vmware_exporter`](https://github.com/grafana/vmware_exporter) to collect vSphere metrics. > **NOTE**: We recommend to use [otelcol.receiver.vcenter][] instead. [otelcol.receiver.vcenter]: {{< relref "./otelcol.receiver.vcenter.md" >}} - ## Usage ```river diff --git a/docs/sources/flow/release-notes.md b/docs/sources/flow/release-notes.md index 3f2dffacf9..b5e311127a 100644 --- a/docs/sources/flow/release-notes.md +++ b/docs/sources/flow/release-notes.md @@ -36,10 +36,6 @@ Other release notes for the different {{< param "PRODUCT_ROOT_NAME" >}} variants The default listen port for `otelcol.receiver.opencensus` has changed from 4317 to 55678 to align with the upstream defaults. To retain the previous listen port, explicitly set the `endpoint` argument to `0.0.0.0:4317` before upgrading. -### Breaking change: classic modules have been removed - -Classic modules (the `module.git`, `module.file`, `module.http`, and `module.string` components) were initially deprecated in v0.40 in favor of the `import` and `declare` configuration blocks, and have been removed as of this release. - ## v0.40 ### Breaking change: Prohibit the configuration of services within modules. @@ -57,11 +53,17 @@ If you need to see high cardinality metrics containing labels such as IP address The name `prometheus.exporter.agent` is potentially ambiguous and can be misinterpreted as an exporter for Prometheus Agent. The new name reflects the component's true purpose as an exporter of the process's own metrics. -### Deprecation: classic modules have been deprecated and will be removed in the next release +### Deprecation: classic modules have been deprecated and will be removed in a future release Classic modules (the `module.git`, `module.file`, `module.http`, and `module.string` components) have been deprecated in favor of the new `import` and `declare` configuration blocks. -Support for classic modules will be removed in the next release. +Support for classic modules will be removed in a future release. + +### Deprecation: `prometheus.exporter.vsphere` is deprecated and will be removed in a future release + +The `prometheus.exporter.vsphere` component has been deprecated in favor of `otelcol.receiver.vcenter`. + +Support for `prometheus.exporter.vsphere` will be removed in a future release. ## v0.39 From 017cbd2d735097550810de5ed8dbafc32190763d Mon Sep 17 00:00:00 2001 From: Piotr <17101802+thampiotr@users.noreply.github.com> Date: Thu, 21 Mar 2024 10:32:29 +0000 Subject: [PATCH 2/4] Fix incorrect clustering beta labels (#6740) --- .../flow/reference/components/loki.source.kubernetes.md | 4 ++-- docs/sources/flow/reference/components/loki.source.podlogs.md | 4 ++-- .../components/prometheus.operator.servicemonitors.md | 4 ++-- docs/sources/flow/reference/components/prometheus.scrape.md | 4 ++-- docs/sources/flow/reference/components/pyroscope.scrape.md | 4 ++-- 5 files changed, 10 insertions(+), 10 deletions(-) diff --git a/docs/sources/flow/reference/components/loki.source.kubernetes.md b/docs/sources/flow/reference/components/loki.source.kubernetes.md index 66194a3db4..eb79e6cf81 100644 --- a/docs/sources/flow/reference/components/loki.source.kubernetes.md +++ b/docs/sources/flow/reference/components/loki.source.kubernetes.md @@ -94,7 +94,7 @@ inside a `client` block. [authorization]: #authorization-block [oauth2]: #oauth2-block [tls_config]: #tls_config-block -[clustering]: #clustering-beta +[clustering]: #clustering-block ### client block @@ -143,7 +143,7 @@ Name | Type | Description {{< docs/shared lookup="flow/reference/components/tls-config-block.md" source="agent" version="" >}} -### clustering (beta) +### clustering block Name | Type | Description | Default | Required ---- | ---- | ----------- | ------- | -------- diff --git a/docs/sources/flow/reference/components/loki.source.podlogs.md b/docs/sources/flow/reference/components/loki.source.podlogs.md index 7c204593b2..5220c43e37 100644 --- a/docs/sources/flow/reference/components/loki.source.podlogs.md +++ b/docs/sources/flow/reference/components/loki.source.podlogs.md @@ -157,7 +157,7 @@ inside a `client` block. [tls_config]: #tls_config-block [selector]: #selector-block [match_expression]: #match_expression-block -[clustering]: #clustering-beta +[clustering]: #clustering-block ### client block @@ -242,7 +242,7 @@ The `operator` argument must be one of the following strings: Both `selector` and `namespace_selector` can make use of multiple `match_expression` inner blocks which are treated as AND clauses. -### clustering (beta) +### clustering block Name | Type | Description | Default | Required ---- | ---- | ----------- | ------- | -------- diff --git a/docs/sources/flow/reference/components/prometheus.operator.servicemonitors.md b/docs/sources/flow/reference/components/prometheus.operator.servicemonitors.md index b3e89eee32..24a1b886aa 100644 --- a/docs/sources/flow/reference/components/prometheus.operator.servicemonitors.md +++ b/docs/sources/flow/reference/components/prometheus.operator.servicemonitors.md @@ -75,7 +75,7 @@ inside a `client` block. [match_expression]: #match_expression-block [rule]: #rule-block [scrape]: #scrape-block -[clustering]: #clustering-beta +[clustering]: #clustering-block ### client block @@ -164,7 +164,7 @@ The `operator` argument must be one of the following strings: If there are multiple `match_expressions` blocks inside of a `selector` block, they are combined together with AND clauses. -### clustering (beta) +### clustering block Name | Type | Description | Default | Required ---- | ---- | ----------- | ------- | -------- diff --git a/docs/sources/flow/reference/components/prometheus.scrape.md b/docs/sources/flow/reference/components/prometheus.scrape.md index e329bfe4e5..6cd15ddb25 100644 --- a/docs/sources/flow/reference/components/prometheus.scrape.md +++ b/docs/sources/flow/reference/components/prometheus.scrape.md @@ -118,7 +118,7 @@ an `oauth2` block. [authorization]: #authorization-block [oauth2]: #oauth2-block [tls_config]: #tls_config-block -[clustering]: #clustering-beta +[clustering]: #clustering-block ### basic_auth block @@ -136,7 +136,7 @@ an `oauth2` block. {{< docs/shared lookup="flow/reference/components/tls-config-block.md" source="agent" version="" >}} -### clustering (beta) +### clustering block Name | Type | Description | Default | Required ---- | ---- | ----------- | ------- | -------- diff --git a/docs/sources/flow/reference/components/pyroscope.scrape.md b/docs/sources/flow/reference/components/pyroscope.scrape.md index 813035c8e2..9d00df3a8c 100644 --- a/docs/sources/flow/reference/components/pyroscope.scrape.md +++ b/docs/sources/flow/reference/components/pyroscope.scrape.md @@ -210,7 +210,7 @@ the defaults documented in [profile.mutex][] will be used. [profile.godeltaprof_block]: #profilegodeltaprof_block-block [profile.custom]: #profilecustom-block [pprof]: https://github.com/google/pprof/blob/main/doc/README.md -[clustering]: #clustering-beta +[clustering]: #clustering-block [fgprof]: https://github.com/felixge/fgprof [godeltaprof]: https://github.com/grafana/pyroscope-go/tree/main/godeltaprof @@ -389,7 +389,7 @@ Name | Type | Description | Default | Required When the `delta` argument is `true`, a `seconds` query parameter is automatically added to requests. The `seconds` used will be equal to `scrape_interval - 1`. -### clustering (beta) +### clustering block Name | Type | Description | Default | Required ---- | ---- | ----------- | ------- | -------- From 7b0ff9a5f9b9e9c3f3b4a410e5288232e24b753e Mon Sep 17 00:00:00 2001 From: Erik Baranowski <39704712+erikbaranowski@users.noreply.github.com> Date: Thu, 21 Mar 2024 10:12:45 -0400 Subject: [PATCH 3/4] Fix an issue where the default values of some component's arguments change whenever that argument is explicitly configured (#6730) * Fix an issue where the default values of some component's arguments change whenever that argument is explicitly configured. Signed-off-by: erikbaranowski <39704712+erikbaranowski@users.noreply.github.com> * component/all: add test to verify SetToDefault do not share pointers --------- Signed-off-by: erikbaranowski <39704712+erikbaranowski@users.noreply.github.com> Co-authored-by: Robert Fratto --- CHANGELOG.md | 4 + go.mod | 1 - go.sum | 3 - internal/component/all/all_test.go | 176 ++++++++++++++++++ .../component/discovery/kubelet/kubelet.go | 16 +- .../discovery/kubelet/kubelet_test.go | 12 +- internal/component/faro/receiver/arguments.go | 57 +++--- .../component/otelcol/config_debug_metrics.go | 9 +- internal/component/otelcol/config_queue.go | 25 ++- internal/component/otelcol/config_retry.go | 19 +- .../otelcol/connector/host_info/host_info.go | 11 +- .../connector/servicegraph/servicegraph.go | 85 ++++----- .../otelcol/exporter/exporter_test.go | 4 +- .../exporter/loadbalancing/loadbalancing.go | 59 +++--- .../otelcol/exporter/logging/logging.go | 15 +- .../component/otelcol/exporter/otlp/otlp.go | 34 ++-- .../otelcol/exporter/otlphttp/otlphttp.go | 35 ++-- .../jaeger_remote_sampling.go | 37 ++-- .../otelcol/processor/discovery/discovery.go | 23 +-- .../processor/discovery/discovery_test.go | 12 +- .../internal/system/config.go | 34 ++-- .../resourcedetection/resourcedetection.go | 36 ++-- .../resourcedetection_test.go | 65 ++++--- .../otelcol/receiver/jaeger/jaeger.go | 5 +- .../component/otelcol/receiver/kafka/kafka.go | 83 +++++---- .../otelcol/receiver/opencensus/opencensus.go | 23 +-- .../receiver/opencensus/opencensus_test.go | 8 +- .../component/otelcol/receiver/otlp/otlp.go | 42 ++--- .../otelcol/receiver/receiver_test.go | 4 +- .../otelcol/receiver/vcenter/vcenter.go | 128 +++++++------ .../otelcol/receiver/zipkin/zipkin.go | 15 +- .../prometheus/exporter/azure/azure.go | 24 ++- .../prometheus/exporter/cadvisor/cadvisor.go | 46 +++-- .../prometheus/exporter/self/self.go | 5 +- .../testdata-v2/integrations_v2.river | 4 +- .../testdata-v2/unsupported.river | 4 +- .../staticconvert/testdata/traces_multi.river | 8 +- .../staticconvert/testdata/unsupported.river | 4 +- 38 files changed, 658 insertions(+), 517 deletions(-) create mode 100644 internal/component/all/all_test.go diff --git a/CHANGELOG.md b/CHANGELOG.md index b7170b58c2..1c97705997 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -40,6 +40,10 @@ Main (unreleased) - Update gcp_exporter to a newer version with a patch for incorrect delta histograms (@kgeckhart) +- Fix an issue where the default values of some component's arguments change + whenever that argument is explicitly configured. This issue only affected a + small subset of arguments across 15 components. (@erikbaranowski, @rfratto) + ### Other changes - Clustering for Grafana Agent in Flow mode has graduated from beta to stable. diff --git a/go.mod b/go.mod index 170fc3063f..20083bafb9 100644 --- a/go.mod +++ b/go.mod @@ -620,7 +620,6 @@ require ( github.com/open-telemetry/opentelemetry-collector-contrib/processor/filterprocessor v0.87.0 github.com/open-telemetry/opentelemetry-collector-contrib/receiver/prometheusreceiver v0.87.0 github.com/open-telemetry/opentelemetry-collector-contrib/receiver/vcenterreceiver v0.87.0 - github.com/prometheus/tsdb v0.10.0 go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v0.42.0 golang.org/x/crypto/x509roots/fallback v0.0.0-20240208163226-62c9f1799c91 k8s.io/apimachinery v0.28.3 diff --git a/go.sum b/go.sum index ce676740a1..7f5d05326e 100644 --- a/go.sum +++ b/go.sum @@ -560,7 +560,6 @@ github.com/dgryski/go-metro v0.0.0-20180109044635-280f6062b5bc h1:8WFBn63wegobsY github.com/dgryski/go-metro v0.0.0-20180109044635-280f6062b5bc/go.mod h1:c9O8+fpSOX1DM8cPNSkX/qsBWdkD4yd2dpciOWQjpBw= github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f h1:lO4WD4F/rVNCu3HqELle0jiPLLBs70cWOduZpkS1E78= github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f/go.mod h1:cuUVRXasLTGF7a8hSLbxyZXjz+1KgoB3wDUb6vlszIc= -github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= github.com/digitalocean/godo v1.1.1/go.mod h1:h6faOIcZ8lWIwNQ+DN7b3CgX4Kwby5T+nbpNqkUIozU= github.com/digitalocean/godo v1.10.0/go.mod h1:h6faOIcZ8lWIwNQ+DN7b3CgX4Kwby5T+nbpNqkUIozU= github.com/digitalocean/godo v1.104.1 h1:SZNxjAsskM/su0YW9P8Wx3gU0W1Z13b6tZlYNpl5BnA= @@ -2013,8 +2012,6 @@ github.com/prometheus/snmp_exporter v0.24.1/go.mod h1:j6uIGkdR0DXvKn7HJtSkeDj//U github.com/prometheus/statsd_exporter v0.22.7/go.mod h1:N/TevpjkIh9ccs6nuzY3jQn9dFqnUakOjnEuMPJJJnI= github.com/prometheus/statsd_exporter v0.22.8 h1:Qo2D9ZzaQG+id9i5NYNGmbf1aa/KxKbB9aKfMS+Yib0= github.com/prometheus/statsd_exporter v0.22.8/go.mod h1:/DzwbTEaFTE0Ojz5PqcSk6+PFHOPWGxdXVr6yC8eFOM= -github.com/prometheus/tsdb v0.10.0 h1:If5rVCMTp6W2SiRAQFlbpJNgVlgMEd+U2GZckwK38ic= -github.com/prometheus/tsdb v0.10.0/go.mod h1:oi49uRhEe9dPUTlS3JRZOwJuVi6tmh10QSgwXEyGCt4= github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= github.com/rcrowley/go-metrics v0.0.0-20200313005456-10cdbea86bc0/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 h1:N/ElC8H3+5XpJzTSTfLsJV/mx9Q9g7kxmchpfZyxgzM= diff --git a/internal/component/all/all_test.go b/internal/component/all/all_test.go new file mode 100644 index 0000000000..bbb3d205f8 --- /dev/null +++ b/internal/component/all/all_test.go @@ -0,0 +1,176 @@ +package all + +import ( + "fmt" + "reflect" + "testing" + + "github.com/grafana/agent/internal/component" + "github.com/grafana/river" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" +) + +// TestSetDefault_NoPointerReuse ensures that calls to SetDefault do not re-use +// pointers. The test iterates through all registered components, and then +// recursively traverses through its Arguments type to guarantee that no two +// calls to SetDefault result in pointer reuse. +// +// Nested types that also implement river.Defaulter are also checked. +func TestSetDefault_NoPointerReuse(t *testing.T) { + allComponents := component.AllNames() + for _, componentName := range allComponents { + reg, ok := component.Get(componentName) + require.True(t, ok, "Expected component %q to exist", componentName) + + t.Run(reg.Name, func(t *testing.T) { + testNoReusePointer(t, reg) + }) + } +} + +func testNoReusePointer(t *testing.T, reg component.Registration) { + t.Helper() + + var ( + args1 = reg.CloneArguments() + args2 = reg.CloneArguments() + ) + + if args1, ok := args1.(river.Defaulter); ok { + args1.SetToDefault() + } + if args2, ok := args2.(river.Defaulter); ok { + args2.SetToDefault() + } + + rv1, rv2 := reflect.ValueOf(args1), reflect.ValueOf(args2) + ty := rv1.Type().Elem() + + // Edge case: if the component's arguments type is an empty struct, skip. + // Not skipping causes the test to fail, due to an optimization in + // reflect.New where initializing the same zero-length object results in the + // same pointer. + if rv1.Elem().NumField() == 0 { + return + } + + if path, shared := sharePointer(rv1, rv2); shared { + fullPath := fmt.Sprintf("%s.%s.%s", ty.PkgPath(), ty.Name(), path) + + assert.Fail(t, + fmt.Sprintf("Detected SetToDefault pointer reuse at %s", fullPath), + "Types implementing river.Defaulter must not reuse pointers across multiple calls. Doing so leads to default values being changed when unmarshaling configuration files. If you're seeing this error, check the path above and ensure that copies are being made of any pointers in all instances of SetToDefault calls where that field is used.", + ) + } +} + +func sharePointer(a, b reflect.Value) (string, bool) { + // We want to recursively check a and b, so if they're nil they need to be + // initialized to see if any of their inner values have shared pointers after + // being initialized with defaults. + initValue(a) + initValue(b) + + // From the documentation of reflect.Value.Pointer, values of chan, func, + // map, pointer, slice, and unsafe pointer are all pointer values. + // + // Additionally, we want to recurse into values (even if they don't have + // addresses) to see if there's shared pointers inside of them. + switch a.Kind() { + case reflect.Chan, reflect.Func, reflect.UnsafePointer: + return "", a.Pointer() == b.Pointer() + + case reflect.Map: + if pointersMatch(a, b) { + return "", true + } + + iter := a.MapRange() + for iter.Next() { + aValue, bValue := iter.Value(), b.MapIndex(iter.Key()) + if !bValue.IsValid() { + continue + } + if path, shared := sharePointer(aValue, bValue); shared { + return path, true + } + } + return "", false + + case reflect.Pointer: + if pointersMatch(a, b) { + return "", true + } else { + // Recursively navigate inside of the pointer. + return sharePointer(a.Elem(), b.Elem()) + } + + case reflect.Interface: + if a.UnsafeAddr() == b.UnsafeAddr() { + return "", true + } + return sharePointer(a.Elem(), b.Elem()) + + case reflect.Slice: + if pointersMatch(a, b) { + // If the slices are preallocated immutable pointers such as []string{}, we can ignore + if a.Len() == 0 && a.Cap() == 0 && b.Len() == 0 && b.Cap() == 0 { + return "", false + } + return "", true + } + + size := min(a.Len(), b.Len()) + for i := 0; i < size; i++ { + if path, shared := sharePointer(a.Index(i), b.Index(i)); shared { + return path, true + } + } + return "", false + } + + // Recurse into non-pointer types. + switch a.Kind() { + case reflect.Array: + for i := 0; i < a.Len(); i++ { + if path, shared := sharePointer(a.Index(i), b.Index(i)); shared { + return path, true + } + } + return "", false + + case reflect.Struct: + // Check to make sure there are no shared pointers between args1 and args2. + for i := 0; i < a.NumField(); i++ { + if path, shared := sharePointer(a.Field(i), b.Field(i)); shared { + fullPath := a.Type().Field(i).Name + if path != "" { + fullPath += "." + path + } + return fullPath, true + } + } + return "", false + } + + return "", false +} + +func pointersMatch(a, b reflect.Value) bool { + if a.IsNil() || b.IsNil() { + return false + } + return a.Pointer() == b.Pointer() +} + +// initValue initializes nil pointers. If the nil pointer implements +// river.Defaulter, it is also set to default values. +func initValue(rv reflect.Value) { + if rv.Kind() == reflect.Pointer && rv.IsNil() { + rv.Set(reflect.New(rv.Type().Elem())) + if defaulter, ok := rv.Interface().(river.Defaulter); ok { + defaulter.SetToDefault() + } + } +} diff --git a/internal/component/discovery/kubelet/kubelet.go b/internal/component/discovery/kubelet/kubelet.go index a753c1e734..1fcad0bcbd 100644 --- a/internal/component/discovery/kubelet/kubelet.go +++ b/internal/component/discovery/kubelet/kubelet.go @@ -78,17 +78,15 @@ type Arguments struct { Namespaces []string `river:"namespaces,attr,optional"` } -// DefaultConfig holds defaults for SDConfig. -var DefaultConfig = Arguments{ - URL: config.URL{ - URL: defaultKubeletURL, - }, - HTTPClientConfig: config.DefaultHTTPClientConfig, -} - // SetToDefault implements river.Defaulter. func (args *Arguments) SetToDefault() { - *args = DefaultConfig + cloneDefaultKubeletUrl := *defaultKubeletURL + *args = Arguments{ + URL: config.URL{ + URL: &cloneDefaultKubeletUrl, + }, + HTTPClientConfig: config.DefaultHTTPClientConfig, + } } // Validate implements river.Validator. diff --git a/internal/component/discovery/kubelet/kubelet_test.go b/internal/component/discovery/kubelet/kubelet_test.go index 078162fe7a..89292f06be 100644 --- a/internal/component/discovery/kubelet/kubelet_test.go +++ b/internal/component/discovery/kubelet/kubelet_test.go @@ -51,7 +51,9 @@ func TestPodDeletion(t *testing.T) { Items: []v1.Pod{pod2}, } - kubeletDiscovery, err := NewKubeletDiscovery(DefaultConfig) + var args Arguments + args.SetToDefault() + kubeletDiscovery, err := NewKubeletDiscovery(args) require.NoError(t, err) _, err = kubeletDiscovery.refresh(podList1) @@ -100,7 +102,9 @@ func TestDiscoveryPodWithoutPod(t *testing.T) { Items: []v1.Pod{pod1, pod2}, } - kubeletDiscovery, err := NewKubeletDiscovery(DefaultConfig) + var args Arguments + args.SetToDefault() + kubeletDiscovery, err := NewKubeletDiscovery(args) require.NoError(t, err) _, err = kubeletDiscovery.refresh(podList1) @@ -109,7 +113,9 @@ func TestDiscoveryPodWithoutPod(t *testing.T) { } func TestWithDefaultKubeletHost(t *testing.T) { - kubeletDiscovery, err := NewKubeletDiscovery(DefaultConfig) + var args Arguments + args.SetToDefault() + kubeletDiscovery, err := NewKubeletDiscovery(args) require.NoError(t, err) require.Equal(t, "https://localhost:10250/pods", kubeletDiscovery.url) } diff --git a/internal/component/faro/receiver/arguments.go b/internal/component/faro/receiver/arguments.go index 62d2e413be..0169f0e80e 100644 --- a/internal/component/faro/receiver/arguments.go +++ b/internal/component/faro/receiver/arguments.go @@ -10,33 +10,6 @@ import ( "github.com/grafana/river/rivertypes" ) -// Defaults for various arguments. -var ( - DefaultArguments = Arguments{ - Server: DefaultServerArguments, - SourceMaps: DefaultSourceMapsArguments, - } - - DefaultServerArguments = ServerArguments{ - Host: "127.0.0.1", - Port: 12347, - RateLimiting: DefaultRateLimitingArguments, - MaxAllowedPayloadSize: 5 * units.MiB, - } - - DefaultRateLimitingArguments = RateLimitingArguments{ - Enabled: true, - Rate: 50, - BurstSize: 100, - } - - DefaultSourceMapsArguments = SourceMapsArguments{ - Download: true, - DownloadFromOrigins: []string{"*"}, - DownloadTimeout: time.Second, - } -) - // Arguments configures the app_agent_receiver component. type Arguments struct { LogLabels map[string]string `river:"extra_log_labels,attr,optional"` @@ -49,7 +22,10 @@ type Arguments struct { var _ river.Defaulter = (*Arguments)(nil) // SetToDefault applies default settings. -func (args *Arguments) SetToDefault() { *args = DefaultArguments } +func (args *Arguments) SetToDefault() { + args.Server.SetToDefault() + args.SourceMaps.SetToDefault() +} // ServerArguments configures the HTTP server where telemetry information will // be sent from Faro clients. @@ -63,6 +39,15 @@ type ServerArguments struct { RateLimiting RateLimitingArguments `river:"rate_limiting,block,optional"` } +func (s *ServerArguments) SetToDefault() { + *s = ServerArguments{ + Host: "127.0.0.1", + Port: 12347, + MaxAllowedPayloadSize: 5 * units.MiB, + } + s.RateLimiting.SetToDefault() +} + // RateLimitingArguments configures rate limiting for the HTTP server. type RateLimitingArguments struct { Enabled bool `river:"enabled,attr,optional"` @@ -70,6 +55,14 @@ type RateLimitingArguments struct { BurstSize float64 `river:"burst_size,attr,optional"` } +func (r *RateLimitingArguments) SetToDefault() { + *r = RateLimitingArguments{ + Enabled: true, + Rate: 50, + BurstSize: 100, + } +} + // SourceMapsArguments configures how app_agent_receiver will retrieve source // maps for transforming stack traces. type SourceMapsArguments struct { @@ -79,6 +72,14 @@ type SourceMapsArguments struct { Locations []LocationArguments `river:"location,block,optional"` } +func (s *SourceMapsArguments) SetToDefault() { + *s = SourceMapsArguments{ + Download: true, + DownloadFromOrigins: []string{"*"}, + DownloadTimeout: time.Second, + } +} + // LocationArguments specifies an individual location where source maps will be loaded. type LocationArguments struct { Path string `river:"path,attr"` diff --git a/internal/component/otelcol/config_debug_metrics.go b/internal/component/otelcol/config_debug_metrics.go index f387f64cbf..c0a47a9d08 100644 --- a/internal/component/otelcol/config_debug_metrics.go +++ b/internal/component/otelcol/config_debug_metrics.go @@ -5,12 +5,9 @@ type DebugMetricsArguments struct { DisableHighCardinalityMetrics bool `river:"disable_high_cardinality_metrics,attr,optional"` } -// DefaultDebugMetricsArguments holds default settings for DebugMetricsArguments. -var DefaultDebugMetricsArguments = DebugMetricsArguments{ - DisableHighCardinalityMetrics: true, -} - // SetToDefault implements river.Defaulter. func (args *DebugMetricsArguments) SetToDefault() { - *args = DefaultDebugMetricsArguments + *args = DebugMetricsArguments{ + DisableHighCardinalityMetrics: true, + } } diff --git a/internal/component/otelcol/config_queue.go b/internal/component/otelcol/config_queue.go index b6a61294e9..a15a7983b8 100644 --- a/internal/component/otelcol/config_queue.go +++ b/internal/component/otelcol/config_queue.go @@ -16,22 +16,19 @@ type QueueArguments struct { // TODO(rfratto): queues can send to persistent storage through an extension. } -// DefaultQueueArguments holds default settings for QueueArguments. -var DefaultQueueArguments = QueueArguments{ - Enabled: true, - NumConsumers: 10, - - // Copied from [upstream](https://github.com/open-telemetry/opentelemetry-collector/blob/241334609fc47927b4a8533dfca28e0f65dad9fe/exporter/exporterhelper/queue_sender.go#L50-L53) - // - // By default, batches are 8192 spans, for a total of up to 8 million spans in the queue - // This can be estimated at 1-4 GB worth of maximum memory usage - // This default is probably still too high, and may be adjusted further down in a future release - QueueSize: 1000, -} - // SetToDefault implements river.Defaulter. func (args *QueueArguments) SetToDefault() { - *args = DefaultQueueArguments + *args = QueueArguments{ + Enabled: true, + NumConsumers: 10, + + // Copied from [upstream](https://github.com/open-telemetry/opentelemetry-collector/blob/241334609fc47927b4a8533dfca28e0f65dad9fe/exporter/exporterhelper/queue_sender.go#L50-L53) + // + // By default, batches are 8192 spans, for a total of up to 8 million spans in the queue + // This can be estimated at 1-4 GB worth of maximum memory usage + // This default is probably still too high, and may be adjusted further down in a future release + QueueSize: 1000, + } } // Convert converts args into the upstream type. diff --git a/internal/component/otelcol/config_retry.go b/internal/component/otelcol/config_retry.go index 8b1d7b3599..12a2ffea85 100644 --- a/internal/component/otelcol/config_retry.go +++ b/internal/component/otelcol/config_retry.go @@ -24,19 +24,16 @@ var ( _ river.Validator = (*RetryArguments)(nil) ) -// DefaultRetryArguments holds default settings for RetryArguments. -var DefaultRetryArguments = RetryArguments{ - Enabled: true, - InitialInterval: 5 * time.Second, - RandomizationFactor: 0.5, - Multiplier: 1.5, - MaxInterval: 30 * time.Second, - MaxElapsedTime: 5 * time.Minute, -} - // SetToDefault implements river.Defaulter. func (args *RetryArguments) SetToDefault() { - *args = DefaultRetryArguments + *args = RetryArguments{ + Enabled: true, + InitialInterval: 5 * time.Second, + RandomizationFactor: 0.5, + Multiplier: 1.5, + MaxInterval: 30 * time.Second, + MaxElapsedTime: 5 * time.Minute, + } } // Validate returns an error if args is invalid. diff --git a/internal/component/otelcol/connector/host_info/host_info.go b/internal/component/otelcol/connector/host_info/host_info.go index 9fbb4dcee6..b97f55397b 100644 --- a/internal/component/otelcol/connector/host_info/host_info.go +++ b/internal/component/otelcol/connector/host_info/host_info.go @@ -43,15 +43,12 @@ var ( _ connector.Arguments = (*Arguments)(nil) ) -// DefaultArguments holds default settings for Arguments. -var DefaultArguments = Arguments{ - HostIdentifiers: []string{"host.id"}, - MetricsFlushInterval: 60 * time.Second, -} - // SetToDefault implements river.Defaulter. func (args *Arguments) SetToDefault() { - *args = DefaultArguments + *args = Arguments{ + HostIdentifiers: []string{"host.id"}, + MetricsFlushInterval: 60 * time.Second, + } } // Validate implements river.Validator. diff --git a/internal/component/otelcol/connector/servicegraph/servicegraph.go b/internal/component/otelcol/connector/servicegraph/servicegraph.go index a637a94a73..dfd25b2be4 100644 --- a/internal/component/otelcol/connector/servicegraph/servicegraph.go +++ b/internal/component/otelcol/connector/servicegraph/servicegraph.go @@ -65,55 +65,56 @@ type StoreConfig struct { TTL time.Duration `river:"ttl,attr,optional"` } +func (sc *StoreConfig) SetToDefault() { + *sc = StoreConfig{ + MaxItems: 1000, + TTL: 2 * time.Second, + } +} + var ( _ river.Validator = (*Arguments)(nil) _ river.Defaulter = (*Arguments)(nil) ) -// DefaultArguments holds default settings for Arguments. -var DefaultArguments = Arguments{ - LatencyHistogramBuckets: []time.Duration{ - 2 * time.Millisecond, - 4 * time.Millisecond, - 6 * time.Millisecond, - 8 * time.Millisecond, - 10 * time.Millisecond, - 50 * time.Millisecond, - 100 * time.Millisecond, - 200 * time.Millisecond, - 400 * time.Millisecond, - 800 * time.Millisecond, - 1 * time.Second, - 1400 * time.Millisecond, - 2 * time.Second, - 5 * time.Second, - 10 * time.Second, - 15 * time.Second, - }, - Dimensions: []string{}, - Store: StoreConfig{ - MaxItems: 1000, - TTL: 2 * time.Second, - }, - CacheLoop: 1 * time.Minute, - StoreExpirationLoop: 2 * time.Second, - //TODO: Add VirtualNodePeerAttributes when it's no longer controlled by - // the "processor.servicegraph.virtualNode" feature gate. - // VirtualNodePeerAttributes: []string{ - // semconv.AttributeDBName, - // semconv.AttributeNetSockPeerAddr, - // semconv.AttributeNetPeerName, - // semconv.AttributeRPCService, - // semconv.AttributeNetSockPeerName, - // semconv.AttributeNetPeerName, - // semconv.AttributeHTTPURL, - // semconv.AttributeHTTPTarget, - // }, -} - // SetToDefault implements river.Defaulter. func (args *Arguments) SetToDefault() { - *args = DefaultArguments + *args = Arguments{ + LatencyHistogramBuckets: []time.Duration{ + 2 * time.Millisecond, + 4 * time.Millisecond, + 6 * time.Millisecond, + 8 * time.Millisecond, + 10 * time.Millisecond, + 50 * time.Millisecond, + 100 * time.Millisecond, + 200 * time.Millisecond, + 400 * time.Millisecond, + 800 * time.Millisecond, + 1 * time.Second, + 1400 * time.Millisecond, + 2 * time.Second, + 5 * time.Second, + 10 * time.Second, + 15 * time.Second, + }, + Dimensions: []string{}, + CacheLoop: 1 * time.Minute, + StoreExpirationLoop: 2 * time.Second, + //TODO: Add VirtualNodePeerAttributes when it's no longer controlled by + // the "processor.servicegraph.virtualNode" feature gate. + // VirtualNodePeerAttributes: []string{ + // semconv.AttributeDBName, + // semconv.AttributeNetSockPeerAddr, + // semconv.AttributeNetPeerName, + // semconv.AttributeRPCService, + // semconv.AttributeNetSockPeerName, + // semconv.AttributeNetPeerName, + // semconv.AttributeHTTPURL, + // semconv.AttributeHTTPTarget, + // }, + } + args.Store.SetToDefault() } // Validate implements river.Validator. diff --git a/internal/component/otelcol/exporter/exporter_test.go b/internal/component/otelcol/exporter/exporter_test.go index 8c9489af71..dd61355ec6 100644 --- a/internal/component/otelcol/exporter/exporter_test.go +++ b/internal/component/otelcol/exporter/exporter_test.go @@ -138,7 +138,9 @@ func (fa fakeExporterArgs) Exporters() map[otelcomponent.DataType]map[otelcompon } func (fe fakeExporterArgs) DebugMetricsConfig() otelcol.DebugMetricsArguments { - return otelcol.DefaultDebugMetricsArguments + var dma otelcol.DebugMetricsArguments + dma.SetToDefault() + return dma } type fakeExporter struct { diff --git a/internal/component/otelcol/exporter/loadbalancing/loadbalancing.go b/internal/component/otelcol/exporter/loadbalancing/loadbalancing.go index c355f27315..d0c1ee9f27 100644 --- a/internal/component/otelcol/exporter/loadbalancing/loadbalancing.go +++ b/internal/component/otelcol/exporter/loadbalancing/loadbalancing.go @@ -55,27 +55,13 @@ var ( _ river.Validator = &Arguments{} ) -var ( - // DefaultArguments holds default values for Arguments. - DefaultArguments = Arguments{ - Protocol: Protocol{ - OTLP: DefaultOTLPConfig, - }, - RoutingKey: "traceID", - DebugMetrics: otelcol.DefaultDebugMetricsArguments, - } - - DefaultOTLPConfig = OtlpConfig{ - Timeout: otelcol.DefaultTimeout, - Queue: otelcol.DefaultQueueArguments, - Retry: otelcol.DefaultRetryArguments, - Client: DefaultGRPCClientArguments, - } -) - // SetToDefault implements river.Defaulter. func (args *Arguments) SetToDefault() { - *args = DefaultArguments + *args = Arguments{ + RoutingKey: "traceID", + } + args.DebugMetrics.SetToDefault() + args.Protocol.OTLP.SetToDefault() } // Validate implements river.Validator. @@ -124,18 +110,23 @@ type OtlpConfig struct { Client GRPCClientArguments `river:"client,block"` } -func (OtlpConfig *OtlpConfig) SetToDefault() { - *OtlpConfig = DefaultOTLPConfig +func (oc *OtlpConfig) SetToDefault() { + *oc = OtlpConfig{ + Timeout: otelcol.DefaultTimeout, + } + oc.Client.SetToDefault() + oc.Retry.SetToDefault() + oc.Queue.SetToDefault() } -func (otlpConfig OtlpConfig) Convert() otlpexporter.Config { +func (oc OtlpConfig) Convert() otlpexporter.Config { return otlpexporter.Config{ TimeoutSettings: exporterhelper.TimeoutSettings{ - Timeout: otlpConfig.Timeout, + Timeout: oc.Timeout, }, - QueueSettings: *otlpConfig.Queue.Convert(), - RetrySettings: *otlpConfig.Retry.Convert(), - GRPCClientSettings: *otlpConfig.Client.Convert(), + QueueSettings: *oc.Queue.Convert(), + RetrySettings: *oc.Retry.Convert(), + GRPCClientSettings: *oc.Client.Convert(), } } @@ -316,16 +307,12 @@ func (args *GRPCClientArguments) Extensions() map[otelcomponent.ID]otelextension return m } -// DefaultGRPCClientArguments holds component-specific default settings for -// GRPCClientArguments. -var DefaultGRPCClientArguments = GRPCClientArguments{ - Headers: map[string]string{}, - Compression: otelcol.CompressionTypeGzip, - WriteBufferSize: 512 * 1024, - BalancerName: otelcol.DefaultBalancerName, -} - // SetToDefault implements river.Defaulter. func (args *GRPCClientArguments) SetToDefault() { - *args = DefaultGRPCClientArguments + *args = GRPCClientArguments{ + Headers: map[string]string{}, + Compression: otelcol.CompressionTypeGzip, + WriteBufferSize: 512 * 1024, + BalancerName: otelcol.DefaultBalancerName, + } } diff --git a/internal/component/otelcol/exporter/logging/logging.go b/internal/component/otelcol/exporter/logging/logging.go index 71dac49faf..1e08fe2104 100644 --- a/internal/component/otelcol/exporter/logging/logging.go +++ b/internal/component/otelcol/exporter/logging/logging.go @@ -38,17 +38,14 @@ type Arguments struct { var _ exporter.Arguments = Arguments{} -// DefaultArguments holds default values for Arguments. -var DefaultArguments = Arguments{ - Verbosity: configtelemetry.LevelNormal, - SamplingInitial: 2, - SamplingThereafter: 500, - DebugMetrics: otelcol.DefaultDebugMetricsArguments, -} - // SetToDefault implements river.Defaulter. func (args *Arguments) SetToDefault() { - *args = DefaultArguments + *args = Arguments{ + Verbosity: configtelemetry.LevelNormal, + SamplingInitial: 2, + SamplingThereafter: 500, + } + args.DebugMetrics.SetToDefault() } // Convert implements exporter.Arguments. diff --git a/internal/component/otelcol/exporter/otlp/otlp.go b/internal/component/otelcol/exporter/otlp/otlp.go index d50c876226..a86aec2219 100644 --- a/internal/component/otelcol/exporter/otlp/otlp.go +++ b/internal/component/otelcol/exporter/otlp/otlp.go @@ -43,18 +43,16 @@ type Arguments struct { var _ exporter.Arguments = Arguments{} -// DefaultArguments holds default values for Arguments. -var DefaultArguments = Arguments{ - Timeout: otelcol.DefaultTimeout, - Queue: otelcol.DefaultQueueArguments, - Retry: otelcol.DefaultRetryArguments, - Client: DefaultGRPCClientArguments, - DebugMetrics: otelcol.DefaultDebugMetricsArguments, -} - // SetToDefault implements river.Defaulter. func (args *Arguments) SetToDefault() { - *args = DefaultArguments + *args = Arguments{ + Timeout: otelcol.DefaultTimeout, + } + + args.Queue.SetToDefault() + args.Retry.SetToDefault() + args.Client.SetToDefault() + args.DebugMetrics.SetToDefault() } // Convert implements exporter.Arguments. @@ -88,16 +86,12 @@ func (args Arguments) DebugMetricsConfig() otelcol.DebugMetricsArguments { // component-specific defaults. type GRPCClientArguments otelcol.GRPCClientArguments -// DefaultGRPCClientArguments holds component-specific default settings for -// GRPCClientArguments. -var DefaultGRPCClientArguments = GRPCClientArguments{ - Headers: map[string]string{}, - Compression: otelcol.CompressionTypeGzip, - WriteBufferSize: 512 * 1024, - BalancerName: otelcol.DefaultBalancerName, -} - // SetToDefault implements river.Defaulter. func (args *GRPCClientArguments) SetToDefault() { - *args = DefaultGRPCClientArguments + *args = GRPCClientArguments{ + Headers: map[string]string{}, + Compression: otelcol.CompressionTypeGzip, + WriteBufferSize: 512 * 1024, + BalancerName: otelcol.DefaultBalancerName, + } } diff --git a/internal/component/otelcol/exporter/otlphttp/otlphttp.go b/internal/component/otelcol/exporter/otlphttp/otlphttp.go index 246d9df846..a5c4dbe1de 100644 --- a/internal/component/otelcol/exporter/otlphttp/otlphttp.go +++ b/internal/component/otelcol/exporter/otlphttp/otlphttp.go @@ -48,17 +48,13 @@ type Arguments struct { var _ exporter.Arguments = Arguments{} -// DefaultArguments holds default values for Arguments. -var DefaultArguments = Arguments{ - Queue: otelcol.DefaultQueueArguments, - Retry: otelcol.DefaultRetryArguments, - Client: DefaultHTTPClientArguments, - DebugMetrics: otelcol.DefaultDebugMetricsArguments, -} - // SetToDefault implements river.Defaulter. func (args *Arguments) SetToDefault() { - *args = DefaultArguments + *args = Arguments{} + args.Queue.SetToDefault() + args.Retry.SetToDefault() + args.Client.SetToDefault() + args.DebugMetrics.SetToDefault() } // Convert implements exporter.Arguments. @@ -102,11 +98,17 @@ type HTTPClientArguments otelcol.HTTPClientArguments // Default server settings. var ( - DefaultMaxIddleConns = 100 - DefaultIdleConnTimeout = 90 * time.Second - DefaultHTTPClientArguments = HTTPClientArguments{ - MaxIdleConns: &DefaultMaxIddleConns, - IdleConnTimeout: &DefaultIdleConnTimeout, + DefaultMaxIdleConns = 100 + DefaultIdleConnTimeout = 90 * time.Second +) + +// SetToDefault implements river.Defaulter. +func (args *HTTPClientArguments) SetToDefault() { + maxIdleConns := DefaultMaxIdleConns + idleConnTimeout := DefaultIdleConnTimeout + *args = HTTPClientArguments{ + MaxIdleConns: &maxIdleConns, + IdleConnTimeout: &idleConnTimeout, Timeout: 30 * time.Second, Headers: map[string]string{}, @@ -114,9 +116,4 @@ var ( ReadBufferSize: 0, WriteBufferSize: 512 * 1024, } -) - -// SetToDefault implements river.Defaulter. -func (args *HTTPClientArguments) SetToDefault() { - *args = DefaultHTTPClientArguments } diff --git a/internal/component/otelcol/extension/jaeger_remote_sampling/jaeger_remote_sampling.go b/internal/component/otelcol/extension/jaeger_remote_sampling/jaeger_remote_sampling.go index b01b92ccc1..6269e9982a 100644 --- a/internal/component/otelcol/extension/jaeger_remote_sampling/jaeger_remote_sampling.go +++ b/internal/component/otelcol/extension/jaeger_remote_sampling/jaeger_remote_sampling.go @@ -37,18 +37,6 @@ type ( HTTPServerArguments otelcol.HTTPServerArguments ) -// Default server settings. -var ( - DefaultGRPCServerArguments = GRPCServerArguments{ - Endpoint: "0.0.0.0:14250", - Transport: "tcp", - } - - DefaultHTTPServerArguments = HTTPServerArguments{ - Endpoint: "0.0.0.0:5778", - } -) - // Arguments configures the otelcol.extension.jaegerremotesampling component. type Arguments struct { GRPC *GRPCServerArguments `river:"grpc,block,optional"` @@ -127,12 +115,17 @@ func (a *ArgumentsSource) Validate() error { // SetToDefault implements river.Defaulter. func (args *GRPCServerArguments) SetToDefault() { - *args = DefaultGRPCServerArguments + *args = GRPCServerArguments{ + Endpoint: "0.0.0.0:14250", + Transport: "tcp", + } } // SetToDefault implements river.Defaulter. func (args *HTTPServerArguments) SetToDefault() { - *args = DefaultHTTPServerArguments + *args = HTTPServerArguments{ + Endpoint: "0.0.0.0:5778", + } } // GRPCClientArguments is used to configure @@ -140,16 +133,12 @@ func (args *HTTPServerArguments) SetToDefault() { // component-specific defaults. type GRPCClientArguments otelcol.GRPCClientArguments -// DefaultGRPCClientArguments holds component-specific -// default settings for GRPCClientArguments. -var DefaultGRPCClientArguments = GRPCClientArguments{ - Headers: map[string]string{}, - Compression: otelcol.CompressionTypeGzip, - WriteBufferSize: 512 * 1024, - BalancerName: otelcol.DefaultBalancerName, -} - // SetToDefault implements river.Defaulter. func (args *GRPCClientArguments) SetToDefault() { - *args = DefaultGRPCClientArguments + *args = GRPCClientArguments{ + Headers: map[string]string{}, + Compression: otelcol.CompressionTypeGzip, + WriteBufferSize: 512 * 1024, + BalancerName: otelcol.DefaultBalancerName, + } } diff --git a/internal/component/otelcol/processor/discovery/discovery.go b/internal/component/otelcol/processor/discovery/discovery.go index 08073fa58b..2268991399 100644 --- a/internal/component/otelcol/processor/discovery/discovery.go +++ b/internal/component/otelcol/processor/discovery/discovery.go @@ -45,21 +45,18 @@ var ( _ river.Validator = (*Arguments)(nil) ) -// DefaultArguments holds default settings for Arguments. -var DefaultArguments = Arguments{ - OperationType: promsdconsumer.OperationTypeUpsert, - PodAssociations: []string{ - promsdconsumer.PodAssociationIPLabel, - promsdconsumer.PodAssociationOTelIPLabel, - promsdconsumer.PodAssociationk8sIPLabel, - promsdconsumer.PodAssociationHostnameLabel, - promsdconsumer.PodAssociationConnectionIP, - }, -} - // SetToDefault implements river.Defaulter. func (args *Arguments) SetToDefault() { - *args = DefaultArguments + *args = Arguments{ + OperationType: promsdconsumer.OperationTypeUpsert, + PodAssociations: []string{ + promsdconsumer.PodAssociationIPLabel, + promsdconsumer.PodAssociationOTelIPLabel, + promsdconsumer.PodAssociationk8sIPLabel, + promsdconsumer.PodAssociationHostnameLabel, + promsdconsumer.PodAssociationConnectionIP, + }, + } } // Validate implements river.Validator. diff --git a/internal/component/otelcol/processor/discovery/discovery_test.go b/internal/component/otelcol/processor/discovery/discovery_test.go index 5c7788d247..ac74167332 100644 --- a/internal/component/otelcol/processor/discovery/discovery_test.go +++ b/internal/component/otelcol/processor/discovery/discovery_test.go @@ -57,8 +57,10 @@ func Test_DefaultConfig(t *testing.T) { var args discovery.Arguments require.NoError(t, river.Unmarshal([]byte(cfg), &args)) + var defaultArgs discovery.Arguments + defaultArgs.SetToDefault() require.Equal(t, args.OperationType, promsdconsumer.OperationTypeUpsert) - require.Equal(t, args.PodAssociations, discovery.DefaultArguments.PodAssociations) + require.Equal(t, args.PodAssociations, defaultArgs.PodAssociations) var inputTrace = `{ "resourceSpans": [{ @@ -157,8 +159,10 @@ func Test_Insert(t *testing.T) { var args discovery.Arguments require.NoError(t, river.Unmarshal([]byte(cfg), &args)) + var defaultArgs discovery.Arguments + defaultArgs.SetToDefault() require.Equal(t, args.OperationType, promsdconsumer.OperationTypeInsert) - require.Equal(t, args.PodAssociations, discovery.DefaultArguments.PodAssociations) + require.Equal(t, args.PodAssociations, defaultArgs.PodAssociations) var inputTrace = `{ "resourceSpans": [{ @@ -278,8 +282,10 @@ func Test_Update(t *testing.T) { var args discovery.Arguments require.NoError(t, river.Unmarshal([]byte(cfg), &args)) + var defaultArgs discovery.Arguments + defaultArgs.SetToDefault() require.Equal(t, args.OperationType, promsdconsumer.OperationTypeUpdate) - require.Equal(t, args.PodAssociations, discovery.DefaultArguments.PodAssociations) + require.Equal(t, args.PodAssociations, defaultArgs.PodAssociations) var inputTrace = `{ "resourceSpans": [{ diff --git a/internal/component/otelcol/processor/resourcedetection/internal/system/config.go b/internal/component/otelcol/processor/resourcedetection/internal/system/config.go index c661cf6e83..3c72a13228 100644 --- a/internal/component/otelcol/processor/resourcedetection/internal/system/config.go +++ b/internal/component/otelcol/processor/resourcedetection/internal/system/config.go @@ -19,28 +19,26 @@ type Config struct { ResourceAttributes ResourceAttributesConfig `river:"resource_attributes,block,optional"` } -var DefaultArguments = Config{ - HostnameSources: []string{"dns", "os"}, - ResourceAttributes: ResourceAttributesConfig{ - HostArch: rac.ResourceAttributeConfig{Enabled: false}, - HostCPUCacheL2Size: rac.ResourceAttributeConfig{Enabled: false}, - HostCPUFamily: rac.ResourceAttributeConfig{Enabled: false}, - HostCPUModelID: rac.ResourceAttributeConfig{Enabled: false}, - HostCPUModelName: rac.ResourceAttributeConfig{Enabled: false}, - HostCPUStepping: rac.ResourceAttributeConfig{Enabled: false}, - HostCPUVendorID: rac.ResourceAttributeConfig{Enabled: false}, - HostID: rac.ResourceAttributeConfig{Enabled: false}, - HostName: rac.ResourceAttributeConfig{Enabled: true}, - OsDescription: rac.ResourceAttributeConfig{Enabled: false}, - OsType: rac.ResourceAttributeConfig{Enabled: true}, - }, -} - var _ river.Defaulter = (*Config)(nil) // SetToDefault implements river.Defaulter. func (c *Config) SetToDefault() { - *c = DefaultArguments + *c = Config{ + HostnameSources: []string{"dns", "os"}, + ResourceAttributes: ResourceAttributesConfig{ + HostArch: rac.ResourceAttributeConfig{Enabled: false}, + HostCPUCacheL2Size: rac.ResourceAttributeConfig{Enabled: false}, + HostCPUFamily: rac.ResourceAttributeConfig{Enabled: false}, + HostCPUModelID: rac.ResourceAttributeConfig{Enabled: false}, + HostCPUModelName: rac.ResourceAttributeConfig{Enabled: false}, + HostCPUStepping: rac.ResourceAttributeConfig{Enabled: false}, + HostCPUVendorID: rac.ResourceAttributeConfig{Enabled: false}, + HostID: rac.ResourceAttributeConfig{Enabled: false}, + HostName: rac.ResourceAttributeConfig{Enabled: true}, + OsDescription: rac.ResourceAttributeConfig{Enabled: false}, + OsType: rac.ResourceAttributeConfig{Enabled: true}, + }, + } } // Validate config diff --git a/internal/component/otelcol/processor/resourcedetection/resourcedetection.go b/internal/component/otelcol/processor/resourcedetection/resourcedetection.go index de32c1c6ae..f8630d6c27 100644 --- a/internal/component/otelcol/processor/resourcedetection/resourcedetection.go +++ b/internal/component/otelcol/processor/resourcedetection/resourcedetection.go @@ -19,7 +19,6 @@ import ( "github.com/grafana/agent/internal/component/otelcol/processor/resourcedetection/internal/gcp" "github.com/grafana/agent/internal/component/otelcol/processor/resourcedetection/internal/heroku" "github.com/grafana/agent/internal/component/otelcol/processor/resourcedetection/internal/k8snode" - kubernetes_node "github.com/grafana/agent/internal/component/otelcol/processor/resourcedetection/internal/k8snode" "github.com/grafana/agent/internal/component/otelcol/processor/resourcedetection/internal/openshift" "github.com/grafana/agent/internal/component/otelcol/processor/resourcedetection/internal/system" "github.com/grafana/agent/internal/featuregate" @@ -114,21 +113,11 @@ type DetectorConfig struct { OpenShiftConfig openshift.Config `river:"openshift,block,optional"` // KubernetesNode contains user-specified configurations for the K8SNode detector - KubernetesNodeConfig kubernetes_node.Config `river:"kubernetes_node,block,optional"` + KubernetesNodeConfig k8snode.Config `river:"kubernetes_node,block,optional"` } -var ( - _ processor.Arguments = Arguments{} - _ river.Validator = (*Arguments)(nil) - _ river.Defaulter = (*Arguments)(nil) -) - -// DefaultArguments holds default settings for Arguments. -var DefaultArguments = Arguments{ - Detectors: []string{"env"}, - Override: true, - Timeout: 5 * time.Second, - DetectorConfig: DetectorConfig{ +func (dc *DetectorConfig) SetToDefault() { + *dc = DetectorConfig{ EC2Config: ec2.DefaultArguments, ECSConfig: ecs.DefaultArguments, EKSConfig: eks.DefaultArguments, @@ -140,15 +129,26 @@ var DefaultArguments = Arguments{ DockerConfig: docker.DefaultArguments, GcpConfig: gcp.DefaultArguments, HerokuConfig: heroku.DefaultArguments, - SystemConfig: system.DefaultArguments, OpenShiftConfig: openshift.DefaultArguments, - KubernetesNodeConfig: kubernetes_node.DefaultArguments, - }, + KubernetesNodeConfig: k8snode.DefaultArguments, + } + dc.SystemConfig.SetToDefault() } +var ( + _ processor.Arguments = Arguments{} + _ river.Validator = (*Arguments)(nil) + _ river.Defaulter = (*Arguments)(nil) +) + // SetToDefault implements river.Defaulter. func (args *Arguments) SetToDefault() { - *args = DefaultArguments + *args = Arguments{ + Detectors: []string{"env"}, + Override: true, + Timeout: 5 * time.Second, + } + args.DetectorConfig.SetToDefault() } // Validate implements river.Validator. diff --git a/internal/component/otelcol/processor/resourcedetection/resourcedetection_test.go b/internal/component/otelcol/processor/resourcedetection/resourcedetection_test.go index 437c2cf6ba..d52c3f65e3 100644 --- a/internal/component/otelcol/processor/resourcedetection/resourcedetection_test.go +++ b/internal/component/otelcol/processor/resourcedetection/resourcedetection_test.go @@ -26,6 +26,9 @@ import ( ) func TestArguments_UnmarshalRiver(t *testing.T) { + var defaultArgs system.Config + defaultArgs.SetToDefault() + tests := []struct { testName string cfg string @@ -77,7 +80,7 @@ func TestArguments_UnmarshalRiver(t *testing.T) { "docker": docker.DefaultArguments.Convert(), "gcp": gcp.DefaultArguments.Convert(), "heroku": heroku.DefaultArguments.Convert(), - "system": system.DefaultArguments.Convert(), + "system": defaultArgs.Convert(), "openshift": openshift.DefaultArguments.Convert(), "k8snode": kubernetes_node.DefaultArguments.Convert(), }, @@ -102,7 +105,7 @@ func TestArguments_UnmarshalRiver(t *testing.T) { "docker": docker.DefaultArguments.Convert(), "gcp": gcp.DefaultArguments.Convert(), "heroku": heroku.DefaultArguments.Convert(), - "system": system.DefaultArguments.Convert(), + "system": defaultArgs.Convert(), "openshift": openshift.DefaultArguments.Convert(), "k8snode": kubernetes_node.DefaultArguments.Convert(), }, @@ -143,7 +146,7 @@ func TestArguments_UnmarshalRiver(t *testing.T) { "docker": docker.DefaultArguments.Convert(), "gcp": gcp.DefaultArguments.Convert(), "heroku": heroku.DefaultArguments.Convert(), - "system": system.DefaultArguments.Convert(), + "system": defaultArgs.Convert(), "openshift": openshift.DefaultArguments.Convert(), "k8snode": kubernetes_node.DefaultArguments.Convert(), }, @@ -185,7 +188,7 @@ func TestArguments_UnmarshalRiver(t *testing.T) { "docker": docker.DefaultArguments.Convert(), "gcp": gcp.DefaultArguments.Convert(), "heroku": heroku.DefaultArguments.Convert(), - "system": system.DefaultArguments.Convert(), + "system": defaultArgs.Convert(), "openshift": openshift.DefaultArguments.Convert(), "k8snode": kubernetes_node.DefaultArguments.Convert(), }, @@ -238,7 +241,7 @@ func TestArguments_UnmarshalRiver(t *testing.T) { "docker": docker.DefaultArguments.Convert(), "gcp": gcp.DefaultArguments.Convert(), "heroku": heroku.DefaultArguments.Convert(), - "system": system.DefaultArguments.Convert(), + "system": defaultArgs.Convert(), "openshift": openshift.DefaultArguments.Convert(), "k8snode": kubernetes_node.DefaultArguments.Convert(), }, @@ -300,7 +303,7 @@ func TestArguments_UnmarshalRiver(t *testing.T) { "docker": docker.DefaultArguments.Convert(), "gcp": gcp.DefaultArguments.Convert(), "heroku": heroku.DefaultArguments.Convert(), - "system": system.DefaultArguments.Convert(), + "system": defaultArgs.Convert(), "openshift": openshift.DefaultArguments.Convert(), "k8snode": kubernetes_node.DefaultArguments.Convert(), }, @@ -362,7 +365,7 @@ func TestArguments_UnmarshalRiver(t *testing.T) { "docker": docker.DefaultArguments.Convert(), "gcp": gcp.DefaultArguments.Convert(), "heroku": heroku.DefaultArguments.Convert(), - "system": system.DefaultArguments.Convert(), + "system": defaultArgs.Convert(), "openshift": openshift.DefaultArguments.Convert(), "k8snode": kubernetes_node.DefaultArguments.Convert(), }, @@ -399,7 +402,7 @@ func TestArguments_UnmarshalRiver(t *testing.T) { "docker": docker.DefaultArguments.Convert(), "gcp": gcp.DefaultArguments.Convert(), "heroku": heroku.DefaultArguments.Convert(), - "system": system.DefaultArguments.Convert(), + "system": defaultArgs.Convert(), "openshift": openshift.DefaultArguments.Convert(), "k8snode": kubernetes_node.DefaultArguments.Convert(), }, @@ -441,7 +444,7 @@ func TestArguments_UnmarshalRiver(t *testing.T) { "docker": docker.DefaultArguments.Convert(), "gcp": gcp.DefaultArguments.Convert(), "heroku": heroku.DefaultArguments.Convert(), - "system": system.DefaultArguments.Convert(), + "system": defaultArgs.Convert(), "openshift": openshift.DefaultArguments.Convert(), "k8snode": kubernetes_node.DefaultArguments.Convert(), }, @@ -502,7 +505,7 @@ func TestArguments_UnmarshalRiver(t *testing.T) { "docker": docker.DefaultArguments.Convert(), "gcp": gcp.DefaultArguments.Convert(), "heroku": heroku.DefaultArguments.Convert(), - "system": system.DefaultArguments.Convert(), + "system": defaultArgs.Convert(), "openshift": openshift.DefaultArguments.Convert(), "k8snode": kubernetes_node.DefaultArguments.Convert(), }, @@ -571,7 +574,7 @@ func TestArguments_UnmarshalRiver(t *testing.T) { "docker": docker.DefaultArguments.Convert(), "gcp": gcp.DefaultArguments.Convert(), "heroku": heroku.DefaultArguments.Convert(), - "system": system.DefaultArguments.Convert(), + "system": defaultArgs.Convert(), "openshift": openshift.DefaultArguments.Convert(), "k8snode": kubernetes_node.DefaultArguments.Convert(), }, @@ -608,7 +611,7 @@ func TestArguments_UnmarshalRiver(t *testing.T) { "docker": docker.DefaultArguments.Convert(), "gcp": gcp.DefaultArguments.Convert(), "heroku": heroku.DefaultArguments.Convert(), - "system": system.DefaultArguments.Convert(), + "system": defaultArgs.Convert(), "openshift": openshift.DefaultArguments.Convert(), "k8snode": kubernetes_node.DefaultArguments.Convert(), }, @@ -650,7 +653,7 @@ func TestArguments_UnmarshalRiver(t *testing.T) { "docker": docker.DefaultArguments.Convert(), "gcp": gcp.DefaultArguments.Convert(), "heroku": heroku.DefaultArguments.Convert(), - "system": system.DefaultArguments.Convert(), + "system": defaultArgs.Convert(), "openshift": openshift.DefaultArguments.Convert(), "k8snode": kubernetes_node.DefaultArguments.Convert(), }, @@ -677,7 +680,7 @@ func TestArguments_UnmarshalRiver(t *testing.T) { "docker": docker.DefaultArguments.Convert(), "gcp": gcp.DefaultArguments.Convert(), "heroku": heroku.DefaultArguments.Convert(), - "system": system.DefaultArguments.Convert(), + "system": defaultArgs.Convert(), "openshift": openshift.DefaultArguments.Convert(), "k8snode": kubernetes_node.DefaultArguments.Convert(), }, @@ -767,7 +770,7 @@ func TestArguments_UnmarshalRiver(t *testing.T) { "consul": consul.DefaultArguments.Convert(), "docker": docker.DefaultArguments.Convert(), "heroku": heroku.DefaultArguments.Convert(), - "system": system.DefaultArguments.Convert(), + "system": defaultArgs.Convert(), "openshift": openshift.DefaultArguments.Convert(), "k8snode": kubernetes_node.DefaultArguments.Convert(), }, @@ -794,7 +797,7 @@ func TestArguments_UnmarshalRiver(t *testing.T) { "docker": docker.DefaultArguments.Convert(), "gcp": gcp.DefaultArguments.Convert(), "heroku": heroku.DefaultArguments.Convert(), - "system": system.DefaultArguments.Convert(), + "system": defaultArgs.Convert(), "openshift": openshift.DefaultArguments.Convert(), "k8snode": kubernetes_node.DefaultArguments.Convert(), }, @@ -836,7 +839,7 @@ func TestArguments_UnmarshalRiver(t *testing.T) { "consul": consul.DefaultArguments.Convert(), "gcp": gcp.DefaultArguments.Convert(), "heroku": heroku.DefaultArguments.Convert(), - "system": system.DefaultArguments.Convert(), + "system": defaultArgs.Convert(), "openshift": openshift.DefaultArguments.Convert(), "k8snode": kubernetes_node.DefaultArguments.Convert(), }, @@ -863,7 +866,7 @@ func TestArguments_UnmarshalRiver(t *testing.T) { "docker": docker.DefaultArguments.Convert(), "gcp": gcp.DefaultArguments.Convert(), "heroku": heroku.DefaultArguments.Convert(), - "system": system.DefaultArguments.Convert(), + "system": defaultArgs.Convert(), "openshift": openshift.DefaultArguments.Convert(), "k8snode": kubernetes_node.DefaultArguments.Convert(), }, @@ -928,7 +931,7 @@ func TestArguments_UnmarshalRiver(t *testing.T) { "docker": docker.DefaultArguments.Convert(), "gcp": gcp.DefaultArguments.Convert(), "heroku": heroku.DefaultArguments.Convert(), - "system": system.DefaultArguments.Convert(), + "system": defaultArgs.Convert(), "openshift": openshift.DefaultArguments.Convert(), "k8snode": kubernetes_node.DefaultArguments.Convert(), }, @@ -955,7 +958,7 @@ func TestArguments_UnmarshalRiver(t *testing.T) { "docker": docker.DefaultArguments.Convert(), "gcp": gcp.DefaultArguments.Convert(), "heroku": heroku.DefaultArguments.Convert(), - "system": system.DefaultArguments.Convert(), + "system": defaultArgs.Convert(), "openshift": openshift.DefaultArguments.Convert(), "k8snode": kubernetes_node.DefaultArguments.Convert(), }, @@ -1007,7 +1010,7 @@ func TestArguments_UnmarshalRiver(t *testing.T) { "docker": docker.DefaultArguments.Convert(), "gcp": gcp.DefaultArguments.Convert(), "heroku": heroku.DefaultArguments.Convert(), - "system": system.DefaultArguments.Convert(), + "system": defaultArgs.Convert(), "openshift": openshift.DefaultArguments.Convert(), "k8snode": kubernetes_node.DefaultArguments.Convert(), }, @@ -1034,7 +1037,7 @@ func TestArguments_UnmarshalRiver(t *testing.T) { "docker": docker.DefaultArguments.Convert(), "gcp": gcp.DefaultArguments.Convert(), "heroku": heroku.DefaultArguments.Convert(), - "system": system.DefaultArguments.Convert(), + "system": defaultArgs.Convert(), "openshift": openshift.DefaultArguments.Convert(), "k8snode": kubernetes_node.DefaultArguments.Convert(), }, @@ -1088,7 +1091,7 @@ func TestArguments_UnmarshalRiver(t *testing.T) { "docker": docker.DefaultArguments.Convert(), "gcp": gcp.DefaultArguments.Convert(), "heroku": heroku.DefaultArguments.Convert(), - "system": system.DefaultArguments.Convert(), + "system": defaultArgs.Convert(), "openshift": openshift.DefaultArguments.Convert(), "k8snode": kubernetes_node.DefaultArguments.Convert(), }, @@ -1115,7 +1118,7 @@ func TestArguments_UnmarshalRiver(t *testing.T) { "docker": docker.DefaultArguments.Convert(), "gcp": gcp.DefaultArguments.Convert(), "heroku": heroku.DefaultArguments.Convert(), - "system": system.DefaultArguments.Convert(), + "system": defaultArgs.Convert(), "openshift": openshift.DefaultArguments.Convert(), "k8snode": kubernetes_node.DefaultArguments.Convert(), }, @@ -1178,7 +1181,7 @@ func TestArguments_UnmarshalRiver(t *testing.T) { "consul": consul.DefaultArguments.Convert(), "docker": docker.DefaultArguments.Convert(), "gcp": gcp.DefaultArguments.Convert(), - "system": system.DefaultArguments.Convert(), + "system": defaultArgs.Convert(), "openshift": openshift.DefaultArguments.Convert(), "k8snode": kubernetes_node.DefaultArguments.Convert(), }, @@ -1205,7 +1208,7 @@ func TestArguments_UnmarshalRiver(t *testing.T) { "docker": docker.DefaultArguments.Convert(), "gcp": gcp.DefaultArguments.Convert(), "heroku": heroku.DefaultArguments.Convert(), - "system": system.DefaultArguments.Convert(), + "system": defaultArgs.Convert(), "openshift": openshift.DefaultArguments.Convert(), "k8snode": kubernetes_node.DefaultArguments.Convert(), }, @@ -1253,7 +1256,7 @@ func TestArguments_UnmarshalRiver(t *testing.T) { "docker": docker.DefaultArguments.Convert(), "gcp": gcp.DefaultArguments.Convert(), "heroku": heroku.DefaultArguments.Convert(), - "system": system.DefaultArguments.Convert(), + "system": defaultArgs.Convert(), "openshift": openshift.DefaultArguments.Convert(), }, }, @@ -1291,7 +1294,7 @@ func TestArguments_UnmarshalRiver(t *testing.T) { "docker": docker.DefaultArguments.Convert(), "gcp": gcp.DefaultArguments.Convert(), "heroku": heroku.DefaultArguments.Convert(), - "system": system.DefaultArguments.Convert(), + "system": defaultArgs.Convert(), "openshift": openshift.DefaultArguments.Convert(), "k8snode": kubernetes_node.DefaultArguments.Convert(), }, @@ -1397,7 +1400,7 @@ func TestArguments_UnmarshalRiver(t *testing.T) { "docker": docker.DefaultArguments.Convert(), "gcp": gcp.DefaultArguments.Convert(), "heroku": heroku.DefaultArguments.Convert(), - "system": system.DefaultArguments.Convert(), + "system": defaultArgs.Convert(), "openshift": openshift.DefaultArguments.Convert(), "k8snode": kubernetes_node.DefaultArguments.Convert(), }, @@ -1467,7 +1470,7 @@ func TestArguments_UnmarshalRiver(t *testing.T) { "docker": docker.DefaultArguments.Convert(), "gcp": gcp.DefaultArguments.Convert(), "heroku": heroku.DefaultArguments.Convert(), - "system": system.DefaultArguments.Convert(), + "system": defaultArgs.Convert(), "k8snode": kubernetes_node.DefaultArguments.Convert(), }, }, @@ -1494,7 +1497,7 @@ func TestArguments_UnmarshalRiver(t *testing.T) { "docker": docker.DefaultArguments.Convert(), "gcp": gcp.DefaultArguments.Convert(), "heroku": heroku.DefaultArguments.Convert(), - "system": system.DefaultArguments.Convert(), + "system": defaultArgs.Convert(), "openshift": openshift.DefaultArguments.Convert(), "k8snode": kubernetes_node.DefaultArguments.Convert(), }, diff --git a/internal/component/otelcol/receiver/jaeger/jaeger.go b/internal/component/otelcol/receiver/jaeger/jaeger.go index 27632e040e..c7817cc68a 100644 --- a/internal/component/otelcol/receiver/jaeger/jaeger.go +++ b/internal/component/otelcol/receiver/jaeger/jaeger.go @@ -44,9 +44,8 @@ var _ receiver.Arguments = Arguments{} // SetToDefault implements river.Defaulter. func (args *Arguments) SetToDefault() { - *args = Arguments{ - DebugMetrics: otelcol.DefaultDebugMetricsArguments, - } + *args = Arguments{} + args.DebugMetrics.SetToDefault() } // Validate implements river.Validator. diff --git a/internal/component/otelcol/receiver/kafka/kafka.go b/internal/component/otelcol/receiver/kafka/kafka.go index dd798f1cee..d52223f1ad 100644 --- a/internal/component/otelcol/receiver/kafka/kafka.go +++ b/internal/component/otelcol/receiver/kafka/kafka.go @@ -54,43 +54,25 @@ type Arguments struct { var _ receiver.Arguments = Arguments{} -// DefaultArguments holds default values for Arguments. -var DefaultArguments = Arguments{ - // We use the defaults from the upstream OpenTelemetry Collector component - // for compatibility, even though that means using a client and group ID of - // "otel-collector". - - Topic: "otlp_spans", - Encoding: "otlp_proto", - Brokers: []string{"localhost:9092"}, - ClientID: "otel-collector", - GroupID: "otel-collector", - InitialOffset: "latest", - Metadata: MetadataArguments{ - IncludeAllTopics: true, - Retry: MetadataRetryArguments{ - MaxRetries: 3, - Backoff: 250 * time.Millisecond, - }, - }, - AutoCommit: AutoCommitArguments{ - Enable: true, - Interval: time.Second, - }, - MessageMarking: MessageMarkingArguments{ - AfterExecution: false, - IncludeUnsuccessful: false, - }, - HeaderExtraction: HeaderExtraction{ - ExtractHeaders: false, - Headers: []string{}, - }, - DebugMetrics: otelcol.DefaultDebugMetricsArguments, -} - // SetToDefault implements river.Defaulter. func (args *Arguments) SetToDefault() { - *args = DefaultArguments + *args = Arguments{ + // We use the defaults from the upstream OpenTelemetry Collector component + // for compatibility, even though that means using a client and group ID of + // "otel-collector". + + Topic: "otlp_spans", + Encoding: "otlp_proto", + Brokers: []string{"localhost:9092"}, + ClientID: "otel-collector", + GroupID: "otel-collector", + InitialOffset: "latest", + } + args.Metadata.SetToDefault() + args.AutoCommit.SetToDefault() + args.MessageMarking.SetToDefault() + args.HeaderExtraction.SetToDefault() + args.DebugMetrics.SetToDefault() } // Convert implements receiver.Arguments. @@ -247,6 +229,16 @@ type MetadataArguments struct { Retry MetadataRetryArguments `river:"retry,block,optional"` } +func (args *MetadataArguments) SetToDefault() { + *args = MetadataArguments{ + IncludeAllTopics: true, + Retry: MetadataRetryArguments{ + MaxRetries: 3, + Backoff: 250 * time.Millisecond, + }, + } +} + // Convert converts args into the upstream type. func (args MetadataArguments) Convert() kafkaexporter.Metadata { return kafkaexporter.Metadata{ @@ -278,6 +270,13 @@ type AutoCommitArguments struct { Interval time.Duration `river:"interval,attr,optional"` } +func (args *AutoCommitArguments) SetToDefault() { + *args = AutoCommitArguments{ + Enable: true, + Interval: time.Second, + } +} + // Convert converts args into the upstream type. func (args AutoCommitArguments) Convert() kafkareceiver.AutoCommit { return kafkareceiver.AutoCommit{ @@ -292,6 +291,13 @@ type MessageMarkingArguments struct { IncludeUnsuccessful bool `river:"include_unsuccessful,attr,optional"` } +func (args *MessageMarkingArguments) SetToDefault() { + *args = MessageMarkingArguments{ + AfterExecution: false, + IncludeUnsuccessful: false, + } +} + // Convert converts args into the upstream type. func (args MessageMarkingArguments) Convert() kafkareceiver.MessageMarking { return kafkareceiver.MessageMarking{ @@ -305,6 +311,13 @@ type HeaderExtraction struct { Headers []string `river:"headers,attr,optional"` } +func (h *HeaderExtraction) SetToDefault() { + *h = HeaderExtraction{ + ExtractHeaders: false, + Headers: []string{}, + } +} + // Convert converts HeaderExtraction into the upstream type. func (h HeaderExtraction) Convert() kafkareceiver.HeaderExtraction { return kafkareceiver.HeaderExtraction{ diff --git a/internal/component/otelcol/receiver/opencensus/opencensus.go b/internal/component/otelcol/receiver/opencensus/opencensus.go index 1a4ac11573..2de11c2578 100644 --- a/internal/component/otelcol/receiver/opencensus/opencensus.go +++ b/internal/component/otelcol/receiver/opencensus/opencensus.go @@ -40,21 +40,18 @@ type Arguments struct { var _ receiver.Arguments = Arguments{} -// Default server settings. -var DefaultArguments = Arguments{ - GRPC: otelcol.GRPCServerArguments{ - Endpoint: "0.0.0.0:55678", - Transport: "tcp", - - ReadBufferSize: 512 * units.Kibibyte, - // We almost write 0 bytes, so no need to tune WriteBufferSize. - }, - DebugMetrics: otelcol.DefaultDebugMetricsArguments, -} - // SetToDefault implements river.Defaulter. func (args *Arguments) SetToDefault() { - *args = DefaultArguments + *args = Arguments{ + GRPC: otelcol.GRPCServerArguments{ + Endpoint: "0.0.0.0:55678", + Transport: "tcp", + + ReadBufferSize: 512 * units.Kibibyte, + // We almost write 0 bytes, so no need to tune WriteBufferSize. + }, + } + args.DebugMetrics.SetToDefault() } // Convert implements receiver.Arguments. diff --git a/internal/component/otelcol/receiver/opencensus/opencensus_test.go b/internal/component/otelcol/receiver/opencensus/opencensus_test.go index 8cc95042a2..aa8536a3e3 100644 --- a/internal/component/otelcol/receiver/opencensus/opencensus_test.go +++ b/internal/component/otelcol/receiver/opencensus/opencensus_test.go @@ -54,10 +54,12 @@ func TestDefaultArguments_UnmarshalRiver(t *testing.T) { require.True(t, ok) + var defaultArgs opencensus.Arguments + defaultArgs.SetToDefault() // Check the gRPC arguments - require.Equal(t, opencensus.DefaultArguments.GRPC.Endpoint, otelArgs.NetAddr.Endpoint) - require.Equal(t, opencensus.DefaultArguments.GRPC.Transport, otelArgs.NetAddr.Transport) - require.Equal(t, int(opencensus.DefaultArguments.GRPC.ReadBufferSize), otelArgs.ReadBufferSize) + require.Equal(t, defaultArgs.GRPC.Endpoint, otelArgs.NetAddr.Endpoint) + require.Equal(t, defaultArgs.GRPC.Transport, otelArgs.NetAddr.Transport) + require.Equal(t, int(defaultArgs.GRPC.ReadBufferSize), otelArgs.ReadBufferSize) } func TestArguments_UnmarshalRiver(t *testing.T) { diff --git a/internal/component/otelcol/receiver/otlp/otlp.go b/internal/component/otelcol/receiver/otlp/otlp.go index 8e59fab2be..9beb1f7ca3 100644 --- a/internal/component/otelcol/receiver/otlp/otlp.go +++ b/internal/component/otelcol/receiver/otlp/otlp.go @@ -71,9 +71,8 @@ var _ receiver.Arguments = Arguments{} // SetToDefault implements river.Defaulter. func (args *Arguments) SetToDefault() { - *args = Arguments{ - DebugMetrics: otelcol.DefaultDebugMetricsArguments, - } + *args = Arguments{} + args.DebugMetrics.SetToDefault() } // Convert implements receiver.Arguments. @@ -107,26 +106,6 @@ type ( GRPCServerArguments otelcol.GRPCServerArguments ) -// Default server settings. -var ( - DefaultGRPCServerArguments = GRPCServerArguments{ - Endpoint: "0.0.0.0:4317", - Transport: "tcp", - - ReadBufferSize: 512 * units.Kibibyte, - // We almost write 0 bytes, so no need to tune WriteBufferSize. - } - - DefaultHTTPConfigArguments = HTTPConfigArguments{ - HTTPServerArguments: &otelcol.HTTPServerArguments{ - Endpoint: "0.0.0.0:4318", - }, - MetricsURLPath: "/v1/metrics", - LogsURLPath: "/v1/logs", - TracesURLPath: "/v1/traces", - } -) - // Validate implements river.Validator. func (args *Arguments) Validate() error { if args.HTTP != nil { @@ -155,12 +134,25 @@ func validateURL(url string, urlName string) error { // SetToDefault implements river.Defaulter. func (args *GRPCServerArguments) SetToDefault() { - *args = DefaultGRPCServerArguments + *args = GRPCServerArguments{ + Endpoint: "0.0.0.0:4317", + Transport: "tcp", + + ReadBufferSize: 512 * units.Kibibyte, + // We almost write 0 bytes, so no need to tune WriteBufferSize. + } } // SetToDefault implements river.Defaulter. func (args *HTTPConfigArguments) SetToDefault() { - *args = DefaultHTTPConfigArguments + *args = HTTPConfigArguments{ + HTTPServerArguments: &otelcol.HTTPServerArguments{ + Endpoint: "0.0.0.0:4318", + }, + MetricsURLPath: "/v1/metrics", + LogsURLPath: "/v1/logs", + TracesURLPath: "/v1/traces", + } } // DebugMetricsConfig implements receiver.Arguments. diff --git a/internal/component/otelcol/receiver/receiver_test.go b/internal/component/otelcol/receiver/receiver_test.go index 2e6164a3f1..989b40fa9f 100644 --- a/internal/component/otelcol/receiver/receiver_test.go +++ b/internal/component/otelcol/receiver/receiver_test.go @@ -129,5 +129,7 @@ func (fa fakeReceiverArgs) NextConsumers() *otelcol.ConsumerArguments { } func (fa fakeReceiverArgs) DebugMetricsConfig() otelcol.DebugMetricsArguments { - return otelcol.DefaultDebugMetricsArguments + var args otelcol.DebugMetricsArguments + args.SetToDefault() + return args } diff --git a/internal/component/otelcol/receiver/vcenter/vcenter.go b/internal/component/otelcol/receiver/vcenter/vcenter.go index a44105a305..68f3eea716 100644 --- a/internal/component/otelcol/receiver/vcenter/vcenter.go +++ b/internal/component/otelcol/receiver/vcenter/vcenter.go @@ -86,6 +86,50 @@ type MetricsConfig struct { VcenterVMNetworkUsage MetricConfig `river:"vcenter.vm.network.usage,block,optional"` } +func (args *MetricsConfig) SetToDefault() { + *args = MetricsConfig{ + VcenterClusterCPUEffective: MetricConfig{Enabled: true}, + VcenterClusterCPULimit: MetricConfig{Enabled: true}, + VcenterClusterHostCount: MetricConfig{Enabled: true}, + VcenterClusterMemoryEffective: MetricConfig{Enabled: true}, + VcenterClusterMemoryLimit: MetricConfig{Enabled: true}, + VcenterClusterMemoryUsed: MetricConfig{Enabled: true}, + VcenterClusterVMCount: MetricConfig{Enabled: true}, + VcenterDatastoreDiskUsage: MetricConfig{Enabled: true}, + VcenterDatastoreDiskUtilization: MetricConfig{Enabled: true}, + VcenterHostCPUUsage: MetricConfig{Enabled: true}, + VcenterHostCPUUtilization: MetricConfig{Enabled: true}, + VcenterHostDiskLatencyAvg: MetricConfig{Enabled: true}, + VcenterHostDiskLatencyMax: MetricConfig{Enabled: true}, + VcenterHostDiskThroughput: MetricConfig{Enabled: true}, + VcenterHostMemoryUsage: MetricConfig{Enabled: true}, + VcenterHostMemoryUtilization: MetricConfig{Enabled: true}, + VcenterHostNetworkPacketCount: MetricConfig{Enabled: true}, + VcenterHostNetworkPacketErrors: MetricConfig{Enabled: true}, + VcenterHostNetworkThroughput: MetricConfig{Enabled: true}, + VcenterHostNetworkUsage: MetricConfig{Enabled: true}, + VcenterResourcePoolCPUShares: MetricConfig{Enabled: true}, + VcenterResourcePoolCPUUsage: MetricConfig{Enabled: true}, + VcenterResourcePoolMemoryShares: MetricConfig{Enabled: true}, + VcenterResourcePoolMemoryUsage: MetricConfig{Enabled: true}, + VcenterVMCPUUsage: MetricConfig{Enabled: true}, + VcenterVMCPUUtilization: MetricConfig{Enabled: true}, + VcenterVMDiskLatencyAvg: MetricConfig{Enabled: true}, + VcenterVMDiskLatencyMax: MetricConfig{Enabled: true}, + VcenterVMDiskThroughput: MetricConfig{Enabled: true}, + VcenterVMDiskUsage: MetricConfig{Enabled: true}, + VcenterVMDiskUtilization: MetricConfig{Enabled: true}, + VcenterVMMemoryBallooned: MetricConfig{Enabled: true}, + VcenterVMMemorySwapped: MetricConfig{Enabled: true}, + VcenterVMMemorySwappedSsd: MetricConfig{Enabled: true}, + VcenterVMMemoryUsage: MetricConfig{Enabled: true}, + VcenterVMMemoryUtilization: MetricConfig{Enabled: false}, + VcenterVMNetworkPacketCount: MetricConfig{Enabled: true}, + VcenterVMNetworkThroughput: MetricConfig{Enabled: true}, + VcenterVMNetworkUsage: MetricConfig{Enabled: true}, + } +} + func (args *MetricsConfig) Convert() map[string]interface{} { if args == nil { return nil @@ -157,6 +201,18 @@ type ResourceAttributesConfig struct { VcenterVMName ResourceAttributeConfig `river:"vcenter.vm.name,block,optional"` } +func (args *ResourceAttributesConfig) SetToDefault() { + *args = ResourceAttributesConfig{ + VcenterClusterName: ResourceAttributeConfig{Enabled: true}, + VcenterDatastoreName: ResourceAttributeConfig{Enabled: true}, + VcenterHostName: ResourceAttributeConfig{Enabled: true}, + VcenterResourcePoolInventoryPath: ResourceAttributeConfig{Enabled: true}, + VcenterResourcePoolName: ResourceAttributeConfig{Enabled: true}, + VcenterVMID: ResourceAttributeConfig{Enabled: true}, + VcenterVMName: ResourceAttributeConfig{Enabled: true}, + } +} + func (args *ResourceAttributesConfig) Convert() map[string]interface{} { if args == nil { return nil @@ -180,6 +236,12 @@ type MetricsBuilderConfig struct { ResourceAttributes ResourceAttributesConfig `river:"resource_attributes,block,optional"` } +func (mbc *MetricsBuilderConfig) SetToDefault() { + *mbc = MetricsBuilderConfig{} + mbc.Metrics.SetToDefault() + mbc.ResourceAttributes.SetToDefault() +} + func (args *MetricsBuilderConfig) Convert() map[string]interface{} { if args == nil { return nil @@ -213,69 +275,13 @@ type Arguments struct { var _ receiver.Arguments = Arguments{} -var ( - // DefaultArguments holds default values for Arguments. - DefaultArguments = Arguments{ - ScraperControllerArguments: otelcol.DefaultScraperControllerArguments, - MetricsBuilderConfig: MetricsBuilderConfig{ - Metrics: MetricsConfig{ - VcenterClusterCPUEffective: MetricConfig{Enabled: true}, - VcenterClusterCPULimit: MetricConfig{Enabled: true}, - VcenterClusterHostCount: MetricConfig{Enabled: true}, - VcenterClusterMemoryEffective: MetricConfig{Enabled: true}, - VcenterClusterMemoryLimit: MetricConfig{Enabled: true}, - VcenterClusterMemoryUsed: MetricConfig{Enabled: true}, - VcenterClusterVMCount: MetricConfig{Enabled: true}, - VcenterDatastoreDiskUsage: MetricConfig{Enabled: true}, - VcenterDatastoreDiskUtilization: MetricConfig{Enabled: true}, - VcenterHostCPUUsage: MetricConfig{Enabled: true}, - VcenterHostCPUUtilization: MetricConfig{Enabled: true}, - VcenterHostDiskLatencyAvg: MetricConfig{Enabled: true}, - VcenterHostDiskLatencyMax: MetricConfig{Enabled: true}, - VcenterHostDiskThroughput: MetricConfig{Enabled: true}, - VcenterHostMemoryUsage: MetricConfig{Enabled: true}, - VcenterHostMemoryUtilization: MetricConfig{Enabled: true}, - VcenterHostNetworkPacketCount: MetricConfig{Enabled: true}, - VcenterHostNetworkPacketErrors: MetricConfig{Enabled: true}, - VcenterHostNetworkThroughput: MetricConfig{Enabled: true}, - VcenterHostNetworkUsage: MetricConfig{Enabled: true}, - VcenterResourcePoolCPUShares: MetricConfig{Enabled: true}, - VcenterResourcePoolCPUUsage: MetricConfig{Enabled: true}, - VcenterResourcePoolMemoryShares: MetricConfig{Enabled: true}, - VcenterResourcePoolMemoryUsage: MetricConfig{Enabled: true}, - VcenterVMCPUUsage: MetricConfig{Enabled: true}, - VcenterVMCPUUtilization: MetricConfig{Enabled: true}, - VcenterVMDiskLatencyAvg: MetricConfig{Enabled: true}, - VcenterVMDiskLatencyMax: MetricConfig{Enabled: true}, - VcenterVMDiskThroughput: MetricConfig{Enabled: true}, - VcenterVMDiskUsage: MetricConfig{Enabled: true}, - VcenterVMDiskUtilization: MetricConfig{Enabled: true}, - VcenterVMMemoryBallooned: MetricConfig{Enabled: true}, - VcenterVMMemorySwapped: MetricConfig{Enabled: true}, - VcenterVMMemorySwappedSsd: MetricConfig{Enabled: true}, - VcenterVMMemoryUsage: MetricConfig{Enabled: true}, - VcenterVMMemoryUtilization: MetricConfig{Enabled: false}, - VcenterVMNetworkPacketCount: MetricConfig{Enabled: true}, - VcenterVMNetworkThroughput: MetricConfig{Enabled: true}, - VcenterVMNetworkUsage: MetricConfig{Enabled: true}, - }, - ResourceAttributes: ResourceAttributesConfig{ - VcenterClusterName: ResourceAttributeConfig{Enabled: true}, - VcenterDatastoreName: ResourceAttributeConfig{Enabled: true}, - VcenterHostName: ResourceAttributeConfig{Enabled: true}, - VcenterResourcePoolInventoryPath: ResourceAttributeConfig{Enabled: true}, - VcenterResourcePoolName: ResourceAttributeConfig{Enabled: true}, - VcenterVMID: ResourceAttributeConfig{Enabled: true}, - VcenterVMName: ResourceAttributeConfig{Enabled: true}, - }, - }, - DebugMetrics: otelcol.DefaultDebugMetricsArguments, - } -) - // SetToDefault implements river.Defaulter. func (args *Arguments) SetToDefault() { - *args = DefaultArguments + *args = Arguments{ + ScraperControllerArguments: otelcol.DefaultScraperControllerArguments, + } + args.MetricsBuilderConfig.SetToDefault() + args.DebugMetrics.SetToDefault() } // Convert implements receiver.Arguments. diff --git a/internal/component/otelcol/receiver/zipkin/zipkin.go b/internal/component/otelcol/receiver/zipkin/zipkin.go index 46c6d74b9c..6cf15ac2a1 100644 --- a/internal/component/otelcol/receiver/zipkin/zipkin.go +++ b/internal/component/otelcol/receiver/zipkin/zipkin.go @@ -39,17 +39,14 @@ type Arguments struct { var _ receiver.Arguments = Arguments{} -// DefaultArguments holds default settings for otelcol.receiver.zipkin. -var DefaultArguments = Arguments{ - HTTPServer: otelcol.HTTPServerArguments{ - Endpoint: "0.0.0.0:9411", - }, - DebugMetrics: otelcol.DefaultDebugMetricsArguments, -} - // SetToDefault implements river.Defaulter. func (args *Arguments) SetToDefault() { - *args = DefaultArguments + *args = Arguments{ + HTTPServer: otelcol.HTTPServerArguments{ + Endpoint: "0.0.0.0:9411", + }, + } + args.DebugMetrics.SetToDefault() } // Convert implements receiver.Arguments. diff --git a/internal/component/prometheus/exporter/azure/azure.go b/internal/component/prometheus/exporter/azure/azure.go index 391e9c5932..3671cfa783 100644 --- a/internal/component/prometheus/exporter/azure/azure.go +++ b/internal/component/prometheus/exporter/azure/azure.go @@ -41,21 +41,19 @@ type Arguments struct { Regions []string `river:"regions,attr,optional"` } -var DefaultArguments = Arguments{ - Timespan: "PT1M", - MetricNameTemplate: "azure_{type}_{metric}_{aggregation}_{unit}", - MetricHelpTemplate: "Azure metric {metric} for {type} with aggregation {aggregation} as {unit}", - IncludedResourceTags: []string{"owner"}, - AzureCloudEnvironment: "azurecloud", - // Dimensions do not always apply to all metrics for a service, which requires you to configure multiple exporters - // to fully monitor a service which is tedious. Turning off validation eliminates this complexity. The underlying - // sdk will only give back the dimensions which are valid for particular metrics. - ValidateDimensions: false, -} - // SetToDefault implements river.Defaulter. func (a *Arguments) SetToDefault() { - *a = DefaultArguments + *a = Arguments{ + Timespan: "PT1M", + MetricNameTemplate: "azure_{type}_{metric}_{aggregation}_{unit}", + MetricHelpTemplate: "Azure metric {metric} for {type} with aggregation {aggregation} as {unit}", + IncludedResourceTags: []string{"owner"}, + AzureCloudEnvironment: "azurecloud", + // Dimensions do not always apply to all metrics for a service, which requires you to configure multiple exporters + // to fully monitor a service which is tedious. Turning off validation eliminates this complexity. The underlying + // sdk will only give back the dimensions which are valid for particular metrics. + ValidateDimensions: false, + } } // Validate implements river.Validator. diff --git a/internal/component/prometheus/exporter/cadvisor/cadvisor.go b/internal/component/prometheus/exporter/cadvisor/cadvisor.go index ce6d1f1ca8..e28b4e1c7d 100644 --- a/internal/component/prometheus/exporter/cadvisor/cadvisor.go +++ b/internal/component/prometheus/exporter/cadvisor/cadvisor.go @@ -26,30 +26,6 @@ func createExporter(opts component.Options, args component.Arguments, defaultIns return integrations.NewIntegrationWithInstanceKey(opts.Logger, a.Convert(), defaultInstanceKey) } -// DefaultArguments holds non-zero default options for Arguments when it is -// unmarshaled from river. -var DefaultArguments = Arguments{ - StoreContainerLabels: true, - AllowlistedContainerLabels: []string{""}, - EnvMetadataAllowlist: []string{""}, - RawCgroupPrefixAllowlist: []string{""}, - ResctrlInterval: 0, - StorageDuration: 2 * time.Minute, - - ContainerdHost: "/run/containerd/containerd.sock", - ContainerdNamespace: "k8s.io", - - // TODO(@tpaschalis) Do we need the default cert/key/ca since tls is disabled by default? - DockerHost: "unix:///var/run/docker.sock", - UseDockerTLS: false, - DockerTLSCert: "cert.pem", - DockerTLSKey: "key.pem", - DockerTLSCA: "ca.pem", - - DockerOnly: false, - DisableRootCgroupStats: false, -} - // Arguments configures the prometheus.exporter.cadvisor component. type Arguments struct { StoreContainerLabels bool `river:"store_container_labels,attr,optional"` @@ -74,7 +50,27 @@ type Arguments struct { // SetToDefault implements river.Defaulter. func (a *Arguments) SetToDefault() { - *a = DefaultArguments + *a = Arguments{ + StoreContainerLabels: true, + AllowlistedContainerLabels: []string{""}, + EnvMetadataAllowlist: []string{""}, + RawCgroupPrefixAllowlist: []string{""}, + ResctrlInterval: 0, + StorageDuration: 2 * time.Minute, + + ContainerdHost: "/run/containerd/containerd.sock", + ContainerdNamespace: "k8s.io", + + // TODO(@tpaschalis) Do we need the default cert/key/ca since tls is disabled by default? + DockerHost: "unix:///var/run/docker.sock", + UseDockerTLS: false, + DockerTLSCert: "cert.pem", + DockerTLSKey: "key.pem", + DockerTLSCA: "ca.pem", + + DockerOnly: false, + DisableRootCgroupStats: false, + } } // Convert returns the upstream-compatible configuration struct. diff --git a/internal/component/prometheus/exporter/self/self.go b/internal/component/prometheus/exporter/self/self.go index 3d0af166df..32735c19e5 100644 --- a/internal/component/prometheus/exporter/self/self.go +++ b/internal/component/prometheus/exporter/self/self.go @@ -30,12 +30,9 @@ type Arguments struct{} // Exports holds the values exported by the prometheus.exporter.self component. type Exports struct{} -// DefaultArguments defines the default settings -var DefaultArguments = Arguments{} - // SetToDefault implements river.Defaulter func (args *Arguments) SetToDefault() { - *args = DefaultArguments + *args = Arguments{} } func (a *Arguments) Convert() *agent.Config { diff --git a/internal/converter/internal/staticconvert/testdata-v2/integrations_v2.river b/internal/converter/internal/staticconvert/testdata-v2/integrations_v2.river index c609330be6..6fc587de7d 100644 --- a/internal/converter/internal/staticconvert/testdata-v2/integrations_v2.river +++ b/internal/converter/internal/staticconvert/testdata-v2/integrations_v2.river @@ -689,15 +689,13 @@ faro.receiver "integrations_app_agent_receiver" { max_allowed_payload_size = "4MiB786KiB832B" rate_limiting { - enabled = true rate = 100 burst_size = 50 } } sourcemaps { - download_from_origins = ["*"] - download_timeout = "1s" + download = false } output { diff --git a/internal/converter/internal/staticconvert/testdata-v2/unsupported.river b/internal/converter/internal/staticconvert/testdata-v2/unsupported.river index c9585a88c5..2ec9a53004 100644 --- a/internal/converter/internal/staticconvert/testdata-v2/unsupported.river +++ b/internal/converter/internal/staticconvert/testdata-v2/unsupported.river @@ -29,15 +29,13 @@ faro.receiver "integrations_app_agent_receiver" { max_allowed_payload_size = "4MiB786KiB832B" rate_limiting { - enabled = true rate = 100 burst_size = 50 } } sourcemaps { - download_from_origins = ["*"] - download_timeout = "1s" + download = false } output { diff --git a/internal/converter/internal/staticconvert/testdata/traces_multi.river b/internal/converter/internal/staticconvert/testdata/traces_multi.river index b7e4a4ea76..acf5f44e06 100644 --- a/internal/converter/internal/staticconvert/testdata/traces_multi.river +++ b/internal/converter/internal/staticconvert/testdata/traces_multi.river @@ -3,7 +3,9 @@ otelcol.receiver.otlp "trace_config_1_default" { include_metadata = true } - http { } + http { + include_metadata = true + } output { metrics = [] @@ -40,7 +42,9 @@ otelcol.receiver.otlp "trace_config_2_default" { include_metadata = true } - http { } + http { + include_metadata = true + } output { metrics = [] diff --git a/internal/converter/internal/staticconvert/testdata/unsupported.river b/internal/converter/internal/staticconvert/testdata/unsupported.river index 3e9a55630b..cd5e525bef 100644 --- a/internal/converter/internal/staticconvert/testdata/unsupported.river +++ b/internal/converter/internal/staticconvert/testdata/unsupported.river @@ -55,7 +55,9 @@ otelcol.receiver.otlp "default" { include_metadata = true } - http { } + http { + include_metadata = true + } output { metrics = [] From 514c541a0f4e0e097e9fda45934d7b19c03f1f46 Mon Sep 17 00:00:00 2001 From: Erik Baranowski <39704712+erikbaranowski@users.noreply.github.com> Date: Thu, 21 Mar 2024 10:42:14 -0400 Subject: [PATCH 4/4] don't reuse pointers for the windows exporter defaults (#6744) Signed-off-by: Erik Baranowski <39704712+erikbaranowski@users.noreply.github.com> --- .../windows/config_default_windows_test.go | 50 +++---- .../exporter/windows/config_windows.go | 132 +++++++++--------- 2 files changed, 90 insertions(+), 92 deletions(-) diff --git a/internal/component/prometheus/exporter/windows/config_default_windows_test.go b/internal/component/prometheus/exporter/windows/config_default_windows_test.go index 7242ac42e5..6cdd9cf602 100644 --- a/internal/component/prometheus/exporter/windows/config_default_windows_test.go +++ b/internal/component/prometheus/exporter/windows/config_default_windows_test.go @@ -12,28 +12,30 @@ func TestRiverUnmarshalWithDefaultConfig(t *testing.T) { err := river.Unmarshal([]byte(""), &args) require.NoError(t, err) - require.Equal(t, DefaultArguments.EnabledCollectors, args.EnabledCollectors) - require.Equal(t, DefaultArguments.Dfsr.SourcesEnabled, args.Dfsr.SourcesEnabled) - require.Equal(t, DefaultArguments.Exchange.EnabledList, args.Exchange.EnabledList) - require.Equal(t, DefaultArguments.IIS.AppExclude, args.IIS.AppExclude) - require.Equal(t, DefaultArguments.IIS.AppInclude, args.IIS.AppInclude) - require.Equal(t, DefaultArguments.IIS.SiteExclude, args.IIS.SiteExclude) - require.Equal(t, DefaultArguments.IIS.SiteInclude, args.IIS.SiteInclude) - require.Equal(t, DefaultArguments.LogicalDisk.Exclude, args.LogicalDisk.Exclude) - require.Equal(t, DefaultArguments.LogicalDisk.Include, args.LogicalDisk.Include) - require.Equal(t, DefaultArguments.MSMQ.Where, args.MSMQ.Where) - require.Equal(t, DefaultArguments.MSSQL.EnabledClasses, args.MSSQL.EnabledClasses) - require.Equal(t, DefaultArguments.Network.Exclude, args.Network.Exclude) - require.Equal(t, DefaultArguments.Network.Include, args.Network.Include) - require.Equal(t, DefaultArguments.PhysicalDisk.Exclude, args.PhysicalDisk.Exclude) - require.Equal(t, DefaultArguments.PhysicalDisk.Include, args.PhysicalDisk.Include) - require.Equal(t, DefaultArguments.Process.Exclude, args.Process.Exclude) - require.Equal(t, DefaultArguments.Process.Include, args.Process.Include) - require.Equal(t, DefaultArguments.ScheduledTask.Exclude, args.ScheduledTask.Exclude) - require.Equal(t, DefaultArguments.ScheduledTask.Include, args.ScheduledTask.Include) - require.Equal(t, DefaultArguments.Service.UseApi, args.Service.UseApi) - require.Equal(t, DefaultArguments.Service.Where, args.Service.Where) - require.Equal(t, DefaultArguments.SMTP.Exclude, args.SMTP.Exclude) - require.Equal(t, DefaultArguments.SMTP.Include, args.SMTP.Include) - require.Equal(t, DefaultArguments.TextFile.TextFileDirectory, args.TextFile.TextFileDirectory) + var defaultArgs Arguments + defaultArgs.SetToDefault() + require.Equal(t, defaultArgs.EnabledCollectors, args.EnabledCollectors) + require.Equal(t, defaultArgs.Dfsr.SourcesEnabled, args.Dfsr.SourcesEnabled) + require.Equal(t, defaultArgs.Exchange.EnabledList, args.Exchange.EnabledList) + require.Equal(t, defaultArgs.IIS.AppExclude, args.IIS.AppExclude) + require.Equal(t, defaultArgs.IIS.AppInclude, args.IIS.AppInclude) + require.Equal(t, defaultArgs.IIS.SiteExclude, args.IIS.SiteExclude) + require.Equal(t, defaultArgs.IIS.SiteInclude, args.IIS.SiteInclude) + require.Equal(t, defaultArgs.LogicalDisk.Exclude, args.LogicalDisk.Exclude) + require.Equal(t, defaultArgs.LogicalDisk.Include, args.LogicalDisk.Include) + require.Equal(t, defaultArgs.MSMQ.Where, args.MSMQ.Where) + require.Equal(t, defaultArgs.MSSQL.EnabledClasses, args.MSSQL.EnabledClasses) + require.Equal(t, defaultArgs.Network.Exclude, args.Network.Exclude) + require.Equal(t, defaultArgs.Network.Include, args.Network.Include) + require.Equal(t, defaultArgs.PhysicalDisk.Exclude, args.PhysicalDisk.Exclude) + require.Equal(t, defaultArgs.PhysicalDisk.Include, args.PhysicalDisk.Include) + require.Equal(t, defaultArgs.Process.Exclude, args.Process.Exclude) + require.Equal(t, defaultArgs.Process.Include, args.Process.Include) + require.Equal(t, defaultArgs.ScheduledTask.Exclude, args.ScheduledTask.Exclude) + require.Equal(t, defaultArgs.ScheduledTask.Include, args.ScheduledTask.Include) + require.Equal(t, defaultArgs.Service.UseApi, args.Service.UseApi) + require.Equal(t, defaultArgs.Service.Where, args.Service.Where) + require.Equal(t, defaultArgs.SMTP.Exclude, args.SMTP.Exclude) + require.Equal(t, defaultArgs.SMTP.Include, args.SMTP.Include) + require.Equal(t, defaultArgs.TextFile.TextFileDirectory, args.TextFile.TextFileDirectory) } diff --git a/internal/component/prometheus/exporter/windows/config_windows.go b/internal/component/prometheus/exporter/windows/config_windows.go index 773e3f5bfc..d1e138b9b5 100644 --- a/internal/component/prometheus/exporter/windows/config_windows.go +++ b/internal/component/prometheus/exporter/windows/config_windows.go @@ -7,74 +7,70 @@ import ( col "github.com/prometheus-community/windows_exporter/pkg/collector" ) -// DefaultArguments holds non-zero default options for Arguments when it is -// unmarshaled from YAML. -var DefaultArguments = Arguments{ - EnabledCollectors: strings.Split(windows_integration.DefaultConfig.EnabledCollectors, ","), - Dfsr: DfsrConfig{ - SourcesEnabled: strings.Split(col.ConfigDefaults.Dfsr.DfsrEnabledCollectors, ","), - }, - Exchange: ExchangeConfig{ - EnabledList: strings.Split(col.ConfigDefaults.Exchange.CollectorsEnabled, ","), - }, - IIS: IISConfig{ - AppBlackList: col.ConfigDefaults.Iis.AppExclude, - AppWhiteList: col.ConfigDefaults.Iis.AppInclude, - SiteBlackList: col.ConfigDefaults.Iis.SiteExclude, - SiteWhiteList: col.ConfigDefaults.Iis.SiteInclude, - AppInclude: col.ConfigDefaults.Iis.AppInclude, - AppExclude: col.ConfigDefaults.Iis.AppExclude, - SiteInclude: col.ConfigDefaults.Iis.SiteInclude, - SiteExclude: col.ConfigDefaults.Iis.SiteExclude, - }, - LogicalDisk: LogicalDiskConfig{ - BlackList: col.ConfigDefaults.LogicalDisk.VolumeExclude, - WhiteList: col.ConfigDefaults.LogicalDisk.VolumeInclude, - Include: col.ConfigDefaults.LogicalDisk.VolumeInclude, - Exclude: col.ConfigDefaults.LogicalDisk.VolumeExclude, - }, - MSMQ: MSMQConfig{ - Where: col.ConfigDefaults.Msmq.QueryWhereClause, - }, - MSSQL: MSSQLConfig{ - EnabledClasses: strings.Split(col.ConfigDefaults.Mssql.EnabledCollectors, ","), - }, - Network: NetworkConfig{ - BlackList: col.ConfigDefaults.Net.NicExclude, - WhiteList: col.ConfigDefaults.Net.NicInclude, - Include: col.ConfigDefaults.Net.NicInclude, - Exclude: col.ConfigDefaults.Net.NicExclude, - }, - PhysicalDisk: PhysicalDiskConfig{ - Exclude: col.ConfigDefaults.PhysicalDisk.DiskExclude, - Include: col.ConfigDefaults.PhysicalDisk.DiskInclude, - }, - Process: ProcessConfig{ - BlackList: col.ConfigDefaults.Process.ProcessExclude, - WhiteList: col.ConfigDefaults.Process.ProcessInclude, - Include: col.ConfigDefaults.Process.ProcessInclude, - Exclude: col.ConfigDefaults.Process.ProcessExclude, - }, - ScheduledTask: ScheduledTaskConfig{ - Include: col.ConfigDefaults.ScheduledTask.TaskInclude, - Exclude: col.ConfigDefaults.ScheduledTask.TaskExclude, - }, - Service: ServiceConfig{ - UseApi: "false", - Where: col.ConfigDefaults.Service.ServiceWhereClause, - }, - SMTP: SMTPConfig{ - BlackList: col.ConfigDefaults.Smtp.ServerExclude, - WhiteList: col.ConfigDefaults.Smtp.ServerInclude, - Include: col.ConfigDefaults.Smtp.ServerInclude, - Exclude: col.ConfigDefaults.Smtp.ServerExclude, - }, - TextFile: TextFileConfig{ - TextFileDirectory: col.ConfigDefaults.Textfile.TextFileDirectories, - }, -} - // SetToDefault implements river.Defaulter. func (a *Arguments) SetToDefault() { - *a = DefaultArguments + *a = Arguments{ + EnabledCollectors: strings.Split(windows_integration.DefaultConfig.EnabledCollectors, ","), + Dfsr: DfsrConfig{ + SourcesEnabled: strings.Split(col.ConfigDefaults.Dfsr.DfsrEnabledCollectors, ","), + }, + Exchange: ExchangeConfig{ + EnabledList: strings.Split(col.ConfigDefaults.Exchange.CollectorsEnabled, ","), + }, + IIS: IISConfig{ + AppBlackList: col.ConfigDefaults.Iis.AppExclude, + AppWhiteList: col.ConfigDefaults.Iis.AppInclude, + SiteBlackList: col.ConfigDefaults.Iis.SiteExclude, + SiteWhiteList: col.ConfigDefaults.Iis.SiteInclude, + AppInclude: col.ConfigDefaults.Iis.AppInclude, + AppExclude: col.ConfigDefaults.Iis.AppExclude, + SiteInclude: col.ConfigDefaults.Iis.SiteInclude, + SiteExclude: col.ConfigDefaults.Iis.SiteExclude, + }, + LogicalDisk: LogicalDiskConfig{ + BlackList: col.ConfigDefaults.LogicalDisk.VolumeExclude, + WhiteList: col.ConfigDefaults.LogicalDisk.VolumeInclude, + Include: col.ConfigDefaults.LogicalDisk.VolumeInclude, + Exclude: col.ConfigDefaults.LogicalDisk.VolumeExclude, + }, + MSMQ: MSMQConfig{ + Where: col.ConfigDefaults.Msmq.QueryWhereClause, + }, + MSSQL: MSSQLConfig{ + EnabledClasses: strings.Split(col.ConfigDefaults.Mssql.EnabledCollectors, ","), + }, + Network: NetworkConfig{ + BlackList: col.ConfigDefaults.Net.NicExclude, + WhiteList: col.ConfigDefaults.Net.NicInclude, + Include: col.ConfigDefaults.Net.NicInclude, + Exclude: col.ConfigDefaults.Net.NicExclude, + }, + PhysicalDisk: PhysicalDiskConfig{ + Exclude: col.ConfigDefaults.PhysicalDisk.DiskExclude, + Include: col.ConfigDefaults.PhysicalDisk.DiskInclude, + }, + Process: ProcessConfig{ + BlackList: col.ConfigDefaults.Process.ProcessExclude, + WhiteList: col.ConfigDefaults.Process.ProcessInclude, + Include: col.ConfigDefaults.Process.ProcessInclude, + Exclude: col.ConfigDefaults.Process.ProcessExclude, + }, + ScheduledTask: ScheduledTaskConfig{ + Include: col.ConfigDefaults.ScheduledTask.TaskInclude, + Exclude: col.ConfigDefaults.ScheduledTask.TaskExclude, + }, + Service: ServiceConfig{ + UseApi: "false", + Where: col.ConfigDefaults.Service.ServiceWhereClause, + }, + SMTP: SMTPConfig{ + BlackList: col.ConfigDefaults.Smtp.ServerExclude, + WhiteList: col.ConfigDefaults.Smtp.ServerInclude, + Include: col.ConfigDefaults.Smtp.ServerInclude, + Exclude: col.ConfigDefaults.Smtp.ServerExclude, + }, + TextFile: TextFileConfig{ + TextFileDirectory: col.ConfigDefaults.Textfile.TextFileDirectories, + }, + } }