fluent-plugin-kubernetes_metadata_filter 3.2.0 → 3.4.0

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: b386e5a9f06d9356809efffdf54c368b21a6cdda6a8b1687ce9e60b2352e38c7
4
- data.tar.gz: a9cd4f1169c0318ee418943614ba6c80fd8ae99837605d0597e4964ff3dc1dfb
3
+ metadata.gz: 0754e97a3a06ac6c24eee7004490eb0e06bfb51f63a2c973e07d9edfc593a239
4
+ data.tar.gz: 340c6bdc268bc2ff009fd63e58ec460e043f65636d1a03f9a3726467e84821f5
5
5
  SHA512:
6
- metadata.gz: 144b68bc69c03c9d4812b2ff6897dcc5b3f56152e396ff1b2d75217369bb5cf7c94882767b25793a84604e62f62dd98f212d79e03ca7c52942e21d03623b441f
7
- data.tar.gz: 2bddc63b3576adfe0a6d0052f8727b3b88635c47dec586f6e5fbaf9785b498564d67205b4c4b0247023ebfe50fa0efec0ad3de6dd6b803aff60a66ae7bdc56ff
6
+ metadata.gz: de4fa7d241b0b7efacd1cde9e2c18c0bb3c8553d13e13528e9ccc16aa3ab974c12b1a88ce43a7bd186c9060d29ba649f8aa0365c3a9ecc4eed2c2354e1092dc9
7
+ data.tar.gz: 02ca1c7a7703e85962e206571b25a8416be206ef18d706958dfc894c598a068727e53abb3bd3beb059f1245211f957072b0b4c38a21a9d4c1ed114286306ffc9
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- fluent-plugin-kubernetes_metadata_filter (3.2.0)
4
+ fluent-plugin-kubernetes_metadata_filter (3.4.0)
5
5
  fluentd (>= 0.14.0, < 1.17)
6
6
  kubeclient (>= 4.0.0, < 5.0.0)
7
7
  lru_redux
@@ -17,7 +17,7 @@ GEM
17
17
  codeclimate-test-reporter (0.6.0)
18
18
  simplecov (>= 0.7.1, < 1.0.0)
19
19
  concurrent-ruby (1.2.2)
20
- cool.io (1.7.1)
20
+ cool.io (1.8.0)
21
21
  copyright-header (1.0.22)
22
22
  github-linguist
23
23
  crack (0.4.5)
@@ -26,17 +26,17 @@ GEM
26
26
  domain_name (0.5.20190701)
27
27
  unf (>= 0.0.5, < 1.0.0)
28
28
  escape_utils (1.2.2)
29
- ffi (1.15.5)
29
+ ffi (1.16.2)
30
30
  ffi-compiler (1.0.1)
31
31
  ffi (>= 1.0.0)
32
32
  rake
33
- fluentd (1.16.0)
33
+ fluentd (1.16.2)
34
34
  bundler
35
35
  cool.io (>= 1.4.5, < 2.0.0)
36
36
  http_parser.rb (>= 0.5.1, < 0.9.0)
37
37
  msgpack (>= 1.3.1, < 2.0.0)
38
38
  serverengine (>= 2.3.2, < 3.0.0)
39
- sigdump (~> 0.2.2)
39
+ sigdump (~> 0.2.5)
40
40
  strptime (>= 0.2.4, < 1.0.0)
41
41
  tzinfo (>= 1.0, < 3.0)
42
42
  tzinfo-data (~> 1.0)
@@ -58,7 +58,7 @@ GEM
58
58
  domain_name (~> 0.5)
59
59
  http-form_data (2.3.0)
60
60
  http_parser.rb (0.8.0)
61
- jsonpath (1.1.2)
61
+ jsonpath (1.1.4)
62
62
  multi_json
63
63
  kubeclient (4.11.0)
64
64
  http (>= 3.0, < 6.0)
@@ -69,12 +69,12 @@ GEM
69
69
  ffi-compiler (~> 1.0)
