diff --git a/receiver/kubeletstatsreceiver/README.md b/receiver/kubeletstatsreceiver/README.md index 05888e4cefd86..638c3ebaf41b6 100644 --- a/receiver/kubeletstatsreceiver/README.md +++ b/receiver/kubeletstatsreceiver/README.md @@ -17,11 +17,6 @@ The Kubelet Stats Receiver pulls node, pod, container, and volume metrics from the API server on a kubelet and sends it down the metric pipeline for further processing. -> [!WARNING] -> The `receiver.kubeletstats.enableCPUUsageMetrics` feature gate was moved to stage `Stable`. -> Deprecated metrics cannot be used anymore. -> For more information which metrics are affected see [here](#metrics-deprecation). - ## Metrics Details about the metrics produced by this receiver can be found in [metadata.yaml](./metadata.yaml) with further documentation in [documentation.md](./documentation.md) @@ -332,24 +327,3 @@ rules: resources: ["nodes/proxy"] verbs: ["get"] ``` - -### Metrics deprecation - -The following metrics were deprecated and renamed from version `v0.125.0`: - -- `k8s.node.cpu.utilization` (renamed to `k8s.node.cpu.usage`) -- `k8s.pod.cpu.utilization` (renamed to `k8s.pod.cpu.usage`) -- `container.cpu.utilization` (renamed to `container.cpu.usage`) - -The above metrics show usage counted in CPUs and it's not a percentage of used resources. -These metrics were previously incorrectly named using the utilization term. - -#### `receiver.kubeletstats.enableCPUUsageMetrics` feature gate - -- alpha: when enabled it makes the `.cpu.usage` metrics enabled by default, disabling the `.cpu.utilization` metrics -- beta: `.cpu.usage` metrics are enabled by default and any configuration enabling the deprecated `.cpu.utilization` metrics will be failing. Explicitly disabling the feature gate provides the old (deprecated) behavior. -- stable: `.cpu.usage` metrics are enabled by default and the deprecated metrics are completely removed. -- removed three releases after stable. - -More information about the deprecation plan and -the background reasoning can be found at . diff --git a/receiver/kubeletstatsreceiver/documentation.md b/receiver/kubeletstatsreceiver/documentation.md index 6ba70ef464f24..964f27d2434e5 100644 --- a/receiver/kubeletstatsreceiver/documentation.md +++ b/receiver/kubeletstatsreceiver/documentation.md @@ -386,14 +386,6 @@ metrics: enabled: true ``` -### container.cpu.utilization - -Container CPU utilization - -| Unit | Metric Type | Value Type | -| ---- | ----------- | ---------- | -| 1 | Gauge | Double | - ### container.uptime The time since the container started @@ -450,14 +442,6 @@ Container memory utilization as a ratio of the container's requests | ---- | ----------- | ---------- | | 1 | Gauge | Double | -### k8s.node.cpu.utilization - -Node CPU utilization - -| Unit | Metric Type | Value Type | -| ---- | ----------- | ---------- | -| 1 | Gauge | Double | - ### k8s.node.uptime The time since the node started @@ -474,14 +458,6 @@ Pod cpu utilization as a ratio of the node's capacity | ---- | ----------- | ---------- | | 1 | Gauge | Double | -### k8s.pod.cpu.utilization - -Pod CPU utilization - -| Unit | Metric Type | Value Type | -| ---- | ----------- | ---------- | -| 1 | Gauge | Double | - ### k8s.pod.cpu_limit_utilization Pod cpu utilization as a ratio of the pod's total container limits. If any container is missing a limit the metric is not emitted. diff --git a/receiver/kubeletstatsreceiver/factory.go b/receiver/kubeletstatsreceiver/factory.go index 840fa3b23c62f..7f34947f953d5 100644 --- a/receiver/kubeletstatsreceiver/factory.go +++ b/receiver/kubeletstatsreceiver/factory.go @@ -9,7 +9,6 @@ import ( "go.opentelemetry.io/collector/component" "go.opentelemetry.io/collector/consumer" - "go.opentelemetry.io/collector/featuregate" "go.opentelemetry.io/collector/receiver" "go.opentelemetry.io/collector/scraper/scraperhelper" "go.uber.org/zap" @@ -21,17 +20,7 @@ import ( ) const ( - metricGroupsConfig = "metric_groups" - enableCPUUsageMetricsFeatureFlag = "receiver.kubeletstats.enableCPUUsageMetrics" -) - -var EnableCPUUsageMetrics = featuregate.GlobalRegistry().MustRegister( - enableCPUUsageMetricsFeatureFlag, - featuregate.StageStable, - featuregate.WithRegisterDescription("When enabled the container.cpu.utilization, k8s.pod.cpu.utilization and k8s.node.cpu.utilization metrics will be replaced by the container.cpu.usage, k8s.pod.cpu.usage and k8s.node.cpu.usage"), - featuregate.WithRegisterFromVersion("v0.110.0"), - featuregate.WithRegisterToVersion("v0.131.0"), - featuregate.WithRegisterReferenceURL("https://github.com/open-telemetry/opentelemetry-collector-contrib/issues/27885"), + metricGroupsConfig = "metric_groups" ) var defaultMetricGroups = []kubelet.MetricGroup{ diff --git a/receiver/kubeletstatsreceiver/go.mod b/receiver/kubeletstatsreceiver/go.mod index 7870fefb2ce17..1a6f201c2e883 100644 --- a/receiver/kubeletstatsreceiver/go.mod +++ b/receiver/kubeletstatsreceiver/go.mod @@ -20,7 +20,6 @@ require ( go.opentelemetry.io/collector/confmap/xconfmap v0.135.1-0.20250911155607-37a3ace6274c go.opentelemetry.io/collector/consumer v1.41.1-0.20250911155607-37a3ace6274c go.opentelemetry.io/collector/consumer/consumertest v0.135.1-0.20250911155607-37a3ace6274c - go.opentelemetry.io/collector/featuregate v1.41.1-0.20250911155607-37a3ace6274c go.opentelemetry.io/collector/filter v0.135.1-0.20250911155607-37a3ace6274c go.opentelemetry.io/collector/pdata v1.41.1-0.20250911155607-37a3ace6274c go.opentelemetry.io/collector/pipeline v1.41.1-0.20250911155607-37a3ace6274c @@ -110,6 +109,7 @@ require ( go.opentelemetry.io/collector/consumer/xconsumer v0.135.1-0.20250911155607-37a3ace6274c // indirect go.opentelemetry.io/collector/extension/extensionauth v1.41.1-0.20250911155607-37a3ace6274c // indirect go.opentelemetry.io/collector/extension/extensionmiddleware v0.135.1-0.20250911155607-37a3ace6274c // indirect + go.opentelemetry.io/collector/featuregate v1.41.1-0.20250911155607-37a3ace6274c // indirect go.opentelemetry.io/collector/internal/sharedcomponent v0.135.1-0.20250911155607-37a3ace6274c // indirect go.opentelemetry.io/collector/internal/telemetry v0.135.1-0.20250911155607-37a3ace6274c // indirect go.opentelemetry.io/collector/pdata/pprofile v0.135.1-0.20250911155607-37a3ace6274c // indirect diff --git a/receiver/kubeletstatsreceiver/internal/kubelet/cpu.go b/receiver/kubeletstatsreceiver/internal/kubelet/cpu.go index 731be163ade3a..d131da7718172 100644 --- a/receiver/kubeletstatsreceiver/internal/kubelet/cpu.go +++ b/receiver/kubeletstatsreceiver/internal/kubelet/cpu.go @@ -37,8 +37,6 @@ func addCPUUtilizationMetrics( r resources, nodeCPULimit float64, ) { - cpuMetrics.Utilization(mb, currentTime, usageCores) - if nodeCPULimit > 0 { cpuMetrics.NodeUtilization(mb, currentTime, usageCores/nodeCPULimit) } diff --git a/receiver/kubeletstatsreceiver/internal/metadata/generated_config.go b/receiver/kubeletstatsreceiver/internal/metadata/generated_config.go index a159024688ea8..637a5746f4e49 100644 --- a/receiver/kubeletstatsreceiver/internal/metadata/generated_config.go +++ b/receiver/kubeletstatsreceiver/internal/metadata/generated_config.go @@ -30,7 +30,6 @@ func (ms *MetricConfig) Unmarshal(parser *confmap.Conf) error { type MetricsConfig struct { ContainerCPUTime MetricConfig `mapstructure:"container.cpu.time"` ContainerCPUUsage MetricConfig `mapstructure:"container.cpu.usage"` - ContainerCPUUtilization MetricConfig `mapstructure:"container.cpu.utilization"` ContainerFilesystemAvailable MetricConfig `mapstructure:"container.filesystem.available"` ContainerFilesystemCapacity MetricConfig `mapstructure:"container.filesystem.capacity"` ContainerFilesystemUsage MetricConfig `mapstructure:"container.filesystem.usage"` @@ -49,7 +48,6 @@ type MetricsConfig struct { K8sContainerMemoryRequestUtilization MetricConfig `mapstructure:"k8s.container.memory_request_utilization"` K8sNodeCPUTime MetricConfig `mapstructure:"k8s.node.cpu.time"` K8sNodeCPUUsage MetricConfig `mapstructure:"k8s.node.cpu.usage"` - K8sNodeCPUUtilization MetricConfig `mapstructure:"k8s.node.cpu.utilization"` K8sNodeFilesystemAvailable MetricConfig `mapstructure:"k8s.node.filesystem.available"` K8sNodeFilesystemCapacity MetricConfig `mapstructure:"k8s.node.filesystem.capacity"` K8sNodeFilesystemUsage MetricConfig `mapstructure:"k8s.node.filesystem.usage"` @@ -65,7 +63,6 @@ type MetricsConfig struct { K8sPodCPUNodeUtilization MetricConfig `mapstructure:"k8s.pod.cpu.node.utilization"` K8sPodCPUTime MetricConfig `mapstructure:"k8s.pod.cpu.time"` K8sPodCPUUsage MetricConfig `mapstructure:"k8s.pod.cpu.usage"` - K8sPodCPUUtilization MetricConfig `mapstructure:"k8s.pod.cpu.utilization"` K8sPodCPULimitUtilization MetricConfig `mapstructure:"k8s.pod.cpu_limit_utilization"` K8sPodCPURequestUtilization MetricConfig `mapstructure:"k8s.pod.cpu_request_utilization"` K8sPodFilesystemAvailable MetricConfig `mapstructure:"k8s.pod.filesystem.available"` @@ -99,9 +96,6 @@ func DefaultMetricsConfig() MetricsConfig { ContainerCPUUsage: MetricConfig{ Enabled: true, }, - ContainerCPUUtilization: MetricConfig{ - Enabled: false, - }, ContainerFilesystemAvailable: MetricConfig{ Enabled: true, }, @@ -156,9 +150,6 @@ func DefaultMetricsConfig() MetricsConfig { K8sNodeCPUUsage: MetricConfig{ Enabled: true, }, - K8sNodeCPUUtilization: MetricConfig{ - Enabled: false, - }, K8sNodeFilesystemAvailable: MetricConfig{ Enabled: true, }, @@ -204,9 +195,6 @@ func DefaultMetricsConfig() MetricsConfig { K8sPodCPUUsage: MetricConfig{ Enabled: true, }, - K8sPodCPUUtilization: MetricConfig{ - Enabled: false, - }, K8sPodCPULimitUtilization: MetricConfig{ Enabled: false, }, diff --git a/receiver/kubeletstatsreceiver/internal/metadata/generated_config_test.go b/receiver/kubeletstatsreceiver/internal/metadata/generated_config_test.go index b0e3b772c0cb2..e02063fb071fc 100644 --- a/receiver/kubeletstatsreceiver/internal/metadata/generated_config_test.go +++ b/receiver/kubeletstatsreceiver/internal/metadata/generated_config_test.go @@ -29,7 +29,6 @@ func TestMetricsBuilderConfig(t *testing.T) { Metrics: MetricsConfig{ ContainerCPUTime: MetricConfig{Enabled: true}, ContainerCPUUsage: MetricConfig{Enabled: true}, - ContainerCPUUtilization: MetricConfig{Enabled: true}, ContainerFilesystemAvailable: MetricConfig{Enabled: true}, ContainerFilesystemCapacity: MetricConfig{Enabled: true}, ContainerFilesystemUsage: MetricConfig{Enabled: true}, @@ -48,7 +47,6 @@ func TestMetricsBuilderConfig(t *testing.T) { K8sContainerMemoryRequestUtilization: MetricConfig{Enabled: true}, K8sNodeCPUTime: MetricConfig{Enabled: true}, K8sNodeCPUUsage: MetricConfig{Enabled: true}, - K8sNodeCPUUtilization: MetricConfig{Enabled: true}, K8sNodeFilesystemAvailable: MetricConfig{Enabled: true}, K8sNodeFilesystemCapacity: MetricConfig{Enabled: true}, K8sNodeFilesystemUsage: MetricConfig{Enabled: true}, @@ -64,7 +62,6 @@ func TestMetricsBuilderConfig(t *testing.T) { K8sPodCPUNodeUtilization: MetricConfig{Enabled: true}, K8sPodCPUTime: MetricConfig{Enabled: true}, K8sPodCPUUsage: MetricConfig{Enabled: true}, - K8sPodCPUUtilization: MetricConfig{Enabled: true}, K8sPodCPULimitUtilization: MetricConfig{Enabled: true}, K8sPodCPURequestUtilization: MetricConfig{Enabled: true}, K8sPodFilesystemAvailable: MetricConfig{Enabled: true}, @@ -114,7 +111,6 @@ func TestMetricsBuilderConfig(t *testing.T) { Metrics: MetricsConfig{ ContainerCPUTime: MetricConfig{Enabled: false}, ContainerCPUUsage: MetricConfig{Enabled: false}, - ContainerCPUUtilization: MetricConfig{Enabled: false}, ContainerFilesystemAvailable: MetricConfig{Enabled: false}, ContainerFilesystemCapacity: MetricConfig{Enabled: false}, ContainerFilesystemUsage: MetricConfig{Enabled: false}, @@ -133,7 +129,6 @@ func TestMetricsBuilderConfig(t *testing.T) { K8sContainerMemoryRequestUtilization: MetricConfig{Enabled: false}, K8sNodeCPUTime: MetricConfig{Enabled: false}, K8sNodeCPUUsage: MetricConfig{Enabled: false}, - K8sNodeCPUUtilization: MetricConfig{Enabled: false}, K8sNodeFilesystemAvailable: MetricConfig{Enabled: false}, K8sNodeFilesystemCapacity: MetricConfig{Enabled: false}, K8sNodeFilesystemUsage: MetricConfig{Enabled: false}, @@ -149,7 +144,6 @@ func TestMetricsBuilderConfig(t *testing.T) { K8sPodCPUNodeUtilization: MetricConfig{Enabled: false}, K8sPodCPUTime: MetricConfig{Enabled: false}, K8sPodCPUUsage: MetricConfig{Enabled: false}, - K8sPodCPUUtilization: MetricConfig{Enabled: false}, K8sPodCPULimitUtilization: MetricConfig{Enabled: false}, K8sPodCPURequestUtilization: MetricConfig{Enabled: false}, K8sPodFilesystemAvailable: MetricConfig{Enabled: false}, diff --git a/receiver/kubeletstatsreceiver/internal/metadata/generated_metrics.go b/receiver/kubeletstatsreceiver/internal/metadata/generated_metrics.go index 27289949dcf4e..4de2b5a2f46a5 100644 --- a/receiver/kubeletstatsreceiver/internal/metadata/generated_metrics.go +++ b/receiver/kubeletstatsreceiver/internal/metadata/generated_metrics.go @@ -45,9 +45,6 @@ var MetricsInfo = metricsInfo{ ContainerCPUUsage: metricInfo{ Name: "container.cpu.usage", }, - ContainerCPUUtilization: metricInfo{ - Name: "container.cpu.utilization", - }, ContainerFilesystemAvailable: metricInfo{ Name: "container.filesystem.available", }, @@ -102,9 +99,6 @@ var MetricsInfo = metricsInfo{ K8sNodeCPUUsage: metricInfo{ Name: "k8s.node.cpu.usage", }, - K8sNodeCPUUtilization: metricInfo{ - Name: "k8s.node.cpu.utilization", - }, K8sNodeFilesystemAvailable: metricInfo{ Name: "k8s.node.filesystem.available", }, @@ -150,9 +144,6 @@ var MetricsInfo = metricsInfo{ K8sPodCPUUsage: metricInfo{ Name: "k8s.pod.cpu.usage", }, - K8sPodCPUUtilization: metricInfo{ - Name: "k8s.pod.cpu.utilization", - }, K8sPodCPULimitUtilization: metricInfo{ Name: "k8s.pod.cpu_limit_utilization", }, @@ -227,7 +218,6 @@ var MetricsInfo = metricsInfo{ type metricsInfo struct { ContainerCPUTime metricInfo ContainerCPUUsage metricInfo - ContainerCPUUtilization metricInfo ContainerFilesystemAvailable metricInfo ContainerFilesystemCapacity metricInfo ContainerFilesystemUsage metricInfo @@ -246,7 +236,6 @@ type metricsInfo struct { K8sContainerMemoryRequestUtilization metricInfo K8sNodeCPUTime metricInfo K8sNodeCPUUsage metricInfo - K8sNodeCPUUtilization metricInfo K8sNodeFilesystemAvailable metricInfo K8sNodeFilesystemCapacity metricInfo K8sNodeFilesystemUsage metricInfo @@ -262,7 +251,6 @@ type metricsInfo struct { K8sPodCPUNodeUtilization metricInfo K8sPodCPUTime metricInfo K8sPodCPUUsage metricInfo - K8sPodCPUUtilization metricInfo K8sPodCPULimitUtilization metricInfo K8sPodCPURequestUtilization metricInfo K8sPodFilesystemAvailable metricInfo @@ -392,55 +380,6 @@ func newMetricContainerCPUUsage(cfg MetricConfig) metricContainerCPUUsage { return m } -type metricContainerCPUUtilization struct { - data pmetric.Metric // data buffer for generated metric. - config MetricConfig // metric config provided by user. - capacity int // max observed number of data points added to the metric. -} - -// init fills container.cpu.utilization metric with initial data. -func (m *metricContainerCPUUtilization) init() { - m.data.SetName("container.cpu.utilization") - m.data.SetDescription("Container CPU utilization") - m.data.SetUnit("1") - m.data.SetEmptyGauge() -} - -func (m *metricContainerCPUUtilization) recordDataPoint(start pcommon.Timestamp, ts pcommon.Timestamp, val float64) { - if !m.config.Enabled { - return - } - dp := m.data.Gauge().DataPoints().AppendEmpty() - dp.SetStartTimestamp(start) - dp.SetTimestamp(ts) - dp.SetDoubleValue(val) -} - -// updateCapacity saves max length of data point slices that will be used for the slice capacity. -func (m *metricContainerCPUUtilization) updateCapacity() { - if m.data.Gauge().DataPoints().Len() > m.capacity { - m.capacity = m.data.Gauge().DataPoints().Len() - } -} - -// emit appends recorded metric data to a metrics slice and prepares it for recording another set of data points. -func (m *metricContainerCPUUtilization) emit(metrics pmetric.MetricSlice) { - if m.config.Enabled && m.data.Gauge().DataPoints().Len() > 0 { - m.updateCapacity() - m.data.MoveTo(metrics.AppendEmpty()) - m.init() - } -} - -func newMetricContainerCPUUtilization(cfg MetricConfig) metricContainerCPUUtilization { - m := metricContainerCPUUtilization{config: cfg} - if cfg.Enabled { - m.data = pmetric.NewMetric() - m.init() - } - return m -} - type metricContainerFilesystemAvailable struct { data pmetric.Metric // data buffer for generated metric. config MetricConfig // metric config provided by user. @@ -1327,55 +1266,6 @@ func newMetricK8sNodeCPUUsage(cfg MetricConfig) metricK8sNodeCPUUsage { return m } -type metricK8sNodeCPUUtilization struct { - data pmetric.Metric // data buffer for generated metric. - config MetricConfig // metric config provided by user. - capacity int // max observed number of data points added to the metric. -} - -// init fills k8s.node.cpu.utilization metric with initial data. -func (m *metricK8sNodeCPUUtilization) init() { - m.data.SetName("k8s.node.cpu.utilization") - m.data.SetDescription("Node CPU utilization") - m.data.SetUnit("1") - m.data.SetEmptyGauge() -} - -func (m *metricK8sNodeCPUUtilization) recordDataPoint(start pcommon.Timestamp, ts pcommon.Timestamp, val float64) { - if !m.config.Enabled { - return - } - dp := m.data.Gauge().DataPoints().AppendEmpty() - dp.SetStartTimestamp(start) - dp.SetTimestamp(ts) - dp.SetDoubleValue(val) -} - -// updateCapacity saves max length of data point slices that will be used for the slice capacity. -func (m *metricK8sNodeCPUUtilization) updateCapacity() { - if m.data.Gauge().DataPoints().Len() > m.capacity { - m.capacity = m.data.Gauge().DataPoints().Len() - } -} - -// emit appends recorded metric data to a metrics slice and prepares it for recording another set of data points. -func (m *metricK8sNodeCPUUtilization) emit(metrics pmetric.MetricSlice) { - if m.config.Enabled && m.data.Gauge().DataPoints().Len() > 0 { - m.updateCapacity() - m.data.MoveTo(metrics.AppendEmpty()) - m.init() - } -} - -func newMetricK8sNodeCPUUtilization(cfg MetricConfig) metricK8sNodeCPUUtilization { - m := metricK8sNodeCPUUtilization{config: cfg} - if cfg.Enabled { - m.data = pmetric.NewMetric() - m.init() - } - return m -} - type metricK8sNodeFilesystemAvailable struct { data pmetric.Metric // data buffer for generated metric. config MetricConfig // metric config provided by user. @@ -2125,55 +2015,6 @@ func newMetricK8sPodCPUUsage(cfg MetricConfig) metricK8sPodCPUUsage { return m } -type metricK8sPodCPUUtilization struct { - data pmetric.Metric // data buffer for generated metric. - config MetricConfig // metric config provided by user. - capacity int // max observed number of data points added to the metric. -} - -// init fills k8s.pod.cpu.utilization metric with initial data. -func (m *metricK8sPodCPUUtilization) init() { - m.data.SetName("k8s.pod.cpu.utilization") - m.data.SetDescription("Pod CPU utilization") - m.data.SetUnit("1") - m.data.SetEmptyGauge() -} - -func (m *metricK8sPodCPUUtilization) recordDataPoint(start pcommon.Timestamp, ts pcommon.Timestamp, val float64) { - if !m.config.Enabled { - return - } - dp := m.data.Gauge().DataPoints().AppendEmpty() - dp.SetStartTimestamp(start) - dp.SetTimestamp(ts) - dp.SetDoubleValue(val) -} - -// updateCapacity saves max length of data point slices that will be used for the slice capacity. -func (m *metricK8sPodCPUUtilization) updateCapacity() { - if m.data.Gauge().DataPoints().Len() > m.capacity { - m.capacity = m.data.Gauge().DataPoints().Len() - } -} - -// emit appends recorded metric data to a metrics slice and prepares it for recording another set of data points. -func (m *metricK8sPodCPUUtilization) emit(metrics pmetric.MetricSlice) { - if m.config.Enabled && m.data.Gauge().DataPoints().Len() > 0 { - m.updateCapacity() - m.data.MoveTo(metrics.AppendEmpty()) - m.init() - } -} - -func newMetricK8sPodCPUUtilization(cfg MetricConfig) metricK8sPodCPUUtilization { - m := metricK8sPodCPUUtilization{config: cfg} - if cfg.Enabled { - m.data = pmetric.NewMetric() - m.init() - } - return m -} - type metricK8sPodCPULimitUtilization struct { data pmetric.Metric // data buffer for generated metric. config MetricConfig // metric config provided by user. @@ -3327,7 +3168,6 @@ type MetricsBuilder struct { resourceAttributeExcludeFilter map[string]filter.Filter metricContainerCPUTime metricContainerCPUTime metricContainerCPUUsage metricContainerCPUUsage - metricContainerCPUUtilization metricContainerCPUUtilization metricContainerFilesystemAvailable metricContainerFilesystemAvailable metricContainerFilesystemCapacity metricContainerFilesystemCapacity metricContainerFilesystemUsage metricContainerFilesystemUsage @@ -3346,7 +3186,6 @@ type MetricsBuilder struct { metricK8sContainerMemoryRequestUtilization metricK8sContainerMemoryRequestUtilization metricK8sNodeCPUTime metricK8sNodeCPUTime metricK8sNodeCPUUsage metricK8sNodeCPUUsage - metricK8sNodeCPUUtilization metricK8sNodeCPUUtilization metricK8sNodeFilesystemAvailable metricK8sNodeFilesystemAvailable metricK8sNodeFilesystemCapacity metricK8sNodeFilesystemCapacity metricK8sNodeFilesystemUsage metricK8sNodeFilesystemUsage @@ -3362,7 +3201,6 @@ type MetricsBuilder struct { metricK8sPodCPUNodeUtilization metricK8sPodCPUNodeUtilization metricK8sPodCPUTime metricK8sPodCPUTime metricK8sPodCPUUsage metricK8sPodCPUUsage - metricK8sPodCPUUtilization metricK8sPodCPUUtilization metricK8sPodCPULimitUtilization metricK8sPodCPULimitUtilization metricK8sPodCPURequestUtilization metricK8sPodCPURequestUtilization metricK8sPodFilesystemAvailable metricK8sPodFilesystemAvailable @@ -3413,7 +3251,6 @@ func NewMetricsBuilder(mbc MetricsBuilderConfig, settings receiver.Settings, opt buildInfo: settings.BuildInfo, metricContainerCPUTime: newMetricContainerCPUTime(mbc.Metrics.ContainerCPUTime), metricContainerCPUUsage: newMetricContainerCPUUsage(mbc.Metrics.ContainerCPUUsage), - metricContainerCPUUtilization: newMetricContainerCPUUtilization(mbc.Metrics.ContainerCPUUtilization), metricContainerFilesystemAvailable: newMetricContainerFilesystemAvailable(mbc.Metrics.ContainerFilesystemAvailable), metricContainerFilesystemCapacity: newMetricContainerFilesystemCapacity(mbc.Metrics.ContainerFilesystemCapacity), metricContainerFilesystemUsage: newMetricContainerFilesystemUsage(mbc.Metrics.ContainerFilesystemUsage), @@ -3432,7 +3269,6 @@ func NewMetricsBuilder(mbc MetricsBuilderConfig, settings receiver.Settings, opt metricK8sContainerMemoryRequestUtilization: newMetricK8sContainerMemoryRequestUtilization(mbc.Metrics.K8sContainerMemoryRequestUtilization), metricK8sNodeCPUTime: newMetricK8sNodeCPUTime(mbc.Metrics.K8sNodeCPUTime), metricK8sNodeCPUUsage: newMetricK8sNodeCPUUsage(mbc.Metrics.K8sNodeCPUUsage), - metricK8sNodeCPUUtilization: newMetricK8sNodeCPUUtilization(mbc.Metrics.K8sNodeCPUUtilization), metricK8sNodeFilesystemAvailable: newMetricK8sNodeFilesystemAvailable(mbc.Metrics.K8sNodeFilesystemAvailable), metricK8sNodeFilesystemCapacity: newMetricK8sNodeFilesystemCapacity(mbc.Metrics.K8sNodeFilesystemCapacity), metricK8sNodeFilesystemUsage: newMetricK8sNodeFilesystemUsage(mbc.Metrics.K8sNodeFilesystemUsage), @@ -3448,7 +3284,6 @@ func NewMetricsBuilder(mbc MetricsBuilderConfig, settings receiver.Settings, opt metricK8sPodCPUNodeUtilization: newMetricK8sPodCPUNodeUtilization(mbc.Metrics.K8sPodCPUNodeUtilization), metricK8sPodCPUTime: newMetricK8sPodCPUTime(mbc.Metrics.K8sPodCPUTime), metricK8sPodCPUUsage: newMetricK8sPodCPUUsage(mbc.Metrics.K8sPodCPUUsage), - metricK8sPodCPUUtilization: newMetricK8sPodCPUUtilization(mbc.Metrics.K8sPodCPUUtilization), metricK8sPodCPULimitUtilization: newMetricK8sPodCPULimitUtilization(mbc.Metrics.K8sPodCPULimitUtilization), metricK8sPodCPURequestUtilization: newMetricK8sPodCPURequestUtilization(mbc.Metrics.K8sPodCPURequestUtilization), metricK8sPodFilesystemAvailable: newMetricK8sPodFilesystemAvailable(mbc.Metrics.K8sPodFilesystemAvailable), @@ -3636,7 +3471,6 @@ func (mb *MetricsBuilder) EmitForResource(options ...ResourceMetricsOption) { ils.Metrics().EnsureCapacity(mb.metricsCapacity) mb.metricContainerCPUTime.emit(ils.Metrics()) mb.metricContainerCPUUsage.emit(ils.Metrics()) - mb.metricContainerCPUUtilization.emit(ils.Metrics()) mb.metricContainerFilesystemAvailable.emit(ils.Metrics()) mb.metricContainerFilesystemCapacity.emit(ils.Metrics()) mb.metricContainerFilesystemUsage.emit(ils.Metrics()) @@ -3655,7 +3489,6 @@ func (mb *MetricsBuilder) EmitForResource(options ...ResourceMetricsOption) { mb.metricK8sContainerMemoryRequestUtilization.emit(ils.Metrics()) mb.metricK8sNodeCPUTime.emit(ils.Metrics()) mb.metricK8sNodeCPUUsage.emit(ils.Metrics()) - mb.metricK8sNodeCPUUtilization.emit(ils.Metrics()) mb.metricK8sNodeFilesystemAvailable.emit(ils.Metrics()) mb.metricK8sNodeFilesystemCapacity.emit(ils.Metrics()) mb.metricK8sNodeFilesystemUsage.emit(ils.Metrics()) @@ -3671,7 +3504,6 @@ func (mb *MetricsBuilder) EmitForResource(options ...ResourceMetricsOption) { mb.metricK8sPodCPUNodeUtilization.emit(ils.Metrics()) mb.metricK8sPodCPUTime.emit(ils.Metrics()) mb.metricK8sPodCPUUsage.emit(ils.Metrics()) - mb.metricK8sPodCPUUtilization.emit(ils.Metrics()) mb.metricK8sPodCPULimitUtilization.emit(ils.Metrics()) mb.metricK8sPodCPURequestUtilization.emit(ils.Metrics()) mb.metricK8sPodFilesystemAvailable.emit(ils.Metrics()) @@ -3736,11 +3568,6 @@ func (mb *MetricsBuilder) RecordContainerCPUUsageDataPoint(ts pcommon.Timestamp, mb.metricContainerCPUUsage.recordDataPoint(mb.startTime, ts, val) } -// RecordContainerCPUUtilizationDataPoint adds a data point to container.cpu.utilization metric. -func (mb *MetricsBuilder) RecordContainerCPUUtilizationDataPoint(ts pcommon.Timestamp, val float64) { - mb.metricContainerCPUUtilization.recordDataPoint(mb.startTime, ts, val) -} - // RecordContainerFilesystemAvailableDataPoint adds a data point to container.filesystem.available metric. func (mb *MetricsBuilder) RecordContainerFilesystemAvailableDataPoint(ts pcommon.Timestamp, val int64) { mb.metricContainerFilesystemAvailable.recordDataPoint(mb.startTime, ts, val) @@ -3831,11 +3658,6 @@ func (mb *MetricsBuilder) RecordK8sNodeCPUUsageDataPoint(ts pcommon.Timestamp, v mb.metricK8sNodeCPUUsage.recordDataPoint(mb.startTime, ts, val) } -// RecordK8sNodeCPUUtilizationDataPoint adds a data point to k8s.node.cpu.utilization metric. -func (mb *MetricsBuilder) RecordK8sNodeCPUUtilizationDataPoint(ts pcommon.Timestamp, val float64) { - mb.metricK8sNodeCPUUtilization.recordDataPoint(mb.startTime, ts, val) -} - // RecordK8sNodeFilesystemAvailableDataPoint adds a data point to k8s.node.filesystem.available metric. func (mb *MetricsBuilder) RecordK8sNodeFilesystemAvailableDataPoint(ts pcommon.Timestamp, val int64) { mb.metricK8sNodeFilesystemAvailable.recordDataPoint(mb.startTime, ts, val) @@ -3911,11 +3733,6 @@ func (mb *MetricsBuilder) RecordK8sPodCPUUsageDataPoint(ts pcommon.Timestamp, va mb.metricK8sPodCPUUsage.recordDataPoint(mb.startTime, ts, val) } -// RecordK8sPodCPUUtilizationDataPoint adds a data point to k8s.pod.cpu.utilization metric. -func (mb *MetricsBuilder) RecordK8sPodCPUUtilizationDataPoint(ts pcommon.Timestamp, val float64) { - mb.metricK8sPodCPUUtilization.recordDataPoint(mb.startTime, ts, val) -} - // RecordK8sPodCPULimitUtilizationDataPoint adds a data point to k8s.pod.cpu_limit_utilization metric. func (mb *MetricsBuilder) RecordK8sPodCPULimitUtilizationDataPoint(ts pcommon.Timestamp, val float64) { mb.metricK8sPodCPULimitUtilization.recordDataPoint(mb.startTime, ts, val) diff --git a/receiver/kubeletstatsreceiver/internal/metadata/generated_metrics_test.go b/receiver/kubeletstatsreceiver/internal/metadata/generated_metrics_test.go index b8dfab64b19ad..2629188d1083a 100644 --- a/receiver/kubeletstatsreceiver/internal/metadata/generated_metrics_test.go +++ b/receiver/kubeletstatsreceiver/internal/metadata/generated_metrics_test.go @@ -76,9 +76,6 @@ func TestMetricsBuilder(t *testing.T) { allMetricsCount++ mb.RecordContainerCPUUsageDataPoint(ts, 1) - allMetricsCount++ - mb.RecordContainerCPUUtilizationDataPoint(ts, 1) - defaultMetricsCount++ allMetricsCount++ mb.RecordContainerFilesystemAvailableDataPoint(ts, 1) @@ -144,9 +141,6 @@ func TestMetricsBuilder(t *testing.T) { allMetricsCount++ mb.RecordK8sNodeCPUUsageDataPoint(ts, 1) - allMetricsCount++ - mb.RecordK8sNodeCPUUtilizationDataPoint(ts, 1) - defaultMetricsCount++ allMetricsCount++ mb.RecordK8sNodeFilesystemAvailableDataPoint(ts, 1) @@ -205,9 +199,6 @@ func TestMetricsBuilder(t *testing.T) { allMetricsCount++ mb.RecordK8sPodCPUUsageDataPoint(ts, 1) - allMetricsCount++ - mb.RecordK8sPodCPUUtilizationDataPoint(ts, 1) - allMetricsCount++ mb.RecordK8sPodCPULimitUtilizationDataPoint(ts, 1) @@ -357,18 +348,6 @@ func TestMetricsBuilder(t *testing.T) { assert.Equal(t, ts, dp.Timestamp()) assert.Equal(t, pmetric.NumberDataPointValueTypeDouble, dp.ValueType()) assert.InDelta(t, float64(1), dp.DoubleValue(), 0.01) - case "container.cpu.utilization": - assert.False(t, validatedMetrics["container.cpu.utilization"], "Found a duplicate in the metrics slice: container.cpu.utilization") - validatedMetrics["container.cpu.utilization"] = true - assert.Equal(t, pmetric.MetricTypeGauge, ms.At(i).Type()) - assert.Equal(t, 1, ms.At(i).Gauge().DataPoints().Len()) - assert.Equal(t, "Container CPU utilization", ms.At(i).Description()) - assert.Equal(t, "1", ms.At(i).Unit()) - dp := ms.At(i).Gauge().DataPoints().At(0) - assert.Equal(t, start, dp.StartTimestamp()) - assert.Equal(t, ts, dp.Timestamp()) - assert.Equal(t, pmetric.NumberDataPointValueTypeDouble, dp.ValueType()) - assert.InDelta(t, float64(1), dp.DoubleValue(), 0.01) case "container.filesystem.available": assert.False(t, validatedMetrics["container.filesystem.available"], "Found a duplicate in the metrics slice: container.filesystem.available") validatedMetrics["container.filesystem.available"] = true @@ -589,18 +568,6 @@ func TestMetricsBuilder(t *testing.T) { assert.Equal(t, ts, dp.Timestamp()) assert.Equal(t, pmetric.NumberDataPointValueTypeDouble, dp.ValueType()) assert.InDelta(t, float64(1), dp.DoubleValue(), 0.01) - case "k8s.node.cpu.utilization": - assert.False(t, validatedMetrics["k8s.node.cpu.utilization"], "Found a duplicate in the metrics slice: k8s.node.cpu.utilization") - validatedMetrics["k8s.node.cpu.utilization"] = true - assert.Equal(t, pmetric.MetricTypeGauge, ms.At(i).Type()) - assert.Equal(t, 1, ms.At(i).Gauge().DataPoints().Len()) - assert.Equal(t, "Node CPU utilization", ms.At(i).Description()) - assert.Equal(t, "1", ms.At(i).Unit()) - dp := ms.At(i).Gauge().DataPoints().At(0) - assert.Equal(t, start, dp.StartTimestamp()) - assert.Equal(t, ts, dp.Timestamp()) - assert.Equal(t, pmetric.NumberDataPointValueTypeDouble, dp.ValueType()) - assert.InDelta(t, float64(1), dp.DoubleValue(), 0.01) case "k8s.node.filesystem.available": assert.False(t, validatedMetrics["k8s.node.filesystem.available"], "Found a duplicate in the metrics slice: k8s.node.filesystem.available") validatedMetrics["k8s.node.filesystem.available"] = true @@ -801,18 +768,6 @@ func TestMetricsBuilder(t *testing.T) { assert.Equal(t, ts, dp.Timestamp()) assert.Equal(t, pmetric.NumberDataPointValueTypeDouble, dp.ValueType()) assert.InDelta(t, float64(1), dp.DoubleValue(), 0.01) - case "k8s.pod.cpu.utilization": - assert.False(t, validatedMetrics["k8s.pod.cpu.utilization"], "Found a duplicate in the metrics slice: k8s.pod.cpu.utilization") - validatedMetrics["k8s.pod.cpu.utilization"] = true - assert.Equal(t, pmetric.MetricTypeGauge, ms.At(i).Type()) - assert.Equal(t, 1, ms.At(i).Gauge().DataPoints().Len()) - assert.Equal(t, "Pod CPU utilization", ms.At(i).Description()) - assert.Equal(t, "1", ms.At(i).Unit()) - dp := ms.At(i).Gauge().DataPoints().At(0) - assert.Equal(t, start, dp.StartTimestamp()) - assert.Equal(t, ts, dp.Timestamp()) - assert.Equal(t, pmetric.NumberDataPointValueTypeDouble, dp.ValueType()) - assert.InDelta(t, float64(1), dp.DoubleValue(), 0.01) case "k8s.pod.cpu_limit_utilization": assert.False(t, validatedMetrics["k8s.pod.cpu_limit_utilization"], "Found a duplicate in the metrics slice: k8s.pod.cpu_limit_utilization") validatedMetrics["k8s.pod.cpu_limit_utilization"] = true diff --git a/receiver/kubeletstatsreceiver/internal/metadata/metrics.go b/receiver/kubeletstatsreceiver/internal/metadata/metrics.go index 913c8f0f059dc..691edf2746488 100644 --- a/receiver/kubeletstatsreceiver/internal/metadata/metrics.go +++ b/receiver/kubeletstatsreceiver/internal/metadata/metrics.go @@ -21,22 +21,19 @@ type MetricsBuilders struct { type CPUMetrics struct { Time RecordDoubleDataPointFunc Usage RecordDoubleDataPointFunc - Utilization RecordDoubleDataPointFunc NodeUtilization RecordDoubleDataPointFunc LimitUtilization RecordDoubleDataPointFunc RequestUtilization RecordDoubleDataPointFunc } var NodeCPUMetrics = CPUMetrics{ - Time: (*MetricsBuilder).RecordK8sNodeCPUTimeDataPoint, - Usage: (*MetricsBuilder).RecordK8sNodeCPUUsageDataPoint, - Utilization: (*MetricsBuilder).RecordK8sNodeCPUUtilizationDataPoint, + Time: (*MetricsBuilder).RecordK8sNodeCPUTimeDataPoint, + Usage: (*MetricsBuilder).RecordK8sNodeCPUUsageDataPoint, } var PodCPUMetrics = CPUMetrics{ Time: (*MetricsBuilder).RecordK8sPodCPUTimeDataPoint, Usage: (*MetricsBuilder).RecordK8sPodCPUUsageDataPoint, - Utilization: (*MetricsBuilder).RecordK8sPodCPUUtilizationDataPoint, NodeUtilization: (*MetricsBuilder).RecordK8sPodCPUNodeUtilizationDataPoint, LimitUtilization: (*MetricsBuilder).RecordK8sPodCPULimitUtilizationDataPoint, RequestUtilization: (*MetricsBuilder).RecordK8sPodCPURequestUtilizationDataPoint, @@ -45,7 +42,6 @@ var PodCPUMetrics = CPUMetrics{ var ContainerCPUMetrics = CPUMetrics{ Time: (*MetricsBuilder).RecordContainerCPUTimeDataPoint, Usage: (*MetricsBuilder).RecordContainerCPUUsageDataPoint, - Utilization: (*MetricsBuilder).RecordContainerCPUUtilizationDataPoint, NodeUtilization: (*MetricsBuilder).RecordK8sContainerCPUNodeUtilizationDataPoint, LimitUtilization: (*MetricsBuilder).RecordK8sContainerCPULimitUtilizationDataPoint, RequestUtilization: (*MetricsBuilder).RecordK8sContainerCPURequestUtilizationDataPoint, diff --git a/receiver/kubeletstatsreceiver/internal/metadata/testdata/config.yaml b/receiver/kubeletstatsreceiver/internal/metadata/testdata/config.yaml index 06ed39f575dfc..d43052cd4e630 100644 --- a/receiver/kubeletstatsreceiver/internal/metadata/testdata/config.yaml +++ b/receiver/kubeletstatsreceiver/internal/metadata/testdata/config.yaml @@ -5,8 +5,6 @@ all_set: enabled: true container.cpu.usage: enabled: true - container.cpu.utilization: - enabled: true container.filesystem.available: enabled: true container.filesystem.capacity: @@ -43,8 +41,6 @@ all_set: enabled: true k8s.node.cpu.usage: enabled: true - k8s.node.cpu.utilization: - enabled: true k8s.node.filesystem.available: enabled: true k8s.node.filesystem.capacity: @@ -75,8 +71,6 @@ all_set: enabled: true k8s.pod.cpu.usage: enabled: true - k8s.pod.cpu.utilization: - enabled: true k8s.pod.cpu_limit_utilization: enabled: true k8s.pod.cpu_request_utilization: @@ -160,8 +154,6 @@ none_set: enabled: false container.cpu.usage: enabled: false - container.cpu.utilization: - enabled: false container.filesystem.available: enabled: false container.filesystem.capacity: @@ -198,8 +190,6 @@ none_set: enabled: false k8s.node.cpu.usage: enabled: false - k8s.node.cpu.utilization: - enabled: false k8s.node.filesystem.available: enabled: false k8s.node.filesystem.capacity: @@ -230,8 +220,6 @@ none_set: enabled: false k8s.pod.cpu.usage: enabled: false - k8s.pod.cpu.utilization: - enabled: false k8s.pod.cpu_limit_utilization: enabled: false k8s.pod.cpu_request_utilization: diff --git a/receiver/kubeletstatsreceiver/metadata.yaml b/receiver/kubeletstatsreceiver/metadata.yaml index 66b895f93e363..6114288abf397 100644 --- a/receiver/kubeletstatsreceiver/metadata.yaml +++ b/receiver/kubeletstatsreceiver/metadata.yaml @@ -88,13 +88,6 @@ metrics: gauge: value_type: double attributes: [] - k8s.node.cpu.utilization: - enabled: false - description: "Node CPU utilization" - unit: "1" - gauge: - value_type: double - attributes: [] k8s.node.cpu.time: enabled: true description: "Total cumulative CPU time (sum of all cores) spent by the container/pod/node since its creation" @@ -201,13 +194,6 @@ metrics: gauge: value_type: double attributes: [ ] - k8s.pod.cpu.utilization: - enabled: false - description: "Pod CPU utilization" - unit: "1" - gauge: - value_type: double - attributes: [ ] k8s.pod.cpu.time: enabled: true description: "Total cumulative CPU time (sum of all cores) spent by the container/pod/node since its creation" @@ -356,13 +342,6 @@ metrics: gauge: value_type: double attributes: [ ] - container.cpu.utilization: - enabled: false - description: "Container CPU utilization" - unit: "1" - gauge: - value_type: double - attributes: [ ] container.cpu.time: enabled: true description: "Total cumulative CPU time (sum of all cores) spent by the container/pod/node since its creation" diff --git a/receiver/kubeletstatsreceiver/scraper.go b/receiver/kubeletstatsreceiver/scraper.go index eee8cea4de3ff..8b41812bbf75f 100644 --- a/receiver/kubeletstatsreceiver/scraper.go +++ b/receiver/kubeletstatsreceiver/scraper.go @@ -5,7 +5,6 @@ package kubeletstatsreceiver // import "github.com/open-telemetry/opentelemetry- import ( "context" - "errors" "fmt" "sync" "time" @@ -60,22 +59,6 @@ func newKubeletScraper( metricsConfig metadata.MetricsBuilderConfig, nodeName string, ) (scraper.Metrics, error) { - if EnableCPUUsageMetrics.IsEnabled() { - if metricsConfig.Metrics.ContainerCPUUtilization.Enabled || - metricsConfig.Metrics.K8sPodCPUUtilization.Enabled || - metricsConfig.Metrics.K8sNodeCPUUtilization.Enabled { - return nil, errors.New("container.cpu.utilization, k8s.pod.cpu.utilization and k8s.node.cpu.utilization metrics cannot be enabled when receiver.kubeletstats.enableCPUUsageMetrics feature gate is enabled") - } - } else { - set.Logger.Warn("The default metric container.cpu.utilization is being replaced by the container.cpu.usage metric. Switch now by enabling the receiver.kubeletstats.enableCPUUsageMetrics feature gate.") - set.Logger.Warn("The default metric k8s.pod.cpu.utilization is being replaced by the k8s.pod.cpu.usage metric. Switch now by enabling the receiver.kubeletstats.enableCPUUsageMetrics feature gate.") - set.Logger.Warn("The default metric k8s.node.cpu.utilization is being replaced by the k8s.node.cpu.usage metric. Switch now by enabling the receiver.kubeletstats.enableCPUUsageMetrics feature gate.") - - metricsConfig.Metrics.ContainerCPUUtilization.Enabled = true - metricsConfig.Metrics.K8sPodCPUUtilization.Enabled = true - metricsConfig.Metrics.K8sNodeCPUUtilization.Enabled = true - } - ks := &kubeletScraper{ statsProvider: kubelet.NewStatsProvider(restClient), metadataProvider: kubelet.NewMetadataProvider(restClient), diff --git a/receiver/kubeletstatsreceiver/scraper_test.go b/receiver/kubeletstatsreceiver/scraper_test.go index 188d77c14140c..fb7c5181cc6a9 100644 --- a/receiver/kubeletstatsreceiver/scraper_test.go +++ b/receiver/kubeletstatsreceiver/scraper_test.go @@ -354,9 +354,6 @@ func TestScraperWithPercentMetrics(t *testing.T) { ContainerCPUTime: metadata.MetricConfig{ Enabled: false, }, - ContainerCPUUtilization: metadata.MetricConfig{ - Enabled: false, - }, ContainerFilesystemAvailable: metadata.MetricConfig{ Enabled: false, }, @@ -399,9 +396,6 @@ func TestScraperWithPercentMetrics(t *testing.T) { K8sNodeCPUTime: metadata.MetricConfig{ Enabled: false, }, - K8sNodeCPUUtilization: metadata.MetricConfig{ - Enabled: false, - }, K8sNodeFilesystemAvailable: metadata.MetricConfig{ Enabled: false, }, @@ -438,9 +432,6 @@ func TestScraperWithPercentMetrics(t *testing.T) { K8sPodCPUTime: metadata.MetricConfig{ Enabled: false, }, - K8sPodCPUUtilization: metadata.MetricConfig{ - Enabled: false, - }, K8sPodFilesystemAvailable: metadata.MetricConfig{ Enabled: false, },