diff --git a/receiver/awscontainerinsightreceiver/config.go b/receiver/awscontainerinsightreceiver/config.go index f231745c9ad40..72b3ea0fc720c 100644 --- a/receiver/awscontainerinsightreceiver/config.go +++ b/receiver/awscontainerinsightreceiver/config.go @@ -74,6 +74,9 @@ type Config struct { // EnableAcceleratedComputeMetrics enables features with accelerated compute resources where metrics are scraped from vendor specific sources EnableAcceleratedComputeMetrics bool `mapstructure:"accelerated_compute_metrics"` + // AcceleratedComputeGPUMetricsCollectionInterval is the interval at which gpu metrics should be collected. The default is 60 second. + AcceleratedComputeGPUMetricsCollectionInterval time.Duration `mapstructure:"accelerated_compute_gpu_metrics_collection_interval"` + // KubeConfigPath is an optional attribute to override the default kube config path in an EC2 environment KubeConfigPath string `mapstructure:"kube_config_path"` diff --git a/receiver/awscontainerinsightreceiver/internal/gpu/dcgmscraper_config.go b/receiver/awscontainerinsightreceiver/internal/gpu/dcgmscraper_config.go index 30907d51a396e..ecf11df12ca3a 100644 --- a/receiver/awscontainerinsightreceiver/internal/gpu/dcgmscraper_config.go +++ b/receiver/awscontainerinsightreceiver/internal/gpu/dcgmscraper_config.go @@ -18,7 +18,6 @@ import ( const ( caFile = "/etc/amazon-cloudwatch-observability-agent-cert/tls-ca.crt" - collectionInterval = 60 * time.Second jobName = "containerInsightsDCGMExporterScraper" scraperMetricsPath = "/metrics" scraperK8sServiceSelector = "k8s-app=dcgm-exporter-service" @@ -30,7 +29,7 @@ type hostInfoProvider interface { GetInstanceType() string } -func GetScraperConfig(hostInfoProvider hostInfoProvider) *config.ScrapeConfig { +func GetScraperConfig(hostInfoProvider hostInfoProvider, collectionInterval time.Duration) *config.ScrapeConfig { return &config.ScrapeConfig{ HTTPClientConfig: configutil.HTTPClientConfig{ TLSConfig: configutil.TLSConfig{ diff --git a/receiver/awscontainerinsightreceiver/internal/gpu/dcgmscraper_test.go b/receiver/awscontainerinsightreceiver/internal/gpu/dcgmscraper_test.go index a992066dccf1d..ab5c7b8164f7f 100644 --- a/receiver/awscontainerinsightreceiver/internal/gpu/dcgmscraper_test.go +++ b/receiver/awscontainerinsightreceiver/internal/gpu/dcgmscraper_test.go @@ -7,6 +7,7 @@ import ( "context" "strings" "testing" + "time" configutil "github.com/prometheus/common/config" "github.com/prometheus/common/model" @@ -165,7 +166,7 @@ func TestNewDcgmScraperEndToEnd(t *testing.T) { Consumer: mConsumer, Host: componenttest.NewNopHost(), HostInfoProvider: mockHostInfoProvider{}, - ScraperConfigs: GetScraperConfig(mockHostInfoProvider{}), + ScraperConfigs: GetScraperConfig(mockHostInfoProvider{}, 30*time.Second), Logger: settings.Logger, }) assert.NoError(t, err) @@ -244,3 +245,13 @@ func TestDcgmScraperJobName(t *testing.T) { // needs to start with containerInsights assert.True(t, strings.HasPrefix(jobName, "containerInsightsDCGMExporterScraper")) } + +func TestGetScraperConfig(t *testing.T) { + hostInfoProvider := mockHostInfoProvider{} + customInterval := 30 * time.Second + config := GetScraperConfig(hostInfoProvider, customInterval) + + // Verify the custom collection interval is used + assert.Equal(t, model.Duration(customInterval), config.ScrapeInterval) + assert.Equal(t, model.Duration(customInterval), config.ScrapeTimeout) +} diff --git a/receiver/awscontainerinsightreceiver/receiver.go b/receiver/awscontainerinsightreceiver/receiver.go index 7b48c8b4bb63d..b1a6701633095 100644 --- a/receiver/awscontainerinsightreceiver/receiver.go +++ b/receiver/awscontainerinsightreceiver/receiver.go @@ -319,7 +319,7 @@ func (acir *awsContainerInsightReceiver) initDcgmScraper(ctx context.Context, ho TelemetrySettings: acir.settings, Consumer: &decoConsumer, Host: host, - ScraperConfigs: gpu.GetScraperConfig(hostInfo), + ScraperConfigs: gpu.GetScraperConfig(hostInfo, acir.config.AcceleratedComputeGPUMetricsCollectionInterval), HostInfoProvider: hostInfo, Logger: acir.settings.Logger, }