fluent-plugin-kubernetes_metadata_filter 2.1.3 → 2.1.4
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 +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
|