fluent-plugin-kubernetes_metadata_filter 3.2.0 → 3.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/Gemfile.lock +9 -9
- data/README.md +2 -0
- data/fluent-plugin-kubernetes_metadata_filter.gemspec +1 -1
- data/lib/fluent/plugin/filter_kubernetes_metadata.rb +4 -2
- data/lib/fluent/plugin/kubernetes_metadata_common.rb +2 -2
- data/test/cassettes/kubernetes_get_namespace_default.yml +4 -1
- data/test/plugin/test_filter_kubernetes_metadata.rb +92 -4
- 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: 1425638a4efbcc9ed55bee88eb1563ba071c6d7afc9ca0b9f556a4528bfb6f05
|
4
|
+
data.tar.gz: 531e074b6271d05fade448979dc11cd7d2d075bd2941587cb2341fd8e3f7076f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 78aca0f62942579b5c1be309857a920ee623ff71903e9d00cc6415b7b8dcc37e7a23d4be8baa024c54959963fb4c356a352e42229c08b7257bd65281bf987faf
|
7
|
+
data.tar.gz: 5dda7ace28a80bf02c28ac7f2dc016ad83f056e1d85c95bc6b599554d8ef9145dc4643c490776ce7deaf1f8e968caa720cf024a27236e45cd844cbd88538d661
|
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
fluent-plugin-kubernetes_metadata_filter (3.
|
4
|
+
fluent-plugin-kubernetes_metadata_filter (3.3.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.
|
20
|
+
cool.io (1.8.0)
|
21
21
|
copyright-header (1.0.22)
|
22
22
|
github-linguist
|
23
23
|
crack (0.4.5)
|
@@ -30,13 +30,13 @@ GEM
|
|
30
30
|
ffi-compiler (1.0.1)
|
31
31
|
ffi (>= 1.0.0)
|
32
32
|
rake
|
33
|
-
fluentd (1.16.
|
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.
|
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.
|
61
|
+
jsonpath (1.1.3)
|
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.
|
72
|
+
mime-types (3.5.0)
|
73
73
|
mime-types-data (~> 3.2015)
|
74
|
-
mime-types-data (3.2023.
|
74
|
+
mime-types-data (3.2023.0808)
|
75
75
|
mini_mime (1.1.2)
|
76
76
|
minitest (4.7.5)
|
77
|
-
msgpack (1.7.
|
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.
|
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.
|
@@ -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.
|
8
|
+
gem.version = '3.3.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,6 +77,8 @@ 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
|
@@ -198,7 +200,7 @@ module Fluent::Plugin
|
|
198
200
|
@namespace_cache = LruRedux::TTL::ThreadSafeCache.new(@cache_size, @cache_ttl)
|
199
201
|
|
200
202
|
@tag_to_kubernetes_name_regexp_compiled = Regexp.compile(@tag_to_kubernetes_name_regexp)
|
201
|
-
|
203
|
+
|
202
204
|
# Use Kubernetes default service account if we're in a pod.
|
203
205
|
if @kubernetes_url.nil?
|
204
206
|
log.debug 'Kubernetes URL is not set - inspecting environ'
|
@@ -351,7 +353,7 @@ module Fluent::Plugin
|
|
351
353
|
tag_match_data['pod_uuid']
|
352
354
|
else
|
353
355
|
tag_match_data['docker_id']
|
354
|
-
end
|
356
|
+
end
|
355
357
|
docker_id = tag_match_data.names.include?('docker_id') ? tag_match_data['docker_id'] : nil
|
356
358
|
metadata = get_metadata_for_record(tag_match_data['namespace'], tag_match_data['pod_name'], tag_match_data['container_name'],
|
357
359
|
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
|
|
@@ -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": [
|
@@ -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,75 @@ 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
|
+
|
721
809
|
end
|
722
810
|
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.
|
4
|
+
version: 3.3.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-
|
12
|
+
date: 2023-08-14 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: fluentd
|