70
70
  rake (~> 13.0)
71
71
  lru_redux (1.1.0)
72
- mime-types (3.4.1)
72
+ mime-types (3.5.1)
73
73
  mime-types-data (~> 3.2015)
74
- mime-types-data (3.2023.0218.1)
74
+ mime-types-data (3.2023.0808)
75
75
  mini_mime (1.1.2)
76
76
  minitest (4.7.5)
77
- msgpack (1.7.0)
77
+ msgpack (1.7.2)
78
78
  multi_json (1.15.0)
79
79
  netrc (0.11.0)
80
80
  parallel (1.22.1)
@@ -108,7 +108,7 @@ GEM
108
108
  rugged (1.4.3)
109
109
  serverengine (2.3.2)
110
110
  sigdump (~> 0.2.2)
111
- sigdump (0.2.4)
111
+ sigdump (0.2.5)
112
112
  simplecov (0.21.2)
113
113
  docile (~> 1.1)
114
114
  simplecov-html (~> 0.11)
data/README.md CHANGED
@@ -55,6 +55,8 @@ when true (default: `true`)
55
55
  to trust the intermediate CA certs we do have, set this to `true` - this corresponds to
56
56
  the `openssl s_client -partial_chain` flag and `X509_V_FLAG_PARTIAL_CHAIN` (default: `false`)
57
57
  * `skip_labels` - Skip all label fields from the metadata.
58
+ * `skip_pod_labels` - Skip only pod label fields from the metadata.
59
+ * `skip_namespace_labels` - Skip only namespace label fields from the metadata.
58
60
  * `skip_container_metadata` - Skip some of the container data of the metadata. The metadata will not contain the container_image and container_image_id fields.
59
61
  * `skip_master_url` - Skip the master_url field from the metadata.
60
62
  * `skip_namespace_metadata` - Skip the namespace_id field from the metadata. The fetch_namespace_metadata function will be skipped. The plugin will be faster and cpu consumption will be less.
@@ -62,6 +64,7 @@ when true (default: `true`)
62
64
  * `watch_retry_interval` - The time interval in seconds for retry backoffs when watch connections fail. (default: `10`)
63
65
  * `open_timeout` - The time in seconds to wait for a connection to kubernetes service. (default: `3`)
64
66
  * `read_timeout` - The time in seconds to wait for a read from kubernetes service. (default: `10`)
67
+ * `include_ownerrefs_metadata` - If set to true, it will include metadata (`kind` & `name`) in `kubernetes.ownerrefs` about the controller that owns the pod. (default: `false`)
65
68
 
66
69
 
67
70
  Reading from a JSON formatted log files with `in_tail` and wildcard filenames while respecting the CRI-o log format with the same config you need the fluent-plugin "multi-format-parser":
@@ -5,7 +5,7 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
5
5
 
6
6
  Gem::Specification.new do |gem|
7
7
  gem.name = 'fluent-plugin-kubernetes_metadata_filter'
8
- gem.version = '3.2.0'
8
+ gem.version = '3.4.0'
9
9
  gem.authors = ['OpenShift Cluster Logging','Jimmi Dyson']
10
10
  gem.email = ['team-logging@redhat.com','jimmidyson@gmail.com']
11
11
  gem.description = 'Filter plugin to add Kubernetes metadata'
@@ -77,9 +77,12 @@ module Fluent::Plugin
77
77
  # the openssl s_client -partial_chain flag and X509_V_FLAG_PARTIAL_CHAIN
78
78
  config_param :ssl_partial_chain, :bool, default: false
79
79
  config_param :skip_labels, :bool, default: false
80
+ config_param :skip_pod_labels, :bool, default: false
81
+ config_param :skip_namespace_labels, :bool, default: false
80
82
  config_param :skip_container_metadata, :bool, default: false
81
83
  config_param :skip_master_url, :bool, default: false
