fluent-plugin-k8s-metrics-agg 1.1.8 → 1.1.11

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 98a2dd49ad2df50f48934daa1f41f92d9466a0c87149b74a059755e2a12b55a1
4
- data.tar.gz: 4549d0845d04a933c89a6599a18b15ef83e468c0e739c5b9f66458b0c5f8116f
3
+ metadata.gz: 615000b1ce1deb2d7501c68e5f9644be8ca40918d6277a3006cccbaec238d03d
4
+ data.tar.gz: 9e4dd847f7ba96983cf285c792122b52ca344ca94c8b7ae49c3220e6149664b7
5
5
  SHA512:
6
- metadata.gz: c1acc729827a62b91a8cf8fa33f230d651eaf733e66d395ba4610ff2b55407013e9c3fdb8b4db6d8913a4e6320fbe37f04b910b62de3c894216c347bacb86be5
7
- data.tar.gz: 79c4d760559ef7edb0789133aa7d9c7e1a89cfd28b3ac71df146dd755082338b1c480a9b95940fc15f54b1984e22cf81f72e6c48f4b7e8c93354a1aaed9985b6
6
+ metadata.gz: 66814f00e485214d6ab88b4c9de800062144209a89dcf3c0e5189f1f98c93f215ff662de682f540e8e944fc5b76102992a9f4def55a6aaa40caca2643daafb4e
7
+ data.tar.gz: 517e0be7bacc99788aeeb5e6ea6911b94d3d3e94664d3fc24cb0ec9269b65dc72856ea73c48d438f4642f79e99a77764bc093a344d842c1d8a74b782bc894d3f
@@ -67,8 +67,9 @@ jobs:
67
67
  CI_INDEX_EVENTS: ci_events
68
68
  CI_INDEX_OBJECTS: ci_objects
69
69
  CI_INDEX_METRICS: ci_metrics
70
- KUBERNETES_VERSION: v1.15.2
71
- MINIKUBE_VERSION: v1.21.0
70
+ KUBERNETES_VERSION: v1.23.2
71
+ MINIKUBE_VERSION: v1.24.0
72
+ MINIKUBE_NODE_COUNTS: 2
72
73
  GITHUB_ACTIONS: true
73
74
 
74
75
  steps:
@@ -121,7 +122,7 @@ jobs:
121
122
  chmod +x minikube
122
123
  sudo mv minikube /usr/local/bin/
123
124
  # Start Minikube and Wait
124
- minikube start --driver=docker --container-runtime=docker --cpus 2 --memory 4096 --kubernetes-version=${KUBERNETES_VERSION} --no-vtx-check
125
+ minikube start --driver=docker --container-runtime=docker --cpus 2 --memory 4096 --kubernetes-version=${KUBERNETES_VERSION} --no-vtx-check -n=${MINIKUBE_NODE_COUNTS}
125
126
  export JSONPATH='{range .items[*]}{@.metadata.name}:{range @.status.conditions[*]}{@.type}={@.status};{end}{end}'
126
127
  until kubectl get nodes -o jsonpath="$JSONPATH" 2>&1 | grep -q "Ready=True"; do
127
128
  sleep 1;
@@ -130,13 +131,15 @@ jobs:
130
131
  - name: Install Splunk
131
132
  run: |
132
133
  # Wait until minikube is ready
133
- kubectl apply -f https://docs.projectcalico.org/v3.14/manifests/calico.yaml
134
134
  export JSONPATH='{range .items[*]}{@.metadata.name}:{range @.status.conditions[*]}{@.type}={@.status};{end}{end}'
135
135
  until kubectl get nodes -o jsonpath="$JSONPATH" 2>&1 | grep -q "Ready=True"; do
136
136
  echo "wait for minikube ready ..."
137
137
  sleep 1;
138
138
  done
139
139
  kubectl get nodes
140
+ until kubectl get sa | grep -q 'default'; do
141
+ sleep 1;
142
+ done
140
143
  # Install Splunk on minikube
