Skip to content

Commit 55a5d80

Browse files
committed
added ListMetricDescriptors CRI api implementation
Signed-off-by: Akhil Mohan <[email protected]>
1 parent 5a79f89 commit 55a5d80

File tree

1 file changed

+333
-3
lines changed

1 file changed

+333
-3
lines changed

internal/cri/server/list_metric_descriptors.go

Lines changed: 333 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,11 +19,341 @@ package server
1919
import (
2020
"context"
2121

22-
"google.golang.org/grpc/codes"
23-
"google.golang.org/grpc/status"
2422
runtime "k8s.io/cri-api/pkg/apis/runtime/v1"
2523
)
2624

25+
const (
26+
CpuUsageMetrics = "cpu"
27+
MemoryUsageMetrics = "memory"
28+
CpuLoadMetrics = "cpuLoad"
29+
DiskIOMetrics = "diskIO"
30+
DiskUsageMetrics = "disk"
31+
NetworkUsageMetrics = "network"
32+
ProcessMetrics = "process"
33+
OOMMetrics = "oom_event"
34+
)
35+
36+
var baseLabelKeys = []string{"id", "name"}
37+
2738
func (c *criService) ListMetricDescriptors(context.Context, *runtime.ListMetricDescriptorsRequest) (*runtime.ListMetricDescriptorsResponse, error) {
28-
return nil, status.Errorf(codes.Unimplemented, "method ListMetricDescriptors not implemented")
39+
descriptors := c.getMetricDescriptors()
40+
41+
metricDescriptors := make([]*runtime.MetricDescriptor, 0)
42+
for _, descriptor := range descriptors {
43+
metricDescriptors = append(metricDescriptors, descriptor...)
44+
}
45+
46+
return &runtime.ListMetricDescriptorsResponse{Descriptors: metricDescriptors}, nil
47+
48+
}
49+
func (c *criService) getMetricDescriptors() map[string][]*runtime.MetricDescriptor {
50+
descriptors := map[string][]*runtime.MetricDescriptor{
51+
CpuUsageMetrics: {
52+
{
53+
Name: "container_cpu_user_seconds_total",
54+
Help: "Cumulative user CPU time consumed in seconds.",
55+
LabelKeys: baseLabelKeys,
56+
}, {
57+
Name: "container_cpu_system_seconds_total",
58+
Help: "Cumulative system CPU time consumed in seconds.",
59+
LabelKeys: baseLabelKeys,
60+
}, {
61+
Name: "container_cpu_usage_seconds_total",
62+
Help: "Cumulative CPU time consumed in seconds.",
63+
LabelKeys: baseLabelKeys,
64+
}, {
65+
Name: "container_cpu_cfs_periods_total",
66+
Help: "Number of elapsed enforcement period intervals.",
67+
LabelKeys: baseLabelKeys,
68+
}, {
69+
Name: "container_cpu_cfs_throttled_periods_total",
70+
Help: "Number of throttled period intervals.",
71+
LabelKeys: baseLabelKeys,
72+
}, {
73+
Name: "container_cpu_cfs_throttled_seconds_total",
74+
Help: "Total time duration the container has been throttled.",
75+
LabelKeys: baseLabelKeys,
76+
},
77+
},
78+
CpuLoadMetrics: {
79+
{
80+
Name: "container_cpu_load_average_10s",
81+
Help: "Value of container CPU load average over the last 10 seconds.",
82+
LabelKeys: baseLabelKeys,
83+
},
84+
{
85+
// additional added from cadvisor
86+
Name: "container_cpu_load_d_average_10s",
87+
Help: "Value of container cpu load.d average over the last 10 seconds.",
88+
LabelKeys: baseLabelKeys,
89+
},
90+
{
91+
Name: "container_tasks_state",
92+
Help: "Number of tasks in given state",
93+
LabelKeys: baseLabelKeys,
94+
},
95+
},
96+
DiskUsageMetrics: {
97+
{
98+
Name: "container_fs_inodes_free",
99+
Help: "Number of available Inodes",
100+
LabelKeys: append(baseLabelKeys, "device"),
101+
}, {
102+
Name: "container_fs_inodes_total",
103+
Help: "Number of Inodes",
104+
LabelKeys: append(baseLabelKeys, "device"),
105+
}, {
106+
Name: "container_fs_limit_bytes",
107+
Help: "Number of bytes that can be consumed by the container on this filesystem.",
108+
LabelKeys: append(baseLabelKeys, "device"),
109+
}, {
110+
Name: "container_fs_usage_bytes",
111+
Help: "Number of bytes that are consumed by the container on this filesystem.",
112+
LabelKeys: append(baseLabelKeys, "device"),
113+
},
114+
},
115+
DiskIOMetrics: {
116+
{
117+
Name: "container_fs_reads_bytes_total",
118+
Help: "Cumulative count of bytes read",
119+
LabelKeys: append(baseLabelKeys, "device"),
120+
},
121+
{
122+
Name: "container_fs_reads_total",
123+
Help: "Cumulative count of reads completed",
124+
LabelKeys: append(baseLabelKeys, "device"),
125+
},
126+
{
127+
Name: "container_fs_sector_reads_total",
128+
Help: "Cumulative count of sector reads completed",
129+
LabelKeys: append(baseLabelKeys, "device"),
130+
},
131+
{
132+
Name: "container_fs_reads_merged_total",
133+
Help: "Cumulative count of reads merged",
134+
LabelKeys: append(baseLabelKeys, "device"),
135+
},
136+
{
137+
Name: "container_fs_read_seconds_total",
138+
Help: "Cumulative count of seconds spent reading",
139+
LabelKeys: append(baseLabelKeys, "device"),
140+
},
141+
{
142+
Name: "container_fs_writes_bytes_total",
143+
Help: "Cumulative count of bytes written",
144+
LabelKeys: append(baseLabelKeys, "device"),
145+
},
146+
{
147+
Name: "container_fs_writes_total",
148+
Help: "Cumulative count of writes completed",
149+
LabelKeys: append(baseLabelKeys, "device"),
150+
},
151+
{
152+
Name: "container_fs_sector_writes_total",
153+
Help: "Cumulative count of sector writes completed",
154+
LabelKeys: append(baseLabelKeys, "device"),
155+
},
156+
{
157+
Name: "container_fs_writes_merged_total",
158+
Help: "Cumulative count of writes merged",
159+
LabelKeys: append(baseLabelKeys, "device"),
160+
},
161+
{
162+
Name: "container_fs_write_seconds_total",
163+
Help: "Cumulative count of seconds spent writing",
164+
LabelKeys: append(baseLabelKeys, "device"),
165+
},
166+
{
167+
Name: "container_fs_io_current",
168+
Help: "Number of I/Os currently in progress",
169+
LabelKeys: append(baseLabelKeys, "device"),
170+
},
171+
{
172+
Name: "container_fs_io_time_seconds_total",
173+
Help: "Cumulative count of seconds spent doing I/Os",
174+
LabelKeys: append(baseLabelKeys, "device"),
175+
},
176+
{
177+
Name: "container_fs_io_time_weighted_seconds_total",
178+
Help: "Cumulative weighted I/O time in seconds",
179+
LabelKeys: append(baseLabelKeys, "device"),
180+
},
181+
{
182+
Name: "container_blkio_device_usage_total",
183+
Help: "Blkio device bytes usage",
184+
LabelKeys: append(baseLabelKeys, "device", "major", "minor", "operation"),
185+
},
186+
},
187+
MemoryUsageMetrics: {
188+
{
189+
Name: "container_memory_cache",
190+
Help: "Number of bytes of page cache memory.",
191+
LabelKeys: baseLabelKeys,
192+
},
193+
{
194+
Name: "container_memory_rss",
195+
Help: "Size of RSS in bytes.",
196+
LabelKeys: baseLabelKeys,
197+
},
198+
{
199+
Name: "container_memory_kernel_usage",
200+
Help: "Size of kernel memory allocated in bytes.",
201+
LabelKeys: baseLabelKeys,
202+
},
203+
{
204+
Name: "container_memory_mapped_file",
205+
Help: "Size of memory mapped files in bytes.",
206+
LabelKeys: baseLabelKeys,
207+
},
208+
{
209+
Name: "container_memory_swap",
210+
Help: "Container swap usage in bytes.",
211+
LabelKeys: baseLabelKeys,
212+
},
213+
{
214+
Name: "container_memory_failcnt",
215+
Help: "Number of memory usage hits limits",
216+
LabelKeys: baseLabelKeys,
217+
},
218+
{
219+
Name: "container_memory_usage_bytes",
220+
Help: "Current memory usage in bytes, including all memory regardless of when it was accessed",
221+
LabelKeys: baseLabelKeys,
222+
},
223+
{
224+
Name: "container_memory_max_usage_bytes",
225+
Help: "Maximum memory usage recorded in bytes",
226+
LabelKeys: baseLabelKeys,
227+
},
228+
{
229+
Name: "container_memory_working_set_bytes",
230+
Help: "Current working set in bytes.",
231+
LabelKeys: baseLabelKeys,
232+
},
233+
{
234+
// additional added from cadvisor
235+
Name: "container_memory_total_active_file_bytes",
236+
Help: "Current total active file in bytes.",
237+
LabelKeys: baseLabelKeys,
238+
},
239+
{
240+
// additional added from cadvisor
241+
Name: "container_memory_total_inactive_file_bytes",
242+
Help: "Current total inactive file in bytes.",
243+
LabelKeys: baseLabelKeys,
244+
},
245+
{
246+
Name: "container_memory_failures_total",
247+
Help: "Cumulative count of memory allocation failures.",
248+
LabelKeys: append(baseLabelKeys, "failure_type", "scope"),
249+
},
250+
},
251+
// Added for parity with cadvisor
252+
"misc": {
253+
{
254+
Name: "container_scrape_error",
255+
Help: "1 if there was an error while getting container metrics, 0 otherwise",
256+
LabelKeys: baseLabelKeys,
257+
}, {
258+
Name: "container_last_seen",
259+
Help: "Last time a container was seen by the exporter",
260+
LabelKeys: baseLabelKeys,
261+
}, {
262+
Name: "cadvisor_version_info",
263+
Help: "A metric with a constant '1' value labeled by kernel version, OS version, docker version, cadvisor version & cadvisor revision.",
264+
LabelKeys: []string{"kernelVersion", "osVersion", "dockerVersion", "cadvisorVersion", "cadvisorRevision"},
265+
}, {
266+
Name: "container_start_time_seconds",
267+
Help: "Start time of the container since unix epoch in seconds.",
268+
LabelKeys: baseLabelKeys,
269+
}, {
270+
Name: "container_spec_cpu_period",
271+
Help: "CPU period of the container.",
272+
LabelKeys: baseLabelKeys,
273+
}, {
274+
Name: "container_spec_cpu_quota",
275+
Help: "CPU quota of the container.",
276+
LabelKeys: baseLabelKeys,
277+
}, {
278+
Name: "container_spec_cpu_shares",
279+
Help: "CPU share of the container.",
280+
LabelKeys: baseLabelKeys,
281+
},
282+
},
283+
NetworkUsageMetrics: {
284+
{
285+
Name: "container_network_receive_bytes_total",
286+
Help: "Cumulative count of bytes received",
287+
LabelKeys: append(baseLabelKeys, "interface"),
288+
}, {
289+
Name: "container_network_receive_packets_total",
290+
Help: "Cumulative count of packets received",
291+
LabelKeys: append(baseLabelKeys, "interface"),
292+
}, {
293+
Name: "container_network_receive_packets_dropped_total",
294+
Help: "Cumulative count of packets dropped while receiving",
295+
LabelKeys: append(baseLabelKeys, "interface"),
296+
}, {
297+
Name: "container_network_receive_errors_total",
298+
Help: "Cumulative count of errors encountered while receiving",
299+
LabelKeys: append(baseLabelKeys, "interface"),
300+
}, {
301+
Name: "container_network_transmit_bytes_total",
302+
Help: "Cumulative count of bytes transmitted",
303+
LabelKeys: append(baseLabelKeys, "interface"),
304+
}, {
305+
Name: "container_network_transmit_packets_total",
306+
Help: "Cumulative count of packets transmitted",
307+
LabelKeys: append(baseLabelKeys, "interface"),
308+
}, {
309+
Name: "container_network_transmit_packets_dropped_total",
310+
Help: "Cumulative count of packets dropped while transmitting",
311+
LabelKeys: append(baseLabelKeys, "interface"),
312+
}, {
313+
Name: "container_network_transmit_errors_total",
314+
Help: "Cumulative count of errors encountered while transmitting",
315+
LabelKeys: append(baseLabelKeys, "interface"),
316+
},
317+
},
318+
OOMMetrics: {
319+
{
320+
Name: "container_oom_events_total",
321+
Help: "Count of out of memory events observed for the container",
322+
LabelKeys: baseLabelKeys,
323+
},
324+
},
325+
ProcessMetrics: {
326+
{
327+
Name: "container_processes",
328+
Help: "Number of processes running inside the container.",
329+
LabelKeys: baseLabelKeys,
330+
},
331+
{
332+
Name: "container_file_descriptors",
333+
Help: "Number of open file descriptors for the container.",
334+
LabelKeys: baseLabelKeys,
335+
},
336+
{
337+
Name: "container_sockets",
338+
Help: "Number of open sockets for the container.",
339+
LabelKeys: baseLabelKeys,
340+
},
341+
{
342+
Name: "container_threads_max",
343+
Help: "Maximum number of threads allowed inside the container, infinity if value is zero",
344+
LabelKeys: baseLabelKeys,
345+
},
346+
{
347+
Name: "container_threads",
348+
Help: "Number of threads running inside the container",
349+
LabelKeys: baseLabelKeys,
350+
},
351+
{
352+
Name: "container_ulimits_soft",
353+
Help: "Soft ulimit values for the container root process. Unlimited if -1, except priority and nice",
354+
LabelKeys: append(baseLabelKeys, "ulimit"),
355+
},
356+
},
357+
}
358+
return descriptors
29359
}

0 commit comments

Comments
 (0)