fluent-plugin-k8s-metrics-agg 1.1.8 → 1.1.9
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile.lock +7 -7
- data/VERSION +1 -1
- data/docker/Gemfile.lock +1 -1
- data/lib/fluent/plugin/in_kubernetes_metrics_aggregator.rb +78 -45
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 276b6cf483191eac629b4d605d22296689f26e03d7fd02bf0ba3366b91804242
|
4
|
+
data.tar.gz: e36406b6036c87edac3fa5cf12884a7837e68bf1e04043d42689e18c8e347880
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2144bb3bcc031291595986318217b8c52567106290893f7b47bef16df9e10a8a9bd09242791092cfbc3313f610f406de3c65af38b0e7ac295fc3db52d6c077bd
|
7
|
+
data.tar.gz: bde4c5f3b7a86257460773d6dc61b7013c8cdadf7626f9e8269c109d62dbb3f4f52050dec3af61bb04f54923938847bf402cfa93fb8844e80016755bd8bc2ef8
|
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
fluent-plugin-k8s-metrics-agg (1.1.
|
4
|
+
fluent-plugin-k8s-metrics-agg (1.1.9)
|
5
5
|
fluentd (>= 1.9.1)
|
6
6
|
kubeclient (~> 4.6.0)
|
7
7
|
multi_json (~> 1.14.1)
|
@@ -23,10 +23,10 @@ GEM
|
|
23
23
|
ffi-compiler (1.0.1)
|
24
24
|
ffi (>= 1.0.0)
|
25
25
|
rake
|
26
|
-
fluentd (1.14.
|
26
|
+
fluentd (1.14.4)
|
27
27
|
bundler
|
28
28
|
cool.io (>= 1.4.5, < 2.0.0)
|
29
|
-
http_parser.rb (>= 0.5.1, < 0.
|
29
|
+
http_parser.rb (>= 0.5.1, < 0.9.0)
|
30
30
|
msgpack (>= 1.3.1, < 2.0.0)
|
31
31
|
serverengine (>= 2.2.2, < 3.0.0)
|
32
32
|
sigdump (~> 0.2.2)
|
@@ -47,15 +47,15 @@ GEM
|
|
47
47
|
http-form_data (2.3.0)
|
48
48
|
http-parser (1.2.3)
|
49
49
|
ffi-compiler (>= 1.0, < 2.0)
|
50
|
-
http_parser.rb (0.
|
50
|
+
http_parser.rb (0.8.0)
|
51
51
|
json (2.6.1)
|
52
52
|
kubeclient (4.6.0)
|
53
53
|
http (>= 3.0, < 5.0)
|
54
54
|
recursive-open-struct (~> 1.0, >= 1.0.4)
|
55
55
|
rest-client (~> 2.0)
|
56
|
-
mime-types (3.
|
56
|
+
mime-types (3.4.1)
|
57
57
|
mime-types-data (~> 3.2015)
|
58
|
-
mime-types-data (3.
|
58
|
+
mime-types-data (3.2022.0105)
|
59
59
|
msgpack (1.4.2)
|
60
60
|
multi_json (1.14.1)
|
61
61
|
netrc (0.11.0)
|
@@ -107,4 +107,4 @@ DEPENDENCIES
|
|
107
107
|
webmock (~> 3.5.1)
|
108
108
|
|
109
109
|
BUNDLED WITH
|
110
|
-
2.
|
110
|
+
2.3.5
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.1.
|
1
|
+
1.1.9
|
data/docker/Gemfile.lock
CHANGED
@@ -70,7 +70,7 @@ module Fluent
|
|
70
70
|
# 1 K = 1000 bytes = 1000/1024 Ki = 1000/1024*1024 Mi
|
71
71
|
def get_memory_mult(memory)
|
72
72
|
memory_mult = if memory[-2..] == 'Ki'
|
73
|
-
1.0/1024
|
73
|
+
1.0 / 1024
|
74
74
|
elsif memory[-1] == 'K'
|
75
75
|
1e3 / 1024 ** 2
|
76
76
|
elsif memory[-2..] == 'Mi'
|
@@ -94,7 +94,7 @@ module Fluent
|
|
94
94
|
elsif memory[-2] == 'E'
|
95
95
|
1e18 / 1024 ** 2
|
96
96
|
else
|
97
|
-
1 / 1024 ** 2
|
97
|
+
1.0 / 1024 ** 2
|
98
98
|
end
|
99
99
|
memory_mult
|
100
100
|
end
|
@@ -292,7 +292,7 @@ module Fluent
|
|
292
292
|
|
293
293
|
def get_memory_mult(memory)
|
294
294
|
memory_mult = if memory[-2..] == 'Ki'
|
295
|
-
1.0/1024
|
295
|
+
1.0 / 1024
|
296
296
|
elsif memory[-1] == 'K'
|
297
297
|
1e3 / 1024 ** 2
|
298
298
|
elsif memory[-2..] == 'Mi'
|
@@ -316,7 +316,7 @@ module Fluent
|
|
316
316
|
elsif memory[-2] == 'E'
|
317
317
|
1e18 / 1024 ** 2
|
318
318
|
else
|
319
|
-
1 / 1024 ** 2
|
319
|
+
1.0 / 1024 ** 2
|
320
320
|
end
|
321
321
|
memory_mult
|
322
322
|
end
|
@@ -428,7 +428,7 @@ module Fluent
|
|
428
428
|
end
|
429
429
|
end
|
430
430
|
container_usage_metrics.add_usage_metrics(cpu_limit, cpu_request, memory_limit, memory_request)
|
431
|
-
container_labels = { 'name' => container_json['name'], 'image' => container_json['image'], 'node' => pod_json['spec']['nodeName'] }
|
431
|
+
container_labels = { 'pod-name' => pod_json['metadata']['name'], 'namespace' => pod_json['metadata']['namespace'], 'name' => container_json['name'], 'image' => container_json['image'], 'node' => pod_json['spec']['nodeName'] }
|
432
432
|
emit_limits_requests_metrics(generate_tag('container'), @scraped_at, container_labels, container_usage_metrics)
|
433
433
|
pod_usage_metrics.add_usage_metrics(cpu_limit, cpu_request, memory_limit, memory_request)
|
434
434
|
end
|
@@ -495,46 +495,53 @@ module Fluent
|
|
495
495
|
end
|
496
496
|
|
497
497
|
def process_node_response(response)
|
498
|
-
|
499
|
-
|
500
|
-
|
501
|
-
|
502
|
-
|
503
|
-
|
504
|
-
|
505
|
-
|
506
|
-
|
507
|
-
|
508
|
-
|
509
|
-
|
510
|
-
|
511
|
-
|
512
|
-
|
513
|
-
|
498
|
+
@mutex_node_req_lim.synchronize do
|
499
|
+
Array(response['items']).each do |node_json|
|
500
|
+
node_name = node_json['metadata']['name']
|
501
|
+
node_cpu_capacity = get_cpu_value(node_json['status']['capacity']['cpu'])
|
502
|
+
router.emit generate_tag('node') << ('.cpu.capacity'), Fluent::EventTime.from_time(@scraped_node_at), 'node' => node_name, 'value' => node_cpu_capacity
|
503
|
+
node_cpu_allocatable = get_cpu_value(node_json['status']['allocatable']['cpu'])
|
504
|
+
router.emit generate_tag('node') << ('.cpu.allocatable'), Fluent::EventTime.from_time(@scraped_node_at), 'node' => node_name, 'value' => node_cpu_allocatable
|
505
|
+
node_memory_capacity = get_memory_value(node_json['status']['capacity']['memory'])
|
506
|
+
router.emit generate_tag('node') << ('.memory.capacity'), Fluent::EventTime.from_time(@scraped_node_at), 'node' => node_name, 'value' => node_memory_capacity
|
507
|
+
node_memory_allocatable = get_memory_value(node_json['status']['allocatable']['memory'])
|
508
|
+
router.emit generate_tag('node') << ('.memory.allocatable'), Fluent::EventTime.from_time(@scraped_node_at), 'node' => node_name, 'value' => node_memory_allocatable
|
509
|
+
|
510
|
+
node_req_lim = UsageMetricsUnit.new
|
511
|
+
if @@node_requests_limits_metrics_map[node_name].nil?
|
512
|
+
next
|
513
|
+
end
|
514
514
|
node_req_lim = @@node_requests_limits_metrics_map[node_name]
|
515
|
+
|
516
|
+
node_cpu_reservation = node_req_lim.instance_variable_get(:@cpu_request).to_f / node_cpu_allocatable
|
517
|
+
router.emit generate_tag('node') << ('.cpu.reservation'), Fluent::EventTime.from_time(@scraped_node_at), 'node' => node_name, 'value' => node_cpu_reservation
|
518
|
+
node_memory_reservation = node_req_lim.instance_variable_get(:@memory_request).to_f / node_memory_allocatable
|
519
|
+
router.emit generate_tag('node') << ('.memory.reservation'), Fluent::EventTime.from_time(@scraped_node_at), 'node' => node_name, 'value' => node_memory_reservation
|
515
520
|
end
|
516
|
-
|
517
|
-
|
521
|
+
@@node_requests_limits_metrics_map = nil
|
522
|
+
@@node_requests_limits_metrics_map = {}
|
523
|
+
end
|
524
|
+
|
525
|
+
@mutex_node_res_usage.synchronize do
|
526
|
+
Array(response['items']).each do |node_json|
|
527
|
+
node_name = node_json['metadata']['name']
|
528
|
+
node_cpu_allocatable = get_cpu_value(node_json['status']['allocatable']['cpu'])
|
529
|
+
node_memory_allocatable = get_memory_value(node_json['status']['allocatable']['memory'])
|
518
530
|
|
531
|
+
node_res_usage = ResourceUsageMetricsUnit.new
|
532
|
+
if @@node_resource_usage_metrics_map[node_name].nil?
|
533
|
+
next
|
534
|
+
end
|
519
535
|
node_res_usage = @@node_resource_usage_metrics_map[node_name]
|
536
|
+
|
537
|
+
# https://github.com/kubernetes/heapster/blob/c78cc312ab3901acfe5c2f95f7a621909c8455ad/metrics/processors/node_autoscaling_enricher.go#L62
|
538
|
+
node_cpu_utilization = node_res_usage.instance_variable_get(:@cpu_usage).to_f / 1_000_000 * node_cpu_allocatable # converting from nano cores to milli core
|
539
|
+
router.emit generate_tag('node') << ('.cpu.utilization'), Fluent::EventTime.from_time(@scraped_node_at), 'node' => node_name, 'value' => node_cpu_utilization
|
540
|
+
node_memory_utilization = node_res_usage.instance_variable_get(:@memory_usage).to_f / node_memory_allocatable # converting from bytes to megabytes
|
541
|
+
router.emit generate_tag('node') << ('.memory.utilization'), Fluent::EventTime.from_time(@scraped_node_at), 'node' => node_name, 'value' => node_memory_utilization
|
520
542
|
end
|
521
|
-
|
522
|
-
|
523
|
-
router.emit generate_tag('node') << ('.cpu.utilization'), Fluent::EventTime.from_time(@scraped_node_at), 'node' => node_name, 'value' => node_cpu_utilization
|
524
|
-
node_cpu_reservation = node_req_lim.instance_variable_get(:@cpu_request).to_f / node_cpu_allocatable
|
525
|
-
router.emit generate_tag('node') << ('.cpu.reservation'), Fluent::EventTime.from_time(@scraped_node_at), 'node' => node_name, 'value' => node_cpu_reservation
|
526
|
-
node_memory_utilization = node_res_usage.instance_variable_get(:@memory_usage).to_f / node_memory_allocatable # converting from bytes to megabytes
|
527
|
-
router.emit generate_tag('node') << ('.memory.utilization'), Fluent::EventTime.from_time(@scraped_node_at), 'node' => node_name, 'value' => node_memory_utilization
|
528
|
-
node_memory_reservation = node_req_lim.instance_variable_get(:@memory_request).to_f / node_memory_allocatable
|
529
|
-
router.emit generate_tag('node') << ('.memory.reservation'), Fluent::EventTime.from_time(@scraped_node_at), 'node' => node_name, 'value' => node_memory_reservation
|
530
|
-
@mutex_node_req_lim.synchronize do
|
531
|
-
@@node_requests_limits_metrics_map = nil
|
532
|
-
@@node_requests_limits_metrics_map = {}
|
533
|
-
end
|
534
|
-
@mutex_node_res_usage.synchronize do
|
535
|
-
@@node_resource_usage_metrics_map = nil
|
536
|
-
@@node_resource_usage_metrics_map = {}
|
537
|
-
end
|
543
|
+
@@node_resource_usage_metrics_map = nil
|
544
|
+
@@node_resource_usage_metrics_map = {}
|
538
545
|
end
|
539
546
|
end
|
540
547
|
|
@@ -551,7 +558,7 @@ module Fluent
|
|
551
558
|
def scrape_resource_usage_metrics
|
552
559
|
response = resource_usage_api.get(@client.headers)
|
553
560
|
handle_resource_usage_response(response)
|
554
|
-
|
561
|
+
rescue StandardError => e
|
555
562
|
log.error "Failed to get resource usage metrics, error=#{$ERROR_INFO}, #{e.inspect}"
|
556
563
|
log.error_backtrace
|
557
564
|
end
|
@@ -589,16 +596,15 @@ module Fluent
|
|
589
596
|
log.warn("Couldn't scrap metric for node '#{node_name} as it is unavailable. Ignoring it.'")
|
590
597
|
next
|
591
598
|
end
|
592
|
-
|
599
|
+
|
593
600
|
Array(node_response['pods']).each do |pod_json|
|
594
601
|
unless pod_json['cpu'].nil? || pod_json['memory'].nil?
|
595
|
-
pod_cpu_usage = pod_json['cpu'].fetch('usageNanoCores', 0)/ 1_000_000
|
596
|
-
pod_memory_usage = pod_json['memory'].fetch('usageBytes', 0) / 1024 ** 2 # Converting to Mi
|
602
|
+
pod_cpu_usage = pod_json['cpu'].fetch('usageNanoCores', 0)/ 1_000_000.to_f
|
603
|
+
pod_memory_usage = pod_json['memory'].fetch('usageBytes', 0) / 1024 ** 2.to_f # Converting to Mi
|
597
604
|
pod_namespace = pod_json['podRef']['namespace']
|
598
605
|
pod_usage = ResourceUsageMetricsUnit.new
|
599
606
|
pod_usage.add_resource_usage_metrics(pod_cpu_usage, pod_memory_usage)
|
600
607
|
if @@namespace_resource_usage_metrics_map[pod_namespace].nil?
|
601
|
-
namespace_usage_metrics = ResourceUsageMetricsUnit.new
|
602
608
|
@@namespace_resource_usage_metrics_map[pod_namespace] = pod_usage
|
603
609
|
else
|
604
610
|
@@namespace_resource_usage_metrics_map[pod_namespace].add_resource_usage_metrics(pod_cpu_usage, pod_memory_usage)
|
@@ -610,6 +616,33 @@ module Fluent
|
|
610
616
|
@@node_resource_usage_metrics_map[node_name].add_resource_usage_metrics(pod_cpu_usage, pod_memory_usage)
|
611
617
|
pod_usage = nil
|
612
618
|
end
|
619
|
+
|
620
|
+
if pod_json['cpu'].nil? || pod_json['memory'].nil?
|
621
|
+
unless pod_json['containers'].nil?
|
622
|
+
pod_namespace = pod_json['podRef']['namespace']
|
623
|
+
Array(pod_json['containers']).each do |container_json|
|
624
|
+
unless container_json['cpu'].nil? || container_json['memory'].nil?
|
625
|
+
container_cpu_usage = container_json['cpu'].fetch('usageNanoCores', 0)/ 1_000_000.to_f
|
626
|
+
container_memory_usage = container_json['memory'].fetch('usageBytes', 0) / 1024 ** 2.to_f # Converting to Mi
|
627
|
+
container_usage = ResourceUsageMetricsUnit.new
|
628
|
+
container_usage.add_resource_usage_metrics(container_cpu_usage, container_memory_usage)
|
629
|
+
if @@namespace_resource_usage_metrics_map[pod_namespace].nil?
|
630
|
+
namespace_usage_metrics = ResourceUsageMetricsUnit.new
|
631
|
+
@@namespace_resource_usage_metrics_map[pod_namespace] = container_usage
|
632
|
+
else
|
633
|
+
@@namespace_resource_usage_metrics_map[pod_namespace].add_resource_usage_metrics(container_cpu_usage, container_memory_usage)
|
634
|
+
end
|
635
|
+
if @@node_resource_usage_metrics_map[node_name].nil?
|
636
|
+
node_name_usage_metrics = ResourceUsageMetricsUnit.new
|
637
|
+
@@node_resource_usage_metrics_map[node_name] = node_name_usage_metrics
|
638
|
+
else
|
639
|
+
@@node_resource_usage_metrics_map[node_name].add_resource_usage_metrics(container_cpu_usage, container_memory_usage)
|
640
|
+
end
|
641
|
+
container_usage = nil
|
642
|
+
end
|
643
|
+
end
|
644
|
+
end
|
645
|
+
end
|
613
646
|
end
|
614
647
|
end
|
615
648
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fluent-plugin-k8s-metrics-agg
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.1.
|
4
|
+
version: 1.1.9
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Splunk Inc.
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2022-01-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|