141
144
  kubectl apply -f ci_scripts/k8s-splunk.yml
142
145
  # Wait until splunk is ready
@@ -189,4 +192,5 @@ jobs:
189
192
  --splunkd-url https://$CI_SPLUNK_HOST:8089 \
190
193
  --splunk-user admin \
191
194
  --splunk-password $CI_SPLUNK_PASSWORD \
192
- -p no:warnings -s
195
+ --nodes-count $MINIKUBE_NODE_COUNTS\
196
+ -p no:warnings -s -n auto
data/Gemfile.lock CHANGED
@@ -1,9 +1,9 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- fluent-plugin-k8s-metrics-agg (1.1.8)
4
+ fluent-plugin-k8s-metrics-agg (1.1.11)
5
5
  fluentd (>= 1.9.1)
6
- kubeclient (~> 4.6.0)
6
+ kubeclient (~> 4.9.3)
7
7
  multi_json (~> 1.14.1)
8
8
  oj (~> 3.10.2)
9
9
 
@@ -12,23 +12,23 @@ GEM
12
12
  specs:
13
13
  addressable (2.8.0)
14
14
  public_suffix (>= 2.0.2, < 5.0)
15
- concurrent-ruby (1.1.9)
15
+ concurrent-ruby (1.1.10)
16
16
  cool.io (1.7.1)
17
17
  crack (0.4.5)
18
18
  rexml
19
19
  docile (1.4.0)
20
20
  domain_name (0.5.20190701)
21
21
  unf (>= 0.0.5, < 1.0.0)
22
- ffi (1.15.4)
22
+ ffi (1.15.5)
23
23
  ffi-compiler (1.0.1)
24
24
  ffi (>= 1.0.0)
25
25
  rake
26
- fluentd (1.14.2)
26
+ fluentd (1.14.5)
27
27
  bundler
28
28
  cool.io (>= 1.4.5, < 2.0.0)
29
- http_parser.rb (>= 0.5.1, < 0.8.0)
29
+ http_parser.rb (>= 0.5.1, < 0.9.0)
30
30
  msgpack (>= 1.3.1, < 2.0.0)
31
- serverengine (>= 2.2.2, < 3.0.0)
31
+ serverengine (>= 2.2.5, < 3.0.0)
32
32
  sigdump (~> 0.2.2)
33
33
  strptime (>= 0.2.4, < 1.0.0)
34
34
  tzinfo (>= 1.0, < 3.0)
@@ -47,16 +47,19 @@ 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.7.0)
50
+ http_parser.rb (0.8.0)
51
51
  json (2.6.1)
52
- kubeclient (4.6.0)
52
+ jsonpath (1.1.0)
53
+ multi_json
54
+ kubeclient (4.9.3)
53
55
  http (>= 3.0, < 5.0)
54
- recursive-open-struct (~> 1.0, >= 1.0.4)
56
+ jsonpath (~> 1.0)
57
+ recursive-open-struct (~> 1.1, >= 1.1.1)
55
58
  rest-client (~> 2.0)
56
- mime-types (3.3.1)
59
+ mime-types (3.4.1)
57
60
  mime-types-data (~> 3.2015)
58
- mime-types-data (3.2021.0901)
59
- msgpack (1.4.2)
61
+ mime-types-data (3.2022.0105)
62
+ msgpack (1.4.5)
60
63
  multi_json (1.14.1)
61
64
  netrc (0.11.0)
62
65
  oj (3.10.18)
@@ -70,7 +73,7 @@ GEM
70
73
  mime-types (>= 1.16, < 4.0)
71
74
  netrc (~> 0.8)
72
75
  rexml (3.2.5)
73
- serverengine (2.2.4)
76
+ serverengine (2.2.5)
74
77
  sigdump (~> 0.2.2)
75
78
  sigdump (0.2.4)
76
79
  simplecov (0.16.1)