82
84
  config_param :skip_namespace_metadata, :bool, default: false
85
+ config_param :include_ownerrefs_metadata, :bool, default: false
83
86
 
84
87
  # A classname in the form of Test::APIAdapter which will try
85
88
  # to be resolved from a relative named file 'test_api_adapter'
@@ -198,7 +201,7 @@ module Fluent::Plugin
198
201
  @namespace_cache = LruRedux::TTL::ThreadSafeCache.new(@cache_size, @cache_ttl)
199
202
 
200
203
  @tag_to_kubernetes_name_regexp_compiled = Regexp.compile(@tag_to_kubernetes_name_regexp)
201
-
204
+
202
205
  # Use Kubernetes default service account if we're in a pod.
203
206
  if @kubernetes_url.nil?
204
207
  log.debug 'Kubernetes URL is not set - inspecting environ'
@@ -351,7 +354,7 @@ module Fluent::Plugin
351
354
  tag_match_data['pod_uuid']
352
355
  else
353
356
  tag_match_data['docker_id']
354
- end
357
+ end
355
358
  docker_id = tag_match_data.names.include?('docker_id') ? tag_match_data['docker_id'] : nil
356
359
  metadata = get_metadata_for_record(tag_match_data['namespace'], tag_match_data['pod_name'], tag_match_data['container_name'],
357
360
  cache_key, time, batch_miss_cache, docker_id)
@@ -40,7 +40,7 @@ module KubernetesMetadata
40
40
 
41
41
  def parse_namespace_metadata(namespace_object)
42
42
  labels = ''
43
- labels = syms_to_strs(namespace_object[:metadata][:labels].to_h) unless @skip_labels
43
+ labels = syms_to_strs(namespace_object[:metadata][:labels].to_h) unless (@skip_labels || @skip_namespace_labels)
44
44
 
45
45
  annotations = match_annotations(syms_to_strs(namespace_object[:metadata][:annotations].to_h))
46
46
 
@@ -55,7 +55,7 @@ module KubernetesMetadata
55
55
 
56
56
  def parse_pod_metadata(pod_object)
57
57
  labels = ''
58
- labels = syms_to_strs(pod_object[:metadata][:labels].to_h) unless @skip_labels
58
+ labels = syms_to_strs(pod_object[:metadata][:labels].to_h) unless (@skip_labels || @skip_pod_labels)
59
59
 
60
60
  annotations = match_annotations(syms_to_strs(pod_object[:metadata][:annotations].to_h))
61
61
 
@@ -82,14 +82,27 @@ module KubernetesMetadata
82
82
  log.warn("parsing container meta information failed for: #{pod_object[:metadata][:namespace]}/#{pod_object[:metadata][:name]}: #{e}")
83
83
  end
84
84
 
85
+ ownerrefs_meta = []
86
+ begin
87
+ pod_object[:metadata][:ownerReferences].each do |owner_reference|
88
+ ownerrefs_meta.append({
89
+ 'kind' => owner_reference[:kind],
90
+ 'name' => owner_reference[:name]
91
+ })
92
+ end
93
+ rescue StandardError => e
94
+ log.warn("parsing ownerrefs meta information failed for: #{pod_object[:metadata][:namespace]}/#{pod_object[:metadata][:name]}: #{e}")
95
+ end if @include_ownerrefs_metadata && pod_object[:metadata][:ownerReferences]
96
+
85
97
  kubernetes_metadata = {
86
98
  'namespace_name' => pod_object[:metadata][:namespace],
87
99
  'pod_id' => pod_object[:metadata][:uid],
88
100
  'pod_name' => pod_object[:metadata][:name],
89
101
  'pod_ip' => pod_object[:status][:podIP],
90
102
  'containers' => syms_to_strs(container_meta),
91
- 'host' => pod_object[:spec][:nodeName]
92
- }
103
+ 'host' => pod_object[:spec][:nodeName],
104
+ 'ownerrefs' => (ownerrefs_meta if @include_ownerrefs_metadata)
105
+ }.compact
93
106
  kubernetes_metadata['annotations'] = annotations unless annotations.empty?
