@@ -24,6 +24,77 @@ import (
24
24
stats "k8s.io/kubernetes/pkg/kubelet/apis/stats/v1alpha1"
25
25
)
26
26
27
+ // This file contains a series of deprecated metrics which we emit them by endpoint `/metrics/resource/v1alpha1`.
28
+ // These metrics have been adapted to new endpoint `/metrics/resource` as well as new `Desc`s.
29
+ // In general, we don't need to maintain these deprecated metrics any more.
30
+ // TODO(RainbowMango): Remove this file in release 1.20.0+.
31
+
32
+ var (
33
+ nodeCPUUsageDesc = metrics .NewDesc ("node_cpu_usage_seconds_total" ,
34
+ "Cumulative cpu time consumed by the node in core-seconds" ,
35
+ nil ,
36
+ nil ,
37
+ metrics .ALPHA ,
38
+ "1.18.0" )
39
+
40
+ nodeMemoryUsageDesc = metrics .NewDesc ("node_memory_working_set_bytes" ,
41
+ "Current working set of the node in bytes" ,
42
+ nil ,
43
+ nil ,
44
+ metrics .ALPHA ,
45
+ "1.18.0" )
46
+
47
+ containerCPUUsageDesc = metrics .NewDesc ("container_cpu_usage_seconds_total" ,
48
+ "Cumulative cpu time consumed by the container in core-seconds" ,
49
+ []string {"container" , "pod" , "namespace" },
50
+ nil ,
51
+ metrics .ALPHA ,
52
+ "1.18.0" )
53
+
54
+ containerMemoryUsageDesc = metrics .NewDesc ("container_memory_working_set_bytes" ,
55
+ "Current working set of the container in bytes" ,
56
+ []string {"container" , "pod" , "namespace" },
57
+ nil ,
58
+ metrics .ALPHA ,
59
+ "1.18.0" )
60
+ )
61
+
62
+ // getNodeCPUMetrics returns CPU utilization of a node.
63
+ func getNodeCPUMetrics (s stats.NodeStats ) (* float64 , time.Time ) {
64
+ if s .CPU == nil {
65
+ return nil , time.Time {}
66
+ }
67
+ v := float64 (* s .CPU .UsageCoreNanoSeconds ) / float64 (time .Second )
68
+ return & v , s .CPU .Time .Time
69
+ }
70
+
71
+ // getNodeMemoryMetrics returns memory utilization of a node.
72
+ func getNodeMemoryMetrics (s stats.NodeStats ) (* float64 , time.Time ) {
73
+ if s .Memory == nil {
74
+ return nil , time.Time {}
75
+ }
76
+ v := float64 (* s .Memory .WorkingSetBytes )
77
+ return & v , s .Memory .Time .Time
78
+ }
79
+
80
+ // getContainerCPUMetrics returns CPU utilization of a container.
81
+ func getContainerCPUMetrics (s stats.ContainerStats ) (* float64 , time.Time ) {
82
+ if s .CPU == nil {
83
+ return nil , time.Time {}
84
+ }
85
+ v := float64 (* s .CPU .UsageCoreNanoSeconds ) / float64 (time .Second )
86
+ return & v , s .CPU .Time .Time
87
+ }
88
+
89
+ // getContainerMemoryMetrics returns memory utilization of a container.
90
+ func getContainerMemoryMetrics (s stats.ContainerStats ) (* float64 , time.Time ) {
91
+ if s .Memory == nil {
92
+ return nil , time.Time {}
93
+ }
94
+ v := float64 (* s .Memory .WorkingSetBytes )
95
+ return & v , s .Memory .Time .Time
96
+ }
97
+
27
98
// NodeResourceMetric describes a metric for the node
28
99
type NodeResourceMetric struct {
29
100
Desc * metrics.Desc
@@ -50,6 +121,32 @@ type ResourceMetricsConfig struct {
50
121
ContainerMetrics []ContainerResourceMetric
51
122
}
52
123
124
+ // Config is the v1alpha1 resource metrics definition
125
+ func Config () ResourceMetricsConfig {
126
+ return ResourceMetricsConfig {
127
+ NodeMetrics : []NodeResourceMetric {
128
+ {
129
+ Desc : nodeCPUUsageDesc ,
130
+ ValueFn : getNodeCPUMetrics ,
131
+ },
132
+ {
133
+ Desc : nodeMemoryUsageDesc ,
134
+ ValueFn : getNodeMemoryMetrics ,
135
+ },
136
+ },
137
+ ContainerMetrics : []ContainerResourceMetric {
138
+ {
139
+ Desc : containerCPUUsageDesc ,
140
+ ValueFn : getContainerCPUMetrics ,
141
+ },
142
+ {
143
+ Desc : containerMemoryUsageDesc ,
144
+ ValueFn : getContainerMemoryMetrics ,
145
+ },
146
+ },
147
+ }
148
+ }
149
+
53
150
// NewPrometheusResourceMetricCollector returns a metrics.StableCollector which exports resource metrics
54
151
func NewPrometheusResourceMetricCollector (provider SummaryProvider , config ResourceMetricsConfig ) metrics.StableCollector {
55
152
return & resourceMetricCollector {
0 commit comments