@@ -83,11 +86,11 @@ GEM
83
86
  power_assert
84
87
  tzinfo (2.0.4)
85
88
  concurrent-ruby (~> 1.0)
86
- tzinfo-data (1.2021.5)
89
+ tzinfo-data (1.2022.1)
87
90
  tzinfo (>= 1.0.0)
88
91
  unf (0.1.4)
89
92
  unf_ext
90
- unf_ext (0.0.8)
93
+ unf_ext (0.0.8.1)
91
94
  webmock (3.5.1)
92
95
  addressable (>= 2.3.6)
93
96
  crack (>= 0.3.2)
@@ -107,4 +110,4 @@ DEPENDENCIES
107
110
  webmock (~> 3.5.1)
108
111
 
109
112
  BUNDLED WITH
110
- 2.2.33
113
+ 2.3.10
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.1.8
1
+ 1.1.11
@@ -23,7 +23,11 @@ helm install ci-sck --set global.splunk.hec.token=$CI_SPLUNK_HEC_TOKEN \
23
23
  --set splunk-kubernetes-metrics.imageAgg.tag=recent \
24
24
  --set splunk-kubernetes-metrics.imageAgg.pullPolicy=IfNotPresent \
25
25
  -f ci_scripts/sck_values.yml helm-chart/splunk-connect-for-kubernetes
26
- #wait for deployment to finish
27
- until kubectl get pod | grep Running | [[ $(wc -l) == 4 ]]; do
26
+
27
+ kubectl get pod
28
+ # wait for deployment to finish
29
+ # metric and logging deamon set for each node + aggr + object + splunk
30
+ PODS=$((MINIKUBE_NODE_COUNTS*2+2+1))
31
+ until kubectl get pod | grep Running | [[ $(wc -l) == $PODS ]]; do
28
32
  sleep 1;
29
- done
33
+ done
data/docker/Dockerfile CHANGED
@@ -31,13 +31,17 @@ RUN mkdir /licenses
31
31
  COPY --from=builder /app/LICENSE /licenses/LICENSE
32
32
 
33
33
  COPY --from=builder /app/docker/Gemfile* ./
34
-
34
+ RUN gem update date cgi
35
+ RUN rm -f /usr/share/gems/specifications/default/cgi-0.1.0.gemspec /usr/share/gems/specifications/default/date-3.0.0.gemspec
35
36
  RUN yum update -y \
36
37
  && yum remove -y nodejs npm \
37
38
  && gem install bundler \
