fluent-plugin-kubernetes_metadata_filter 2.1.3 → 2.1.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/README.md +13 -1
- data/fluent-plugin-kubernetes_metadata_filter.gemspec +1 -1
- data/lib/fluent/plugin/filter_kubernetes_metadata.rb +64 -75
- data/test/cassettes/metadata_from_tag_and_journald_fields.yml +408 -0
- data/test/cassettes/metadata_from_tag_journald_and_kubernetes_fields.yml +540 -0
- data/test/plugin/test_filter_kubernetes_metadata.rb +135 -32
- metadata +7 -3
@@ -158,42 +158,13 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
|
|
158
158
|
d.filtered.map{|e| e.last}
|
159
159
|
end
|
160
160
|
|
161
|
-
test 'nil event stream
|
161
|
+
test 'nil event stream' do
|
162
162
|
#not certain how this is possible but adding test to properly
|
163
163
|
#guard against this condition we have seen - test for nil,
|
164
164
|
#empty, no empty method, not an event stream
|
165
165
|
plugin = create_driver.instance
|
166
|
-
|
167
|
-
|
168
|
-
end
|
169
|
-
# and make sure OneEventStream works
|
170
|
-
ts = Time.now()
|
171
|
-
rec = {"message"=>"hello"}
|
172
|
-
es = Fluent::OneEventStream.new(ts, rec)
|
173
|
-
newes = plugin.filter_stream_from_journal('tag', es)
|
174
|
-
newes.each do |newts, newrec|
|
175
|
-
assert_equal ts, newts
|
176
|
-
assert_equal rec, newrec
|
177
|
-
end
|
178
|
-
end
|
179
|
-
|
180
|
-
test 'nil event stream from files' do
|
181
|
-
#not certain how this is possible but adding test to properly
|
182
|
-
#guard against this condition we have seen
|
183
|
-
|
184
|
-
plugin = create_driver.instance
|
185
|
-
[nil, Fluent::MultiEventStream.new, 1, [1]].each do |es|
|
186
|
-
assert_equal es, plugin.filter_stream_from_files('tag', es)
|
187
|
-
end
|
188
|
-
# and make sure OneEventStream works
|
189
|
-
ts = Time.now()
|
190
|
-
rec = {"message"=>"hello"}
|
191
|
-
es = Fluent::OneEventStream.new(ts, rec)
|
192
|
-
newes = plugin.filter_stream_from_journal('tag', es)
|
193
|
-
newes.each do |newts, newrec|
|
194
|
-
assert_equal ts, newts
|
195
|
-
assert_equal rec, newrec
|
196
|
-
end
|
166
|
+
plugin.filter_stream('tag', nil)
|
167
|
+
plugin.filter_stream('tag', Fluent::MultiEventStream.new)
|
197
168
|
end
|
198
169
|
|
199
170
|
test 'inability to connect to the api server handles exception and doensnt block pipeline' do
|
@@ -608,6 +579,138 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
|
|
608
579
|
end
|
609
580
|
end
|
610
581
|
|
582
|
+
test 'with records from journald and docker & kubernetes metadata with use_journal unset' do
|
583
|
+
# with use_journal unset, should still use the journal fields instead of tag fields
|
584
|
+
tag = 'var.log.containers.fabric8-console-controller-98rqc_default_fabric8-console-container-49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459.log'
|
585
|
+
msg = {
|
586
|
+
'CONTAINER_NAME' => 'k8s_journald-container-name.db89db89_journald-pod-name_journald-namespace-name_c76927af-f563-11e4-b32d-54ee7527188d_89db89db',
|
587
|
+
'CONTAINER_ID_FULL' => '838350c64bacba968d39a30a50789b2795291fceca6ccbff55298671d46b0e3b',
|
588
|
+
'kubernetes' => {
|
589
|
+
'namespace_name' => 'k8s-namespace-name',
|
590
|
+
'pod_name' => 'k8s-pod-name',
|
591
|
+
'container_name' => 'k8s-container-name'
|
592
|
+
},
|
593
|
+
'docker' => {'container_id' => 'e463bc0d3ae38f5c89d92dca49b30e049e899799920b79d4d5f705acbe82ba95'},
|
594
|
+
'randomfield' => 'randomvalue'
|
595
|
+
}
|
596
|
+
VCR.use_cassette('metadata_from_tag_journald_and_kubernetes_fields') do
|
597
|
+
es = emit_with_tag(tag, msg, '
|
598
|
+
kubernetes_url https://localhost:8443
|
599
|
+
watch false
|
600
|
+
cache_size 1
|
601
|
+
')
|
602
|
+
expected_kube_metadata = {
|
603
|
+
'docker' => {
|
604
|
+
'container_id' => 'e463bc0d3ae38f5c89d92dca49b30e049e899799920b79d4d5f705acbe82ba95'
|
605
|
+
},
|
606
|
+
'kubernetes' => {
|
607
|
+
'host' => 'jimmi-redhat.localnet',
|
608
|
+
'pod_name' => 'k8s-pod-name',
|
609
|
+
'container_name' => 'k8s-container-name',
|
610
|
+
'container_image' => 'k8s-container-image:latest',
|
611
|
+
'container_image_id' => 'docker://d78c5217c41e9af08d37d9ae2cb070afa1fe3da6bc77bfb18879a8b4bfdf8a34',
|
612
|
+
'namespace_name' => 'k8s-namespace-name',
|
613
|
+
'namespace_id' => '8e0dc8fc-59f2-49f7-a3e2-ed0913e19d9f',
|
614
|
+
'pod_id' => 'ebabf749-5fcd-4750-a3f0-aedd89476da8',
|
615
|
+
'master_url' => 'https://localhost:8443',
|
616
|
+
'labels' => {
|
617
|
+
'component' => 'k8s-test'
|
618
|
+
}
|
619
|
+
}
|
620
|
+
}.merge(msg) {|key,oldval,newval| ((key == 'kubernetes') || (key == 'docker')) ? oldval : newval}
|
621
|
+
assert_equal(expected_kube_metadata, es[0])
|
622
|
+
end
|
623
|
+
end
|
624
|
+
|
625
|
+
test 'with records from journald and docker & kubernetes metadata with lookup_from_k8s_field false' do
|
626
|
+
# with use_journal unset, should still use the journal fields instead of tag fields
|
627
|
+
tag = 'var.log.containers.fabric8-console-controller-98rqc_default_fabric8-console-container-49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459.log'
|
628
|
+
msg = {
|
629
|
+
'CONTAINER_NAME' => 'k8s_journald-container-name.db89db89_journald-pod-name_journald-namespace-name_c76927af-f563-11e4-b32d-54ee7527188d_89db89db',
|
630
|
+
'CONTAINER_ID_FULL' => '838350c64bacba968d39a30a50789b2795291fceca6ccbff55298671d46b0e3b',
|
631
|
+
'kubernetes' => {
|
632
|
+
'namespace_name' => 'k8s-namespace-name',
|
633
|
+
'pod_name' => 'k8s-pod-name',
|
634
|
+
'container_name' => 'k8s-container-name'
|
635
|
+
},
|
636
|
+
'docker' => {'container_id' => 'e463bc0d3ae38f5c89d92dca49b30e049e899799920b79d4d5f705acbe82ba95'},
|
637
|
+
'randomfield' => 'randomvalue'
|
638
|
+
}
|
639
|
+
VCR.use_cassette('metadata_from_tag_and_journald_fields') do
|
640
|
+
es = emit_with_tag(tag, msg, '
|
641
|
+
kubernetes_url https://localhost:8443
|
642
|
+
watch false
|
643
|
+
cache_size 1
|
644
|
+
lookup_from_k8s_field false
|
645
|
+
')
|
646
|
+
expected_kube_metadata = {
|
647
|
+
'docker' => {
|
648
|
+
'container_id' => '838350c64bacba968d39a30a50789b2795291fceca6ccbff55298671d46b0e3b'
|
649
|
+
},
|
650
|
+
'kubernetes' => {
|
651
|
+
'host' => 'jimmi-redhat.localnet',
|
652
|
+
'pod_name' => 'journald-pod-name',
|
653
|
+
'container_name' => 'journald-container-name',
|
654
|
+
'container_image' => 'journald-container-image:latest',
|
655
|
+
'container_image_id' => 'docker://dda4c95705fb7050b701b10a7fe928ca5bc971a1dcb521ae3c339194cbf36b47',
|
656
|
+
'namespace_name' => 'journald-namespace-name',
|
657
|
+
'namespace_id' => '8282888f-733f-4f23-a3d3-1fdfa3bdacf2',
|
658
|
+
'pod_id' => '5e1c1e27-b637-4e81-80b6-6d8a8c404d3b',
|
659
|
+
'master_url' => 'https://localhost:8443',
|
660
|
+
'labels' => {
|
661
|
+
'component' => 'journald-test'
|
662
|
+
}
|
663
|
+
}
|
664
|
+
}.merge(msg) {|key,oldval,newval| ((key == 'kubernetes') || (key == 'docker')) ? oldval : newval}
|
665
|
+
assert_equal(expected_kube_metadata, es[0])
|
666
|
+
end
|
667
|
+
end
|
668
|
+
|
669
|
+
test 'uses metadata from tag if use_journal false and lookup_from_k8s_field false' do
|
670
|
+
# with use_journal unset, should still use the journal fields instead of tag fields
|
671
|
+
tag = 'var.log.containers.fabric8-console-controller-98rqc_default_fabric8-console-container-49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459.log'
|
672
|
+
msg = {
|
673
|
+
'CONTAINER_NAME' => 'k8s_journald-container-name.db89db89_journald-pod-name_journald-namespace-name_c76927af-f563-11e4-b32d-54ee7527188d_89db89db',
|
674
|
+
'CONTAINER_ID_FULL' => '838350c64bacba968d39a30a50789b2795291fceca6ccbff55298671d46b0e3b',
|
675
|
+
'kubernetes' => {
|
676
|
+
'namespace_name' => 'k8s-namespace-name',
|
677
|
+
'pod_name' => 'k8s-pod-name',
|
678
|
+
'container_name' => 'k8s-container-name'
|
679
|
+
},
|
680
|
+
'docker' => {'container_id' => 'e463bc0d3ae38f5c89d92dca49b30e049e899799920b79d4d5f705acbe82ba95'},
|
681
|
+
'randomfield' => 'randomvalue'
|
682
|
+
}
|
683
|
+
VCR.use_cassette('metadata_from_tag_and_journald_fields') do
|
684
|
+
es = emit_with_tag(tag, msg, '
|
685
|
+
kubernetes_url https://localhost:8443
|
686
|
+
watch false
|
687
|
+
cache_size 1
|
688
|
+
lookup_from_k8s_field false
|
689
|
+
use_journal false
|
690
|
+
')
|
691
|
+
expected_kube_metadata = {
|
692
|
+
'docker' => {
|
693
|
+
'container_id' => '49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459'
|
694
|
+
},
|
695
|
+
'kubernetes' => {
|
696
|
+
'host' => 'jimmi-redhat.localnet',
|
697
|
+
'pod_name' => 'fabric8-console-controller-98rqc',
|
698
|
+
'container_name' => 'fabric8-console-container',
|
699
|
+
'container_image' => 'fabric8/hawtio-kubernetes:latest',
|
700
|
+
'container_image_id' => 'docker://b2bd1a24a68356b2f30128e6e28e672c1ef92df0d9ec01ec0c7faea5d77d2303',
|
701
|
+
'namespace_name' => 'default',
|
702
|
+
'namespace_id' => '898268c8-4a36-11e5-9d81-42010af0194c',
|
703
|
+
'pod_id' => 'c76927af-f563-11e4-b32d-54ee7527188d',
|
704
|
+
'master_url' => 'https://localhost:8443',
|
705
|
+
'labels' => {
|
706
|
+
'component' => 'fabric8Console'
|
707
|
+
}
|
708
|
+
}
|
709
|
+
}.merge(msg) {|key,oldval,newval| ((key == 'kubernetes') || (key == 'docker')) ? oldval : newval}
|
710
|
+
assert_equal(expected_kube_metadata, es[0])
|
711
|
+
end
|
712
|
+
end
|
713
|
+
|
611
714
|
test 'with kubernetes annotations' do
|
612
715
|
VCR.use_cassette('kubernetes_docker_metadata_annotations') do
|
613
716
|
filtered = emit({},'
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fluent-plugin-kubernetes_metadata_filter
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.1.
|
4
|
+
version: 2.1.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jimmi Dyson
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-
|
11
|
+
date: 2018-10-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: fluentd
|
@@ -223,6 +223,8 @@ files:
|
|
223
223
|
- test/cassettes/kubernetes_docker_metadata_annotations.yml
|
224
224
|
- test/cassettes/kubernetes_docker_metadata_dotted_labels.yml
|
225
225
|
- test/cassettes/kubernetes_docker_metadata_using_bearer_token.yml
|
226
|
+
- test/cassettes/metadata_from_tag_and_journald_fields.yml
|
227
|
+
- test/cassettes/metadata_from_tag_journald_and_kubernetes_fields.yml
|
226
228
|
- test/cassettes/metadata_with_namespace_id.yml
|
227
229
|
- test/cassettes/non_kubernetes_docker_metadata.yml
|
228
230
|
- test/cassettes/valid_kubernetes_api_server.yml
|
@@ -254,7 +256,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
254
256
|
version: '0'
|
255
257
|
requirements: []
|
256
258
|
rubyforge_project:
|
257
|
-
rubygems_version: 2.6
|
259
|
+
rubygems_version: 2.7.6
|
258
260
|
signing_key:
|
259
261
|
specification_version: 4
|
260
262
|
summary: Fluentd filter plugin to add Kubernetes metadata
|
@@ -264,6 +266,8 @@ test_files:
|
|
264
266
|
- test/cassettes/kubernetes_docker_metadata_annotations.yml
|
265
267
|
- test/cassettes/kubernetes_docker_metadata_dotted_labels.yml
|
266
268
|
- test/cassettes/kubernetes_docker_metadata_using_bearer_token.yml
|
269
|
+
- test/cassettes/metadata_from_tag_and_journald_fields.yml
|
270
|
+
- test/cassettes/metadata_from_tag_journald_and_kubernetes_fields.yml
|
267
271
|
- test/cassettes/metadata_with_namespace_id.yml
|
268
272
|
- test/cassettes/non_kubernetes_docker_metadata.yml
|
269
273
|
- test/cassettes/valid_kubernetes_api_server.yml
|