From 1828d503d2f96ccb414f7a31021c07cdacc4702b Mon Sep 17 00:00:00 2001 From: Dmitry Anoshin Date: Fri, 23 Feb 2024 13:02:57 -0800 Subject: [PATCH] Add a resource attribute to internal metrics to track discovery usage --- CHANGELOG.md | 4 ++++ internal/configconverter/discovery.go | 18 ++++++++++++++++++ internal/configconverter/discovery_test.go | 19 +++++++++++++++++++ tests/general/discoverymode/configd_test.go | 5 +++++ .../docker_observer_discovery_test.go | 5 +++++ .../host_observer_discovery_test.go | 2 ++ .../k8s_observer_discovery_test.go | 2 ++ 7 files changed, 55 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index b12b869be4..d30c3a44b5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,10 @@ ## Unreleased +### 💡 Enhancements 💡 + +- (Splunk) Add a resource attribute to internal metrics to track discovery usage ([#4323](https://github.com/signalfx/splunk-otel-collector/pull/4323)) + ## v0.93.0 This Splunk OpenTelemetry Collector release includes changes from the [opentelemetry-collector v0.93.0](https://github.com/open-telemetry/opentelemetry-collector/releases/tag/v0.93.0) and the [opentelemetry-collector-contrib v0.93.0](https://github.com/open-telemetry/opentelemetry-collector-contrib/releases/tag/v0.93.0) releases where appropriate. diff --git a/internal/configconverter/discovery.go b/internal/configconverter/discovery.go index e99339dec9..8c2e66f8e5 100644 --- a/internal/configconverter/discovery.go +++ b/internal/configconverter/discovery.go @@ -69,10 +69,28 @@ func (Discovery) Convert(_ context.Context, in *confmap.Conf) error { metricsPipeline["receivers"] = appendUnique(metricsReceivers, discoReceivers) } + setAutoDiscoveryResourceAttribute(service) + *in = *confmap.NewFromStringMap(out) return nil } +func setAutoDiscoveryResourceAttribute(service map[string]any) { + telemetry := map[string]any{} + if tel, ok := service["telemetry"]; ok { + telemetry = tel.(map[string]any) + } + service["telemetry"] = telemetry + + resAttrs := map[string]any{} + if ra, ok := telemetry["resource"]; ok { + resAttrs = ra.(map[string]any) + } + telemetry["resource"] = resAttrs + + resAttrs["splunk_autodiscovery"] = "true" +} + func getServiceExtensions(out map[string]any) (map[string]any, []any, error) { service := map[string]any{} var serviceExtensions []any diff --git a/internal/configconverter/discovery_test.go b/internal/configconverter/discovery_test.go index dd2c00aaf0..52e85d54cd 100644 --- a/internal/configconverter/discovery_test.go +++ b/internal/configconverter/discovery_test.go @@ -37,6 +37,9 @@ func TestDiscovery(t *testing.T) { processors: [proc/six, proc/seven, proc/eight] exporters: [exp/six, exp/seven, exp/eight] receivers/splunk.discovery: [recv/four, recv/five] + telemetry: + resource: + my-resource: test `) expected := confFromYaml(t, `service: @@ -50,6 +53,10 @@ func TestDiscovery(t *testing.T) { receivers: [recv/six, recv/seven, recv/eight] processors: [proc/six, proc/seven, proc/eight] exporters: [exp/six, exp/seven, exp/eight] + telemetry: + resource: + my-resource: test + splunk_autodiscovery: "true" `) require.NoError(t, Discovery{}.Convert(context.Background(), in)) @@ -112,6 +119,9 @@ func TestDiscoveryExtensionsOnly(t *testing.T) { receivers: [recv/six, recv/seven, recv/eight] processors: [proc/six, proc/seven, proc/eight] exporters: [exp/six, exp/seven, exp/eight] + telemetry: + resource: + splunk_autodiscovery: "true" `) require.NoError(t, Discovery{}.Convert(context.Background(), in)) @@ -143,6 +153,9 @@ func TestDiscoveryEmptyExtensions(t *testing.T) { receivers: [recv/six, recv/seven, recv/eight] processors: [proc/six, proc/seven, proc/eight] exporters: [exp/six, exp/seven, exp/eight] + telemetry: + resource: + splunk_autodiscovery: "true" `) require.NoError(t, Discovery{}.Convert(context.Background(), in)) @@ -173,6 +186,9 @@ func TestDiscoveryReceiversOnly(t *testing.T) { receivers: [recv/six, recv/seven, recv/eight] processors: [proc/six, proc/seven, proc/eight] exporters: [exp/six, exp/seven, exp/eight] + telemetry: + resource: + splunk_autodiscovery: "true" `) require.NoError(t, Discovery{}.Convert(context.Background(), in)) @@ -201,6 +217,9 @@ func TestDiscoveryEmptyReceivers(t *testing.T) { receivers: [recv/six, recv/seven, recv/eight] processors: [proc/six, proc/seven, proc/eight] exporters: [exp/six, exp/seven, exp/eight] + telemetry: + resource: + splunk_autodiscovery: "true" `) require.NoError(t, Discovery{}.Convert(context.Background(), in)) diff --git a/tests/general/discoverymode/configd_test.go b/tests/general/discoverymode/configd_test.go index d9c95ed2bf..bdb1ad9fb5 100644 --- a/tests/general/discoverymode/configd_test.go +++ b/tests/general/discoverymode/configd_test.go @@ -179,6 +179,9 @@ func TestConfigDInitialAndEffectiveConfig(t *testing.T) { "logs": map[string]any{ "level": "debug", }, + "resource": map[string]any{ + "splunk_autodiscovery": "true", + }, }, }, } @@ -231,6 +234,8 @@ service: telemetry: logs: level: debug + resource: + splunk_autodiscovery: "true" `, stdout) require.Equal(t, "", stderr) require.Zero(t, sc) diff --git a/tests/general/discoverymode/docker_observer_discovery_test.go b/tests/general/discoverymode/docker_observer_discovery_test.go index 75390a393e..8e2abc7bf5 100644 --- a/tests/general/discoverymode/docker_observer_discovery_test.go +++ b/tests/general/discoverymode/docker_observer_discovery_test.go @@ -201,6 +201,9 @@ func TestDockerObserver(t *testing.T) { "address": "", "level": "none", }, + "resource": map[string]any{ + "splunk_autodiscovery": "true", + }, }, }, "extensions": map[string]any{ @@ -291,6 +294,8 @@ service: metrics: address: "" level: none + resource: + splunk_autodiscovery: "true" `, stdout) require.Contains( t, stderr, diff --git a/tests/general/discoverymode/host_observer_discovery_test.go b/tests/general/discoverymode/host_observer_discovery_test.go index a189cabb50..276870bd59 100644 --- a/tests/general/discoverymode/host_observer_discovery_test.go +++ b/tests/general/discoverymode/host_observer_discovery_test.go @@ -325,6 +325,8 @@ service: metrics: address: "" level: none + resource: + splunk_autodiscovery: "true" `, stdout, errorContent) split := strings.Split(stderr, "\n") diff --git a/tests/general/discoverymode/k8s_observer_discovery_test.go b/tests/general/discoverymode/k8s_observer_discovery_test.go index aa831b1712..8ac7d36f1d 100644 --- a/tests/general/discoverymode/k8s_observer_discovery_test.go +++ b/tests/general/discoverymode/k8s_observer_discovery_test.go @@ -129,6 +129,8 @@ service: metrics: address: "" level: none + resource: + splunk_autodiscovery: "true" `, stdout.String()) require.Contains( t, stderr.String(),