fluent-plugin-kubernetes_metadata_filter 2.1.6 → 2.2.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 +5 -5
- data/.circleci/config.yml +56 -0
- data/README.md +4 -1
- data/fluent-plugin-kubernetes_metadata_filter.gemspec +1 -2
- data/lib/fluent/plugin/filter_kubernetes_metadata.rb +5 -1
- data/lib/fluent/plugin/kubernetes_metadata_cache_strategy.rb +6 -1
- data/lib/fluent/plugin/kubernetes_metadata_common.rb +22 -12
- data/test/plugin/test_filter_kubernetes_metadata.rb +28 -0
- metadata +4 -4
- data/circle.yml +0 -17
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 5d86f8aaca3c3fffa77b39ea1bf73d5176ee518e
|
4
|
+
data.tar.gz: 681f0b65a2e7ff7b73bac23dc7e9f02fcb2f11de
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2f0f86f42ec6e6276f532d58d64c656608cae4290c26dd2f22c3365ff7787cc830b8ec60bacb418acf4e8c1fff7cb911dc972ccf55cf15e7ee49433b87117b9b
|
7
|
+
data.tar.gz: 48e27fc22bc59fdc929a5d9c8bbf833e77aaf1d5ad9d90d32bf1e451fe53adf01809a5f76bb3c2854b355064ce386830f30073b1b9340823419cfce851341fd0
|
@@ -0,0 +1,56 @@
|
|
1
|
+
version: 2.1
|
2
|
+
|
3
|
+
install: &install
|
4
|
+
name: Install bundle
|
5
|
+
command: bundle install --path vendor/bundle
|
6
|
+
|
7
|
+
missingdeps: &missingdeps
|
8
|
+
name: Install missing dependecies
|
9
|
+
command: |
|
10
|
+
cat /etc/os-release
|
11
|
+
printf "deb http://archive.debian.org/debian/ jessie main\ndeb-src http://archive.debian.org/debian/ jessie main\ndeb http://security.debian.org jessie/updates main\ndeb-src http://security.debian.org jessie/updates main" > /tmp/sources.list
|
12
|
+
sudo cp /tmp/sources.list /etc/apt/sources.list
|
13
|
+
sudo apt-get update
|
14
|
+
sudo apt-get install cmake libicu-dev libssl-dev
|
15
|
+
|
16
|
+
test: &test
|
17
|
+
name: Test bundle
|
18
|
+
command: bundle exec rake test
|
19
|
+
|
20
|
+
executors:
|
21
|
+
ruby-2-4:
|
22
|
+
docker:
|
23
|
+
- image: circleci/ruby:2.4.6
|
24
|
+
ruby-2-5:
|
25
|
+
docker:
|
26
|
+
- image: circleci/ruby:2.5.5
|
27
|
+
ruby-2-6:
|
28
|
+
docker:
|
29
|
+
- image: circleci/ruby:2.6.3
|
30
|
+
jobs:
|
31
|
+
"ruby-test":
|
32
|
+
parameters:
|
33
|
+
ruby-version:
|
34
|
+
type: executor
|
35
|
+
executor: << parameters.ruby-version >>
|
36
|
+
working_directory: ~/fluent-plugin-kubernetes_metadata_filter
|
37
|
+
steps:
|
38
|
+
- run: *missingdeps
|
39
|
+
- checkout
|
40
|
+
- run: *install
|
41
|
+
- run: *test
|
42
|
+
- store_test_results:
|
43
|
+
path: coverage
|
44
|
+
- store_artifacts:
|
45
|
+
path: coverage
|
46
|
+
|
47
|
+
workflows:
|
48
|
+
"test_multiple_ruby_versions":
|
49
|
+
jobs:
|
50
|
+
- ruby-test:
|
51
|
+
ruby-version: ruby-2-4
|
52
|
+
- ruby-test:
|
53
|
+
ruby-version: ruby-2-5
|
54
|
+
- ruby-test:
|
55
|
+
ruby-version: ruby-2-6
|
56
|
+
|
data/README.md
CHANGED
@@ -57,7 +57,10 @@ when true (default: `true`)
|
|
57
57
|
* `ssl_partial_chain` - if `ca_file` is for an intermediate CA, or otherwise we do not have the root CA and want
|
58
58
|
to trust the intermediate CA certs we do have, set this to `true` - this corresponds to
|
59
59
|
the `openssl s_client -partial_chain` flag and `X509_V_FLAG_PARTIAL_CHAIN` (default: `false`)
|
60
|
-
|
60
|
+
* `skip_labels` - Skip all label fields from the metadata.
|
61
|
+
* `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.
|
62
|
+
* `skip_master_url` - Skip the master_url field from the metadata.
|
63
|
+
* `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.
|
61
64
|
**NOTE:** As of the release 2.1.x of this plugin, it no longer supports parsing the source message into JSON and attaching it to the
|
62
65
|
payload. The following configuration options are removed:
|
63
66
|
|
@@ -4,7 +4,7 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
4
4
|
|
5
5
|
Gem::Specification.new do |gem|
|
6
6
|
gem.name = "fluent-plugin-kubernetes_metadata_filter"
|
7
|
-
gem.version = "2.
|
7
|
+
gem.version = "2.2.0"
|
8
8
|
gem.authors = ["Jimmi Dyson"]
|
9
9
|
gem.email = ["jimmidyson@gmail.com"]
|
10
10
|
gem.description = %q{Filter plugin to add Kubernetes metadata}
|
@@ -16,7 +16,6 @@ Gem::Specification.new do |gem|
|
|
16
16
|
gem.executables = gem.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
17
17
|
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
|
18
18
|
gem.require_paths = ["lib"]
|
19
|
-
gem.has_rdoc = false
|
20
19
|
|
21
20
|
gem.required_ruby_version = '>= 2.1.0'
|
22
21
|
|
@@ -76,6 +76,10 @@ module Fluent::Plugin
|
|
76
76
|
# to trust the intermediate CA certs we do have, set this to `true` - this corresponds to
|
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
|
+
config_param :skip_labels, :bool, default: false
|
80
|
+
config_param :skip_container_metadata, :bool, default: false
|
81
|
+
config_param :skip_master_url, :bool, default: false
|
82
|
+
config_param :skip_namespace_metadata, :bool, default: false
|
79
83
|
|
80
84
|
def fetch_pod_metadata(namespace_name, pod_name)
|
81
85
|
log.trace("fetching pod metadata: #{namespace_name}/#{pod_name}") if log.trace?
|
@@ -291,7 +295,7 @@ module Fluent::Plugin
|
|
291
295
|
if @kubernetes_url.present?
|
292
296
|
pod_metadata = get_pod_metadata(container_id, namespace_name, pod_name, create_time, batch_miss_cache)
|
293
297
|
|
294
|
-
if (pod_metadata.include? 'containers') && (pod_metadata['containers'].include? container_id)
|
298
|
+
if (pod_metadata.include? 'containers') && (pod_metadata['containers'].include? container_id) && !@skip_container_metadata
|
295
299
|
metadata['kubernetes']['container_image'] = pod_metadata['containers'][container_id]['image']
|
296
300
|
metadata['kubernetes']['container_image_id'] = pod_metadata['containers'][container_id]['image_id']
|
297
301
|
end
|
@@ -31,7 +31,7 @@ module KubernetesMetadata
|
|
31
31
|
end
|
32
32
|
metadata.merge!(@namespace_cache.fetch(ids[:namespace_id]) do
|
33
33
|
@stats.bump(:namespace_cache_miss)
|
34
|
-
m = fetch_namespace_metadata(namespace_name)
|
34
|
+
m = fetch_namespace_metadata(namespace_name) unless @skip_namespace_metadata
|
35
35
|
(m.nil? || m.empty?) ? {'namespace_id'=>ids[:namespace_id]} : m
|
36
36
|
end)
|
37
37
|
else
|
@@ -39,6 +39,11 @@ module KubernetesMetadata
|
|
39
39
|
@stats.bump(:id_cache_miss)
|
40
40
|
return batch_miss_cache["#{namespace_name}_#{pod_name}"] if batch_miss_cache.key?("#{namespace_name}_#{pod_name}")
|
41
41
|
pod_metadata = fetch_pod_metadata(namespace_name, pod_name)
|
42
|
+
if @skip_namespace_metadata
|
43
|
+
ids = { :pod_id=> pod_metadata['pod_id'] }
|
44
|
+
@id_cache[key] = ids
|
45
|
+
return pod_metadata
|
46
|
+
end
|
42
47
|
namespace_metadata = fetch_namespace_metadata(namespace_name)
|
43
48
|
ids = { :pod_id=> pod_metadata['pod_id'], :namespace_id => namespace_metadata['namespace_id'] }
|
44
49
|
if !ids[:pod_id].nil? && !ids[:namespace_id].nil?
|
@@ -32,10 +32,12 @@ module KubernetesMetadata
|
|
32
32
|
end
|
33
33
|
|
34
34
|
def parse_namespace_metadata(namespace_object)
|
35
|
-
labels =
|
35
|
+
labels = String.new
|
36
|
+
labels = syms_to_strs(namespace_object['metadata']['labels'].to_h) unless @skip_labels
|
37
|
+
|
36
38
|
annotations = match_annotations(syms_to_strs(namespace_object['metadata']['annotations'].to_h))
|
37
39
|
if @de_dot
|
38
|
-
self.de_dot!(labels)
|
40
|
+
self.de_dot!(labels) unless @skip_labels
|
39
41
|
self.de_dot!(annotations)
|
40
42
|
end
|
41
43
|
kubernetes_metadata = {
|
@@ -48,10 +50,12 @@ module KubernetesMetadata
|
|
48
50
|
end
|
49
51
|
|
50
52
|
def parse_pod_metadata(pod_object)
|
51
|
-
labels =
|
53
|
+
labels = String.new
|
54
|
+
labels = syms_to_strs(pod_object['metadata']['labels'].to_h) unless @skip_labels
|
55
|
+
|
52
56
|
annotations = match_annotations(syms_to_strs(pod_object['metadata']['annotations'].to_h))
|
53
57
|
if @de_dot
|
54
|
-
self.de_dot!(labels)
|
58
|
+
self.de_dot!(labels) unless @skip_labels
|
55
59
|
self.de_dot!(annotations)
|
56
60
|
end
|
57
61
|
|
@@ -61,11 +65,17 @@ module KubernetesMetadata
|
|
61
65
|
pod_object['status']['containerStatuses'].each do|container_status|
|
62
66
|
# get plain container id (eg. docker://hash -> hash)
|
63
67
|
container_id = container_status['containerID'].sub /^[-_a-zA-Z0-9]+:\/\//, ''
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
68
|
+
unless @skip_container_metadata
|
69
|
+
container_meta[container_id] = {
|
70
|
+
'name' => container_status['name'],
|
71
|
+
'image' => container_status['image'],
|
72
|
+
'image_id' => container_status['imageID']
|
73
|
+
}
|
74
|
+
else
|
75
|
+
container_meta[container_id] = {
|
76
|
+
'name' => container_status['name']
|
77
|
+
}
|
78
|
+
end
|
69
79
|
end
|
70
80
|
rescue
|
71
81
|
log.debug("parsing container meta information failed for: #{pod_object['metadata']['namespace']}/#{pod_object['metadata']['name']} ")
|
@@ -76,11 +86,11 @@ module KubernetesMetadata
|
|
76
86
|
'pod_id' => pod_object['metadata']['uid'],
|
77
87
|
'pod_name' => pod_object['metadata']['name'],
|
78
88
|
'containers' => syms_to_strs(container_meta),
|
79
|
-
'
|
80
|
-
'host' => pod_object['spec']['nodeName'],
|
81
|
-
'master_url' => @kubernetes_url
|
89
|
+
'host' => pod_object['spec']['nodeName']
|
82
90
|
}
|
83
91
|
kubernetes_metadata['annotations'] = annotations unless annotations.empty?
|
92
|
+
kubernetes_metadata['labels'] = labels unless labels.empty?
|
93
|
+
kubernetes_metadata['master_url'] = @kubernetes_url unless @skip_master_url
|
84
94
|
return kubernetes_metadata
|
85
95
|
end
|
86
96
|
|
@@ -938,5 +938,33 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
|
|
938
938
|
assert_equal(expected_kube_metadata, filtered[1])
|
939
939
|
end
|
940
940
|
end
|
941
|
+
|
942
|
+
test 'with docker & kubernetes metadata using skip config params' do
|
943
|
+
VCR.use_cassette('kubernetes_docker_metadata') do
|
944
|
+
filtered = emit({},'
|
945
|
+
kubernetes_url https://localhost:8443
|
946
|
+
watch false
|
947
|
+
cache_size 1
|
948
|
+
skip_labels true
|
949
|
+
skip_container_metadata true
|
950
|
+
skip_master_url true
|
951
|
+
skip_namespace_metadata true
|
952
|
+
')
|
953
|
+
expected_kube_metadata = {
|
954
|
+
'docker' => {
|
955
|
+
'container_id' => '49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459'
|
956
|
+
},
|
957
|
+
'kubernetes' => {
|
958
|
+
'host' => 'jimmi-redhat.localnet',
|
959
|
+
'pod_name' => 'fabric8-console-controller-98rqc',
|
960
|
+
'container_name' => 'fabric8-console-container',
|
961
|
+
'namespace_name' => 'default',
|
962
|
+
'pod_id' => 'c76927af-f563-11e4-b32d-54ee7527188d'
|
963
|
+
}
|
964
|
+
}
|
965
|
+
|
966
|
+
assert_equal(expected_kube_metadata, filtered[0])
|
967
|
+
end
|
968
|
+
end
|
941
969
|
end
|
942
970
|
end
|
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.
|
4
|
+
version: 2.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jimmi Dyson
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2019-06-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: fluentd
|
@@ -205,12 +205,12 @@ executables: []
|
|
205
205
|
extensions: []
|
206
206
|
extra_rdoc_files: []
|
207
207
|
files:
|
208
|
+
- ".circleci/config.yml"
|
208
209
|
- ".gitignore"
|
209
210
|
- Gemfile
|
210
211
|
- LICENSE.txt
|
211
212
|
- README.md
|
212
213
|
- Rakefile
|
213
|
-
- circle.yml
|
214
214
|
- fluent-plugin-kubernetes_metadata_filter.gemspec
|
215
215
|
- lib/fluent/plugin/filter_kubernetes_metadata.rb
|
216
216
|
- lib/fluent/plugin/kubernetes_metadata_cache_strategy.rb
|
@@ -256,7 +256,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
256
256
|
version: '0'
|
257
257
|
requirements: []
|
258
258
|
rubyforge_project:
|
259
|
-
rubygems_version: 2.
|
259
|
+
rubygems_version: 2.6.12
|
260
260
|
signing_key:
|
261
261
|
specification_version: 4
|
262
262
|
summary: Fluentd filter plugin to add Kubernetes metadata
|
data/circle.yml
DELETED
@@ -1,17 +0,0 @@
|
|
1
|
-
machine:
|
2
|
-
ruby:
|
3
|
-
version: 2.3.1
|
4
|
-
|
5
|
-
dependencies:
|
6
|
-
override:
|
7
|
-
- 'rvm-exec 2.1.9 bundle install'
|
8
|
-
- 'rvm-exec 2.2.5 bundle install'
|
9
|
-
- 'rvm-exec 2.3.1 bundle install'
|
10
|
-
- 'rvm-exec 2.4.3 bundle install'
|
11
|
-
|
12
|
-
test:
|
13
|
-
override:
|
14
|
-
- 'rvm-exec 2.1.9 bundle exec rake test'
|
15
|
-
- 'rvm-exec 2.2.5 bundle exec rake test'
|
16
|
-
- 'rvm-exec 2.3.1 bundle exec rake test'
|
17
|
-
- 'rvm-exec 2.4.3 bundle exec rake test'
|