fluent-plugin-kubernetes_metadata_filter 2.1.6 → 2.2.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
- SHA256:
3
- metadata.gz: 4a83bf6d7f3f2f80e380d89a9aa78024c706a4312b971d8d53ffe79a67bdb322
4
- data.tar.gz: 241adc577d1c9eb2bdb97ef2a7d7ef6511cbbe836e15b91301f04657e4345feb
2
+ SHA1:
3
+ metadata.gz: 5d86f8aaca3c3fffa77b39ea1bf73d5176ee518e
4
+ data.tar.gz: 681f0b65a2e7ff7b73bac23dc7e9f02fcb2f11de
5
5
  SHA512:
6
- metadata.gz: 2e3923244e262befe237d2f35cc8f54788558e22ff53cec53bd4edd044931ea35682bee853eda5775254df44026cfdedd16bda247aee2b2f443b1cb73e853514
7
- data.tar.gz: bda740f2a37e0a2510277b84c32e469360b8652327d47b994b464942ab17e246b6eda6f16ad43c4b65b806b8928188886524684ae37199abf9cd58edab84445b
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.1.6"
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 = syms_to_strs(namespace_object['metadata']['labels'].to_h)
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 = syms_to_strs(pod_object['metadata']['labels'].to_h)
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
- container_meta[container_id] = {
65
- 'name' => container_status['name'],
66
- 'image' => container_status['image'],
67
- 'image_id' => container_status['imageID']
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
- 'labels' => labels,
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.1.6
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: 2018-12-12 00:00:00.000000000 Z
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.7.6
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'