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 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'