39
+ && gem uninstall -i /usr/share/gems bundler \
38
40
  && gem unpack /tmp/*.gem --target gem \
39
41
  && bundle install \
40
- && rpm -e --nodeps python3-pip-wheel python3-urllib3-* python3-requests-* python3-libxml2-* python3-dmidecode-* subscription-manager-* libwebp-* libwebp-devel-* glib2-* libjpeg-turbo-devel-* libjpeg-turbo-* mariadb-connector-c-config-* mariadb-connector-c-* mariadb-connector-c-devel-* rsync-* sqlite-libs-* sqlite-devel-* sqlite-* libxml2-* libxml2-devel-* libX11-* libX11-common-* libX11-devel-* libX11-xcb-* nettle-* libsolv-* file-libs-* dbus-daemon-* tar-* qt5-srpm-macros-* perl-parent-* git-* bsdtar-* openssh-clients-* json-c-* binutils-* libtiff-devel-* libtiff-* || true
42
+ && bundle update i18n \
43
+ && gem uninstall -i /usr/share/gems i18n --version 1.8.11 \
44
+ && rpm -e --nodeps python3-pip-wheel python3-urllib3-* python3-requests-* python3-libxml2-* python3-dmidecode-* subscription-manager-* libwebp-* libwebp-devel-* libjpeg-turbo-devel-* libjpeg-turbo-* mariadb-connector-c-config-* mariadb-connector-c-* mariadb-connector-c-devel-* rsync-* libX11-* libX11-common-* libX11-devel-* libX11-xcb-* dbus-daemon-* tar-* qt5-srpm-macros-* perl-parent-* git-* bsdtar-* openssh-clients-* binutils-* libtiff-devel-* libtiff-* || true
41
45
 
42
46
  RUN groupadd -r $FLUENT_USER && \
43
47
  useradd -r -g $FLUENT_USER $FLUENT_USER && \
data/docker/Gemfile CHANGED
@@ -7,7 +7,7 @@ gem "fluentd", ">=1.14.2"
7
7
  gem "fluent-plugin-prometheus", ">=2.0"
8
8
  gem "fluent-plugin-record-modifier", "=2.1.0"
9
9
  gem "fluent-plugin-kubernetes_metadata_filter", ">=2.9.2"
10
- gem "kubeclient", "=4.6.0"
10
+ gem "kubeclient", "=4.9.3"
11
11
  gem "oj", "=3.10.2"
12
12
  gem 'multi_json', '=1.14.1'
13
13
  gem 'http_parser.rb', '=0.5.3'
data/docker/Gemfile.lock CHANGED
@@ -1,39 +1,38 @@
1
1
  PATH
2
2
  remote: gem
3
3
  specs:
4
- fluent-plugin-k8s-metrics-agg (1.1.8)
4
+ fluent-plugin-k8s-metrics-agg (1.1.11)
5
5
  fluentd (>= 1.9.1)
6
- kubeclient (~> 4.6.0)
6
+ kubeclient (~> 4.9.3)
7
7
  multi_json (~> 1.14.1)
8
8
  oj (~> 3.10.2)
9
9
 
10
10
  GEM
11
11
  remote: https://rubygems.org/
12
12
  specs:
13
- activemodel (6.1.4.3)
14
- activesupport (= 6.1.4.3)
15
- activesupport (6.1.4.3)
13
+ activemodel (7.0.2.3)
14
+ activesupport (= 7.0.2.3)
15
+ activesupport (7.0.2.3)
16
16
  concurrent-ruby (~> 1.0, >= 1.0.2)
17
17
  i18n (>= 1.6, < 2)
18
18
  minitest (>= 5.1)
19
19
  tzinfo (~> 2.0)
20
- zeitwerk (~> 2.3)
21
20
  addressable (2.8.0)
22
21
  public_suffix (>= 2.0.2, < 5.0)
23
22
  aes_key_wrap (1.1.0)
24
23
  attr_required (1.0.1)
25
24
  bigdecimal (3.0.0)
26
25
  bindata (2.4.10)
27
- concurrent-ruby (1.1.9)
26
+ concurrent-ruby (1.1.10)
28
27
  connection_pool (2.2.5)
29
28
  cool.io (1.7.1)
30
29
  domain_name (0.5.20190701)
31
30
  unf (>= 0.0.5, < 1.0.0)
32
- ffi (1.15.4)
31
+ ffi (1.15.5)
33
32
  ffi-compiler (1.0.1)
34
33
  ffi (>= 1.0.0)
35
34
  rake
36
- fluent-plugin-kubernetes_metadata_filter (2.9.3)
35
+ fluent-plugin-kubernetes_metadata_filter (2.9.5)
37
36
  fluentd (>= 0.14.0, < 1.15)
38
37
  kubeclient (>= 4.0.0, < 5.0.0)
39
38
  lru_redux
@@ -42,18 +41,18 @@ GEM
42
41
  prometheus-client (>= 2.1.0)
43
42
  fluent-plugin-record-modifier (2.1.0)
44
43
  fluentd (>= 1.0, < 2)
45
- fluent-plugin-splunk-hec (1.2.9)
44
+ fluent-plugin-splunk-hec (1.2.12)
46
45
  fluentd (>= 1.4)
47
46
  multi_json (~> 1.13)
48
47
  net-http-persistent (~> 3.1)
49
48
  openid_connect (~> 1.1.8)
50
49
  prometheus-client (>= 2.1.0)
51
- fluentd (1.14.3)
50
+ fluentd (1.14.5)
52
51
  bundler
53
52
  cool.io (>= 1.4.5, < 2.0.0)
54
53
  http_parser.rb (>= 0.5.1, < 0.9.0)
55
54
  msgpack (>= 1.3.1, < 2.0.0)
56
- serverengine (>= 2.2.2, < 3.0.0)
55
+ serverengine (>= 2.2.5, < 3.0.0)
57
56
  sigdump (~> 0.2.2)
58
57
  strptime (>= 0.2.4, < 1.0.0)
59
58
  tzinfo (>= 1.0, < 3.0)
@@ -73,25 +72,28 @@ GEM
73
72
  ffi-compiler (>= 1.0, < 2.0)
74
73
  http_parser.rb (0.5.3)
75
74
  httpclient (2.8.3)
76
- i18n (1.8.11)
75
+ i18n (1.10.0)
77
76
  concurrent-ruby (~> 1.0)
78
77
  json-jwt (1.13.0)
79
78
  activesupport (>= 4.2)
80
79
  aes_key_wrap
81
80
  bindata
82
- kubeclient (4.6.0)
81
+ jsonpath (1.1.0)
82
+ multi_json
83
+ kubeclient (4.9.3)
83
84
  http (>= 3.0, < 5.0)
84
- recursive-open-struct (~> 1.0, >= 1.0.4)
85
+ jsonpath (~> 1.0)
86
+ recursive-open-struct (~> 1.1, >= 1.1.1)
85
87
  rest-client (~> 2.0)
86
88
  lru_redux (1.1.0)
87
89
  mail (2.7.1)
88
90
  mini_mime (>= 0.1.1)
89
91
  mime-types (3.4.1)
90
92
  mime-types-data (~> 3.2015)
91
- mime-types-data (3.2021.1115)
93
+ mime-types-data (3.2022.0105)
92
94
  mini_mime (1.1.2)
93
95
  minitest (5.15.0)
94
- msgpack (1.4.2)
96
+ msgpack (1.4.5)
95
97
  multi_json (1.14.1)
96
98
  net-http-persistent (3.1.0)
97
99
  connection_pool (~> 2.2)
@@ -107,7 +109,7 @@ GEM
107
109
  validate_email
108
110
  validate_url
109
111
  webfinger (>= 1.0.1)
110
- prometheus-client (2.1.0)
112
+ prometheus-client (4.0.0)
111
113
  public_suffix (4.0.6)
112
114
  rack (2.2.3)
113
115
  rack-oauth2 (1.19.0)
@@ -123,7 +125,7 @@ GEM
123
125
  http-cookie (>= 1.0.2, < 2.0)
124
126
  mime-types (>= 1.16, < 4.0)
125
127
  netrc (~> 0.8)
126
- serverengine (2.2.4)
128
+ serverengine (2.2.5)
127
129
  sigdump (~> 0.2.2)
128
130
  sigdump (0.2.4)
129
131
  strptime (0.2.5)
@@ -133,11 +135,11 @@ GEM
133
135
  httpclient (>= 2.4)
134
136
  tzinfo (2.0.4)
135
137
  concurrent-ruby (~> 1.0)
136
- tzinfo-data (1.2021.5)
138
+ tzinfo-data (1.2022.1)
137
139
  tzinfo (>= 1.0.0)
138
140
  unf (0.1.4)
139
141
  unf_ext
140
- unf_ext (0.0.8)
142
+ unf_ext (0.0.8.1)
141
143
  validate_email (0.1.6)
142
144
  activemodel (>= 3.0)
143
145
  mail (>= 2.2.5)
@@ -149,7 +151,6 @@ GEM
149
151
  httpclient (>= 2.4)
150
152
  webrick (1.7.0)
151
153
  yajl-ruby (1.4.1)
152
- zeitwerk (2.5.1)
153
154
 
154
155
  PLATFORMS
155
156
  ruby
@@ -163,7 +164,7 @@ DEPENDENCIES
163
164
  fluent-plugin-splunk-hec (>= 1.2.7)
164
165
  fluentd (>= 1.14.2)
165
166
  http_parser.rb (= 0.5.3)
166
- kubeclient (= 4.6.0)
167
+ kubeclient (= 4.9.3)
167
168
  multi_json (= 1.14.1)
168
169
  oj (= 3.10.2)
169
170
 
@@ -26,7 +26,7 @@ Gem::Specification.new do |spec|
26
26
  spec.add_development_dependency "simplecov", '~> 0.16.1'
27
27
  spec.add_development_dependency 'webmock', '~> 3.5.1'
28
28
  spec.add_runtime_dependency 'fluentd', '>= 1.9.1'
29
- spec.add_runtime_dependency 'kubeclient', '~> 4.6.0'
29
+ spec.add_runtime_dependency 'kubeclient', '~> 4.9.3'
30
30
  spec.add_runtime_dependency 'multi_json', '~> 1.14.1'
31
31
  spec.add_runtime_dependency 'oj', '~> 3.10.2'
32
32
 
@@ -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
- Array(response['items']).each do |node_json|
499
- node_name = node_json['metadata']['name']
500
- node_cpu_capacity = get_cpu_value(node_json['status']['capacity']['cpu'])
501
- router.emit generate_tag('node') << ('.cpu.capacity'), Fluent::EventTime.from_time(@scraped_node_at), 'node' => node_name, 'value' => node_cpu_capacity
502
- node_cpu_allocatable = get_cpu_value(node_json['status']['allocatable']['cpu'])
503
- router.emit generate_tag('node') << ('.cpu.allocatable'), Fluent::EventTime.from_time(@scraped_node_at), 'node' => node_name, 'value' => node_cpu_allocatable
504
- node_memory_capacity = get_memory_value(node_json['status']['capacity']['memory'])
505
- router.emit generate_tag('node') << ('.memory.capacity'), Fluent::EventTime.from_time(@scraped_node_at), 'node' => node_name, 'value' => node_memory_capacity
506
- node_memory_allocatable = get_memory_value(node_json['status']['allocatable']['memory'])
507
- router.emit generate_tag('node') << ('.memory.allocatable'), Fluent::EventTime.from_time(@scraped_node_at), 'node' => node_name, 'value' => node_memory_allocatable
508
-
509
- node_req_lim = UsageMetricsUnit.new
510
- node_res_usage = ResourceUsageMetricsUnit.new
511
- @mutex_node_req_lim.synchronize do
512
- next if @@node_requests_limits_metrics_map[node_name].nil?
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
- @mutex_node_res_usage.synchronize do
517
- next if @@node_resource_usage_metrics_map[node_name].nil?
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
- # https://github.com/kubernetes/heapster/blob/c78cc312ab3901acfe5c2f95f7a621909c8455ad/metrics/processors/node_autoscaling_enricher.go#L62
522
- 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
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
- rescue StandardError => e
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.8
4
+ version: 1.1.11
5
5
  platform: ruby
6
6
  authors:
7
7
  - Splunk Inc.
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-12-16 00:00:00.000000000 Z
11
+ date: 2022-03-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -100,14 +100,14 @@ dependencies:
100
100
  requirements:
101
101
  - - "~>"
102
102
  - !ruby/object:Gem::Version
103
- version: 4.6.0
103
+ version: 4.9.3
104
104
  type: :runtime
105
105
  prerelease: false
106
106
  version_requirements: !ruby/object:Gem::Requirement
107
107
  requirements:
108
108
  - - "~>"
109
109
  - !ruby/object:Gem::Version
110
- version: 4.6.0
110
+ version: 4.9.3
111
111
  - !ruby/object:Gem::Dependency
112
112
  name: multi_json
113
113
  requirement: !ruby/object:Gem::Requirement