diff --git a/CHANGELOG.md b/CHANGELOG.md index 8ea625f0c2b6..b9a6e8e01072 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -64,6 +64,7 @@ - `resourcedetectionprocessor`: Wire docker detector (#9372) - `kafkametricsreceiver`: The kafkametricsreceiver was changed to connect to kafka during scrape, rather than startup. If kafka is unavailable the receiver will attempt to connect during subsequent scrapes until succcessful (#8817). - `datadogexporter`: Update Kubernetes example manifest to new executable name. (#9425). +- `riakreceiver`: Fix issue where user configured metric settings were ignored. (#9561) - `sqlserverreceiver`: Update `sqlserver.transaction_log.growth.count` and `sqlserver.transaction_log.shrink.count` to be monotonic sums. (#9522) ## v0.49.0 diff --git a/receiver/riakreceiver/scraper.go b/receiver/riakreceiver/scraper.go index 2222857ddfd8..7e08eb5ea535 100644 --- a/receiver/riakreceiver/scraper.go +++ b/receiver/riakreceiver/scraper.go @@ -46,7 +46,7 @@ func newScraper(logger *zap.Logger, cfg *Config, settings component.TelemetrySet logger: logger, cfg: cfg, settings: settings, - mb: metadata.NewMetricsBuilder(metadata.DefaultMetricsSettings()), + mb: metadata.NewMetricsBuilder(cfg.Metrics), } } diff --git a/receiver/riakreceiver/scraper_test.go b/receiver/riakreceiver/scraper_test.go index ac2d51ffa0e4..a008dc6056e7 100644 --- a/receiver/riakreceiver/scraper_test.go +++ b/receiver/riakreceiver/scraper_test.go @@ -31,6 +31,7 @@ import ( "github.com/open-telemetry/opentelemetry-collector-contrib/internal/scrapertest" "github.com/open-telemetry/opentelemetry-collector-contrib/internal/scrapertest/golden" + "github.com/open-telemetry/opentelemetry-collector-contrib/receiver/riakreceiver/internal/metadata" "github.com/open-telemetry/opentelemetry-collector-contrib/receiver/riakreceiver/internal/mocks" "github.com/open-telemetry/opentelemetry-collector-contrib/receiver/riakreceiver/internal/model" ) @@ -58,6 +59,7 @@ func TestScraperStart(t *testing.T) { }, expectError: true, }, + { desc: "Valid Config", scraper: &riakScraper{ @@ -90,6 +92,7 @@ func TestScaperScrape(t *testing.T) { desc string setupMockClient func(t *testing.T) client expectedMetricGen func(t *testing.T) pmetric.Metrics + setupCfg func() *Config expectedErr error }{ { @@ -100,6 +103,9 @@ func TestScaperScrape(t *testing.T) { expectedMetricGen: func(t *testing.T) pmetric.Metrics { return pmetric.NewMetrics() }, + setupCfg: func() *Config { + return createDefaultConfig().(*Config) + }, expectedErr: errClientNotInit, }, { @@ -112,8 +118,56 @@ func TestScaperScrape(t *testing.T) { expectedMetricGen: func(t *testing.T) pmetric.Metrics { return pmetric.NewMetrics() }, + setupCfg: func() *Config { + return createDefaultConfig().(*Config) + }, expectedErr: errors.New("some api error"), }, + { + desc: "Metrics Disabled", + setupMockClient: func(t *testing.T) client { + mockClient := mocks.MockClient{} + // use helper function from client tests + data := loadAPIResponseData(t, statsAPIResponseFile) + var stats *model.Stats + err := json.Unmarshal(data, &stats) + require.NoError(t, err) + + mockClient.On("GetStats", mock.Anything).Return(stats, nil) + return &mockClient + }, + expectedMetricGen: func(t *testing.T) pmetric.Metrics { + goldenPath := filepath.Join("testdata", "scraper", "expected_disabled.json") + expectedMetrics, err := golden.ReadMetrics(goldenPath) + require.NoError(t, err) + return expectedMetrics + }, + setupCfg: func() *Config { + cfg := createDefaultConfig().(*Config) + cfg.Metrics = metadata.MetricsSettings{ + RiakMemoryLimit: metadata.MetricSettings{ + Enabled: false, + }, + RiakNodeOperationCount: metadata.MetricSettings{ + Enabled: false, + }, + RiakNodeOperationTimeMean: metadata.MetricSettings{ + Enabled: true, + }, + RiakNodeReadRepairCount: metadata.MetricSettings{ + Enabled: true, + }, + RiakVnodeIndexOperationCount: metadata.MetricSettings{ + Enabled: true, + }, + RiakVnodeOperationCount: metadata.MetricSettings{ + Enabled: true, + }, + } + return cfg + }, + expectedErr: nil, + }, { desc: "Successful Collection", setupMockClient: func(t *testing.T) client { @@ -133,16 +187,18 @@ func TestScaperScrape(t *testing.T) { require.NoError(t, err) return expectedMetrics }, + setupCfg: func() *Config { + return createDefaultConfig().(*Config) + }, expectedErr: nil, }, } for _, tc := range testCases { t.Run(tc.desc, func(t *testing.T) { - scraper := newScraper(zap.NewNop(), createDefaultConfig().(*Config), componenttest.NewNopTelemetrySettings()) + scraper := newScraper(zap.NewNop(), tc.setupCfg(), componenttest.NewNopTelemetrySettings()) scraper.client = tc.setupMockClient(t) actualMetrics, err := scraper.scrape(context.Background()) - if tc.expectedErr == nil { require.NoError(t, err) } else { diff --git a/receiver/riakreceiver/testdata/scraper/expected_disabled.json b/receiver/riakreceiver/testdata/scraper/expected_disabled.json new file mode 100644 index 000000000000..6c6ab6128116 --- /dev/null +++ b/receiver/riakreceiver/testdata/scraper/expected_disabled.json @@ -0,0 +1,162 @@ +{ + "resourceMetrics": [ + { + "instrumentationLibraryMetrics": [ + { + "instrumentationLibrary": { + "name": "otelcol/riakreceiver" + }, + "metrics": [ + { + "description": "The mean time between request and response for operations performed by the node over the last minute.", + "gauge": { + "dataPoints": [ + { + "asInt": "4", + "attributes": [ + { + "key": "request", + "value": { + "stringValue": "get" + } + } + ], + "startTimeUnixNano": "1648220661611816000", + "timeUnixNano": "1648220661612587000" + }, + { + "asInt": "5", + "attributes": [ + { + "key": "request", + "value": { + "stringValue": "put" + } + } + ], + "startTimeUnixNano": "1648220661611816000", + "timeUnixNano": "1648220661612587000" + } + ] + }, + "name": "riak.node.operation.time.mean", + "unit": "us" + }, + { + "description": "The number of read repairs performed by the node.", + "name": "riak.node.read_repair.count", + "sum": { + "aggregationTemporality": "AGGREGATION_TEMPORALITY_CUMULATIVE", + "dataPoints": [ + { + "asInt": "0", + "startTimeUnixNano": "1648220661611816000", + "timeUnixNano": "1648220661612587000" + } + ], + "isMonotonic": true + }, + "unit": "{read_repair}" + }, + { + "description": "The number of index operations performed by vnodes on the node.", + "name": "riak.vnode.index.operation.count", + "sum": { + "aggregationTemporality": "AGGREGATION_TEMPORALITY_CUMULATIVE", + "dataPoints": [ + { + "asInt": "10", + "attributes": [ + { + "key": "operation", + "value": { + "stringValue": "read" + } + } + ], + "startTimeUnixNano": "1648220661611816000", + "timeUnixNano": "1648220661612587000" + }, + { + "asInt": "11", + "attributes": [ + { + "key": "operation", + "value": { + "stringValue": "write" + } + } + ], + "startTimeUnixNano": "1648220661611816000", + "timeUnixNano": "1648220661612587000" + }, + { + "asInt": "9", + "attributes": [ + { + "key": "operation", + "value": { + "stringValue": "delete" + } + } + ], + "startTimeUnixNano": "1648220661611816000", + "timeUnixNano": "1648220661612587000" + } + ] + }, + "unit": "{operation}" + }, + { + "description": "The number of operations performed by vnodes on the node.", + "name": "riak.vnode.operation.count", + "sum": { + "aggregationTemporality": "AGGREGATION_TEMPORALITY_CUMULATIVE", + "dataPoints": [ + { + "asInt": "7", + "attributes": [ + { + "key": "request", + "value": { + "stringValue": "get" + } + } + ], + "startTimeUnixNano": "1648220661611816000", + "timeUnixNano": "1648220661612587000" + }, + { + "asInt": "8", + "attributes": [ + { + "key": "request", + "value": { + "stringValue": "put" + } + } + ], + "startTimeUnixNano": "1648220661611816000", + "timeUnixNano": "1648220661612587000" + } + ], + "isMonotonic": true + }, + "unit": "{operation}" + } + ] + } + ], + "resource": { + "attributes": [ + { + "key": "riak.node.name", + "value": { + "stringValue": "riak@127.0.0.1" + } + } + ] + } + } + ] + }