94
107
  kubernetes_metadata['labels'] = labels unless labels.empty?
95
108
  kubernetes_metadata['master_url'] = @kubernetes_url unless @skip_master_url
@@ -53,7 +53,10 @@ http_interactions:
53
53
  "selfLink": "/api/v1/namespaces/default",
54
54
  "uid": "898268c8-4a36-11e5-9d81-42010af0194c",
55
55
  "resourceVersion": "6",
56
- "creationTimestamp": "2015-05-08T09:22:01Z"
56
+ "creationTimestamp": "2015-05-08T09:22:01Z",
57
+ "labels": {
58
+ "tenant": "test"
59
+ }
57
60
  },
58
61
  "spec": {
59
62
  "finalizers": [
@@ -0,0 +1,156 @@
1
+ #
2
+ # Fluentd Kubernetes Metadata Filter Plugin - Enrich Fluentd events with
3
+ # Kubernetes metadata
4
+ #
5
+ # Copyright 2015 Red Hat, Inc.
6
+ #
7
+ # Licensed under the Apache License, Version 2.0 (the "License");
8
+ # you may not use this file except in compliance with the License.
9
+ # You may obtain a copy of the License at
10
+ #
11
+ # http://www.apache.org/licenses/LICENSE-2.0
12
+ #
13
+ # Unless required by applicable law or agreed to in writing, software
14
+ # distributed under the License is distributed on an "AS IS" BASIS,
15
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
+ # See the License for the specific language governing permissions and
17
+ # limitations under the License.
18
+ #
19
+ ---
20
+ http_interactions:
21
+ - request:
22
+ method: get
23
+ uri: https://localhost:8443/api/v1/namespaces/default/pods/fabric8-console-controller-98rqc
24
+ body:
25
+ encoding: US-ASCII
26
+ string: ''
27
+ headers:
28
+ Accept:
29
+ - "*/*; q=0.5, application/xml"
30
+ Accept-Encoding:
31
+ - gzip, deflate
32
+ User-Agent:
33
+ - Ruby
34
+ response:
35
+ status:
36
+ code: 200
37
+ message: OK
38
+ headers:
39
+ Content-Type:
40
+ - application/json
41
+ Date:
42
+ - Fri, 08 May 2015 10:35:37 GMT
43
+ Transfer-Encoding:
44
+ - chunked
45
+ body:
46
+ encoding: UTF-8
47
+ string: |-
48
+ {
49
+ "kind": "Pod",
50
+ "apiVersion": "v1",
51
+ "metadata": {
52
+ "name": "fabric8-console-controller-98rqc",
53
+ "generateName": "fabric8-console-controller-",
54
+ "namespace": "default",
55
+ "selfLink": "/api/v1/namespaces/default/pods/fabric8-console-controller-98rqc",
56
+ "uid": "c76927af-f563-11e4-b32d-54ee7527188d",
57
+ "resourceVersion": "122",
58
+ "creationTimestamp": "2015-05-08T09:22:42Z",
59
+ "labels": {
60
+ "component": "fabric8Console"
61
+ },
62
+ "ownerReferences": [
63
+ {
64
+ "apiVersion": "apps/v1",
65
+ "blockOwnerDeletion": true,
66
+ "controller": true,
67
+ "kind": "ReplicaSet",
68
+ "name": "fabric8-console-controller",
69
+ "uid": "dd1ac3e1-bc88-4c54-be0f-26ac2406d884"
70
+ }
71
+ ]
72
+ },
73
+ "spec": {
74
+ "volumes": [
75
+ {
76
+ "name": "openshift-cert-secrets",
77
+ "hostPath": null,
78
+ "emptyDir": null,
79
+ "gcePersistentDisk": null,
80
+ "gitRepo": null,
81
+ "secret": {
82
+ "secretName": "openshift-cert-secrets"
83
+ },
84
+ "nfs": null,
85
+ "iscsi": null,
86
+ "glusterfs": null
87
+ }
88
+ ],
89
+ "containers": [
90
+ {
91
+ "name": "fabric8-console-container",
92
+ "image": "fabric8/hawtio-kubernetes:latest",
93
+ "ports": [
94
+ {
95
+ "containerPort": 9090,
96
+ "protocol": "TCP"
97
+ }
98
+ ],
99
+ "env": [
100
+ {
101
+ "name": "OAUTH_CLIENT_ID",
102
+ "value": "fabric8-console"
103
+ },
104
+ {
105
+ "name": "OAUTH_AUTHORIZE_URI",
106
+ "value": "https://localhost:8443/oauth/authorize"
107
+ }
108
+ ],
109
+ "resources": {},
110
+ "volumeMounts": [
111
+ {
112
+ "name": "openshift-cert-secrets",
113
+ "readOnly": true,
114
+ "mountPath": "/etc/secret-volume"
115
+ }
116
+ ],
117
+ "terminationMessagePath": "/dev/termination-log",
118
+ "imagePullPolicy": "IfNotPresent",
119
+ "capabilities": {}
120
+ }
121
+ ],
122
+ "restartPolicy": "Always",
123
+ "dnsPolicy": "ClusterFirst",
124
+ "nodeName": "jimmi-redhat.localnet"
125
+ },
126
+ "status": {
127
+ "phase": "Running",
128
+ "Condition": [
129
+ {
130
+ "type": "Ready",
131
+ "status": "True"
132
+ }
133
+ ],
134
+ "hostIP": "172.17.42.1",
135
+ "podIP": "172.17.0.8",
136
+ "containerStatuses": [
137
+ {
138
+ "name": "fabric8-console-container",
139
+ "state": {
140
+ "running": {
141
+ "startedAt": "2015-05-08T09:22:44Z"
142
+ }
143
+ },
144
+ "lastState": {},
145
+ "ready": true,
146
+ "restartCount": 0,
147
+ "image": "fabric8/hawtio-kubernetes:latest",
148
+ "imageID": "docker://b2bd1a24a68356b2f30128e6e28e672c1ef92df0d9ec01ec0c7faea5d77d2303",
149
+ "containerID": "docker://49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459"
150
+ }
151
+ ]
152
+ }
153
+ }
154
+ http_version:
155
+ recorded_at: Fri, 08 May 2015 10:35:37 GMT
156
+ recorded_with: VCR 2.9.3
@@ -49,7 +49,7 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
49
49
  d.instance.dump_stats
50
50
  assert_false(d.instance.instance_variable_get("@curr_time").nil?)
51
51
  end
52
-
52
+
53
53
  test 'disables stats when <= zero' do
54
54
  d = create_driver('stats_interval 0')
55
55
  assert_equal(0, d.instance.stats_interval)
@@ -199,6 +199,9 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
199
199
  'pod_name' => 'fabric8-console-controller-98rqc',
200
200
  'namespace_id' => '898268c8-4a36-11e5-9d81-42010af0194c',
201
201
  'namespace_name' => 'default',
202
+ 'namespace_labels' => {
203
+ 'tenant' => 'test'
204
+ },
202
205
  'pod_id' => 'c76927af-f563-11e4-b32d-54ee7527188d',
203
206
  'pod_ip' => '172.17.0.8',
204
207
  'master_url' => 'https://localhost:8443',
@@ -231,6 +234,9 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
231
234
  'pod_name' => 'fabric8-console-controller-98rqc',
232
235
  'namespace_id' => '898268c8-4a36-11e5-9d81-42010af0194c',
233
236
  'namespace_name' => 'default',
237
+ 'namespace_labels' => {
238
+ 'tenant' => 'test'
239
+ },
234
240
  'pod_id' => 'c76927af-f563-11e4-b32d-54ee7527188d',
235
241
  'pod_ip' => '172.17.0.8',
236
242
  'master_url' => 'https://localhost:8443',
@@ -330,6 +336,9 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
330
336
  'container_image_id' => 'docker://b2bd1a24a68356b2f30128e6e28e672c1ef92df0d9ec01ec0c7faea5d77d2303',
331
337
  'namespace_name' => 'default',
332
338
  'namespace_id' => '898268c8-4a36-11e5-9d81-42010af0194c',
339
+ 'namespace_labels' => {
340
+ 'tenant' => 'test'
341
+ },
333
342
  'pod_id' => 'c76927af-f563-11e4-b32d-54ee7527188d',
334
343
  'pod_ip' => '172.17.0.8',
335
344
  'master_url' => 'https://localhost:8443',
@@ -360,6 +369,9 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
360
369
  'container_image_id' => 'docker://b2bd1a24a68356b2f30128e6e28e672c1ef92df0d9ec01ec0c7faea5d77d2303',
361
370
  'namespace_name' => 'default',
362
371
  'namespace_id' => '898268c8-4a36-11e5-9d81-42010af0194c',
372
+ 'namespace_labels' => {
373
+ 'tenant' => 'test'
374
+ },
363
375
  'pod_id' => 'c76927af-f563-11e4-b32d-54ee7527188d',
364
376
  'pod_ip' => '172.17.0.8',
365
377
  'master_url' => 'https://localhost:8443',
@@ -410,6 +422,9 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
410
422
  'container_image_id' => 'docker://b2bd1a24a68356b2f30128e6e28e672c1ef92df0d9ec01ec0c7faea5d77d2303',
411
423
  'namespace_name' => 'default',
412
424
  'namespace_id' => '898268c8-4a36-11e5-9d81-42010af0194c',
425
+ 'namespace_labels' => {
426
+ 'tenant' => 'test'
427
+ },
413
428
  'pod_id' => 'c76927af-f563-11e4-b32d-54ee7527188d',
414
429
  'pod_ip' => '172.17.0.8',
415
430
  'master_url' => 'https://localhost:8443',
@@ -585,8 +600,8 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
585
600
  'host' => 'jimmi-redhat.localnet',
586
601
  'pod_name' => 'fabric8-console-controller-98rqc',
587
602
  'container_name' => 'fabric8-console-container',
588
- 'namespace_id' => '898268c8-4a36-11e5-9d81-42010af0194c',
589
603
  'namespace_name' => 'default',
604
+ 'namespace_id' => '898268c8-4a36-11e5-9d81-42010af0194c',
590
605
  'container_image' => 'fabric8/hawtio-kubernetes:latest',
591
606
  'container_image_id' => 'docker://b2bd1a24a68356b2f30128e6e28e672c1ef92df0d9ec01ec0c7faea5d77d2303',
592
607
  'pod_id' => 'c76927af-f563-11e4-b32d-54ee7527188d',
@@ -628,8 +643,8 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
628
643
  'container_name' => 'fabric8-console-container',
629
644
  'container_image' => 'fabric8/hawtio-kubernetes:latest',
630
645
  'container_image_id' => 'docker://b2bd1a24a68356b2f30128e6e28e672c1ef92df0d9ec01ec0c7faea5d77d2303',
631
- 'namespace_id' => '898268c8-4a36-11e5-9d81-42010af0194c',
632
646
  'namespace_name' => 'default',
647
+ 'namespace_id' => '898268c8-4a36-11e5-9d81-42010af0194c',
633
648
  'pod_id' => 'c76927af-f563-11e4-b32d-54ee7527188d',
634
649
  'pod_ip' => '172.17.0.8',
635
650
  'master_url' => 'https://localhost:8443',
@@ -643,7 +658,7 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
643
658
  end
644
659
 
645
660
  test 'processes all events when reading from MessagePackEventStream' do
646
- VCR.use_cassettes([{ name: 'valid_kubernetes_api_server' },
661
+ VCR.use_cassettes([{ name: 'valid_kubernetes_api_server' },
647
662
  { name: 'kubernetes_get_api_v1' },
648
663
  { name: 'kubernetes_get_pod' },
649
664
  { name: 'kubernetes_get_namespace_default' }]) do
@@ -675,6 +690,9 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
675
690
  'container_image_id' => 'docker://b2bd1a24a68356b2f30128e6e28e672c1ef92df0d9ec01ec0c7faea5d77d2303',
676
691
  'namespace_name' => 'default',
677
692
  'namespace_id' => '898268c8-4a36-11e5-9d81-42010af0194c',
693
+ 'namespace_labels' => {
694
+ 'tenant' => 'test'
695
+ },
678
696
  'pod_id' => 'c76927af-f563-11e4-b32d-54ee7527188d',
679
697
  'pod_ip' => '172.17.0.8',
680
698
  'master_url' => 'https://localhost:8443',
@@ -718,5 +736,116 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
718
736
  assert_equal(expected_kube_metadata, filtered[0])
719
737
  end
720
738
  end
739
+
740
+ test 'with docker & kubernetes metadata using skip namespace labels config param' do
741
+ VCR.use_cassettes([{ name: 'valid_kubernetes_api_server' }, { name: 'kubernetes_get_api_v1' }, { name: 'kubernetes_get_pod' },
742
+ { name: 'kubernetes_get_namespace_default' }]) do
743
+ filtered = emit({}, '
744
+ kubernetes_url https://localhost:8443
745
+ watch false
746
+ cache_size 1
747
+ stats_interval 0
748
+ skip_namespace_labels true
749
+ skip_master_url true
750
+ ')
751
+ expected_kube_metadata = {
752
+ 'docker'=>{
753
+ 'container_id'=>'49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459'
754
+ },
755
+ 'kubernetes' => {
756
+ 'host' => 'jimmi-redhat.localnet',
757
+ 'pod_name' => 'fabric8-console-controller-98rqc',
758
+ 'container_name' => 'fabric8-console-container',
759
+ 'container_image' => 'fabric8/hawtio-kubernetes:latest',
760
+ 'container_image_id' => 'docker://b2bd1a24a68356b2f30128e6e28e672c1ef92df0d9ec01ec0c7faea5d77d2303',
761
+ 'namespace_name' => 'default',
762
+ "namespace_id"=>"898268c8-4a36-11e5-9d81-42010af0194c",
763
+ 'pod_id' => 'c76927af-f563-11e4-b32d-54ee7527188d',
764
+ 'pod_ip' => '172.17.0.8',
765
+ 'labels' => {
766
+ 'component' => 'fabric8Console'
767
+ }
768
+ }
769
+ }
770
+
771
+ assert_equal(expected_kube_metadata, filtered[0])
772
+ end
773
+ end
774
+ test 'with docker & kubernetes metadata using skip pod labels config param' do
775
+ VCR.use_cassettes([{ name: 'valid_kubernetes_api_server' }, { name: 'kubernetes_get_api_v1' }, { name: 'kubernetes_get_pod' },
776
+ { name: 'kubernetes_get_namespace_default' }]) do
777
+ filtered = emit({}, '
778
+ kubernetes_url https://localhost:8443
779
+ watch false
780
+ cache_size 1
781
+ stats_interval 0
782
+ skip_pod_labels true
783
+ skip_master_url true
784
+ ')
785
+ expected_kube_metadata = {
786
+ 'docker'=>{
787
+ 'container_id'=>'49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459'
788
+ },
789
+ 'kubernetes' => {
790
+ 'host' => 'jimmi-redhat.localnet',
791
+ 'pod_name' => 'fabric8-console-controller-98rqc',
792
+ 'container_name' => 'fabric8-console-container',
793
+ 'container_image' => 'fabric8/hawtio-kubernetes:latest',
794
+ 'container_image_id' => 'docker://b2bd1a24a68356b2f30128e6e28e672c1ef92df0d9ec01ec0c7faea5d77d2303',
795
+ 'namespace_name' => 'default',
796
+ "namespace_id"=>"898268c8-4a36-11e5-9d81-42010af0194c",
797
+ 'namespace_labels' => {
798
+ 'tenant' => 'test'
799
+ },
800
+ 'pod_id' => 'c76927af-f563-11e4-b32d-54ee7527188d',
801
+ 'pod_ip' => '172.17.0.8',
802
+ }
803
+ }
804
+
805
+ assert_equal(expected_kube_metadata, filtered[0])
806
+ end
807
+ end
808
+ test 'with docker & kubernetes metadata using include ownerrefs metadata' do
809
+ VCR.use_cassettes([{ name: 'valid_kubernetes_api_server' },
810
+ { name: 'kubernetes_get_api_v1' },
811
+ { name: 'kubernetes_get_pod_with_ownerrefs' },
812
+ { name: 'kubernetes_get_namespace_default' }]) do
813
+ filtered = emit({}, '
814
+ kubernetes_url https://localhost:8443
815
+ watch false
816
+ cache_size 1
817
+ stats_interval 0
818
+ skip_pod_labels true
819
+ skip_master_url true
820
+ include_ownerrefs_metadata true
821
+ ')
822
+ expected_kube_metadata = {
823
+ 'docker'=>{
824
+ 'container_id'=>'49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459'
825
+ },
826
+ 'kubernetes' => {
827
+ 'host' => 'jimmi-redhat.localnet',
828
+ 'pod_name' => 'fabric8-console-controller-98rqc',
829
+ 'container_name' => 'fabric8-console-container',
830
+ 'container_image' => 'fabric8/hawtio-kubernetes:latest',
831
+ 'container_image_id' => 'docker://b2bd1a24a68356b2f30128e6e28e672c1ef92df0d9ec01ec0c7faea5d77d2303',
832
+ 'namespace_name' => 'default',
833
+ "namespace_id"=>"898268c8-4a36-11e5-9d81-42010af0194c",
834
+ 'namespace_labels' => {
835
+ 'tenant' => 'test'
836
+ },
837
+ 'pod_id' => 'c76927af-f563-11e4-b32d-54ee7527188d',
838
+ 'pod_ip' => '172.17.0.8',
839
+ 'ownerrefs' => [{
840
+ 'kind' => 'ReplicaSet',
841
+ 'name' => 'fabric8-console-controller'
842
+ }]
843
+ }
844
+ }
845
+
846
+ assert_equal(expected_kube_metadata, filtered[0])
847
+ end
848
+ end
849
+
721
850
  end
722
851
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fluent-plugin-kubernetes_metadata_filter
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.2.0
4
+ version: 3.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - OpenShift Cluster Logging
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2023-04-13 00:00:00.000000000 Z
12
+ date: 2023-10-02 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: fluentd
@@ -259,6 +259,7 @@ files:
259
259
  - test/cassettes/kubernetes_get_pod.yml
260
260
  - test/cassettes/kubernetes_get_pod_container_init.yml
261
261
  - test/cassettes/kubernetes_get_pod_using_token.yml
262
+ - test/cassettes/kubernetes_get_pod_with_ownerrefs.yml
262
263
  - test/cassettes/metadata_from_tag_and_journald_fields.yml
263
264
  - test/cassettes/metadata_from_tag_journald_and_kubernetes_fields.yml
264
265
  - test/cassettes/valid_kubernetes_api_server.yml
@@ -290,7 +291,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
290
291
  - !ruby/object:Gem::Version
291
292
  version: '0'
292
293
  requirements: []
293
- rubygems_version: 3.1.6
294
+ rubygems_version: 3.3.3
294
295
  signing_key:
295
296
  specification_version: 4
296
297
  summary: Fluentd filter plugin to add Kubernetes metadata