fluent-plugin-rancher 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,101 @@
1
+
2
+
3
+ #
4
+ # Fluentd Kubernetes Output Plugin - Enrich Fluentd events with Kubernetes
5
+ # metadata
6
+ #
7
+ # Copyright 2015 Red Hat, Inc.
8
+ #
9
+ # Licensed under the Apache License, Version 2.0 (the "License");
10
+ # you may not use this file except in compliance with the License.
11
+ # You may obtain a copy of the License at
12
+ #
13
+ # http://www.apache.org/licenses/LICENSE-2.0
14
+ #
15
+ # Unless required by applicable law or agreed to in writing, software
16
+ # distributed under the License is distributed on an "AS IS" BASIS,
17
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18
+ # See the License for the specific language governing permissions and
19
+ # limitations under the License.
20
+ #
21
+ ---
22
+ http_interactions:
23
+ - request:
24
+ method: get
25
+ uri: "<DOCKER_HOST>/v1.16/containers/9b26b527e73550b1fb217d0d643b15aa2ec6607593a6b477cda82a9c72cb82a7/json"
26
+ body:
27
+ encoding: US-ASCII
28
+ string: ''
29
+ headers:
30
+ User-Agent:
31
+ - Swipely/Docker-API 1.20.0
32
+ Content-Type:
33
+ - text/plain
34
+ response:
35
+ status:
36
+ code: 200
37
+ message:
38
+ headers:
39
+ Content-Type:
40
+ - application/json
41
+ Date:
42
+ - Mon, 09 Mar 2015 11:43:55 GMT
43
+ body:
44
+ encoding: UTF-8
45
+ string: |
46
+ {"Id": "9b26b527e73550b1fb217d0d643b15aa2ec6607593a6b477cda82a9c72cb82a7","Name":"6f323098-639c-4376-bc5a-4fea24818278", "Config":{"Labels":{"io.rancher.project.name":"NAMESPACE","io.rancher.project_service.name":"SERVICE/CONTAINER"}}}
47
+ http_version:
48
+ recorded_at: Mon, 09 Mar 2015 11:43:55 GMT
49
+ - request:
50
+ method: get
51
+ uri: "<DOCKER_HOST>/v1.16/containers/9b26b527e73550b1fb217d0d643b15aa2ec6607593a6b477cda82a9c72cb82a7/json"
52
+ body:
53
+ encoding: US-ASCII
54
+ string: ''
55
+ headers:
56
+ User-Agent:
57
+ - Swipely/Docker-API 1.20.0
58
+ Content-Type:
59
+ - text/plain
60
+ response:
61
+ status:
62
+ code: 200
63
+ message:
64
+ headers:
65
+ Content-Type:
66
+ - application/json
67
+ Date:
68
+ - Mon, 09 Mar 2015 11:43:55 GMT
69
+ body:
70
+ encoding: UTF-8
71
+ string: |
72
+ {"Id": "9b26b527e73550b1fb217d0d643b15aa2ec6607593a6b477cda82a9c72cb82a7","Name":"6f323098-639c-4376-bc5a-4fea24818278", "Config":{"Labels":{"io.rancher.project.name":"NAMESPACE","io.rancher.project_service.name":"SERVICE/SUB/CONTAINER"}}}
73
+ http_version:
74
+ recorded_at: Mon, 09 Mar 2015 11:43:55 GMT
75
+ - request:
76
+ method: get
77
+ uri: "<DOCKER_HOST>/v1.16/containers/9b26b527e73550b1fb217d0d643b15aa2ec6607593a6b477cda82a9c72cb82a7/json"
78
+ body:
79
+ encoding: US-ASCII
80
+ string: ''
81
+ headers:
82
+ User-Agent:
83
+ - Swipely/Docker-API 1.20.0
84
+ Content-Type:
85
+ - text/plain
86
+ response:
87
+ status:
88
+ code: 200
89
+ message:
90
+ headers:
91
+ Content-Type:
92
+ - application/json
93
+ Date:
94
+ - Mon, 09 Mar 2015 11:43:55 GMT
95
+ body:
96
+ encoding: UTF-8
97
+ string: |
98
+ {"Id": "9b26b527e73550b1fb217d0d643b15aa2ec6607593a6b477cda82a9c72cb82a7","Name":"6f323098-639c-4376-bc5a-4fea24818278", "Config":{"Labels":{"io.rancher.project.name":"NAMESPACE","io.rancher.project_service.name":"SERVICE/CONTAINER"}}}
99
+ http_version:
100
+ recorded_at: Mon, 09 Mar 2015 11:43:55 GMT
101
+ recorded_with: VCR 2.9.3
data/test/helper.rb ADDED
@@ -0,0 +1,82 @@
1
+ #
2
+ # Fluentd Kubernetes Output Plugin - Enrich Fluentd events with Kubernetes
3
+ # metadata
4
+ #
5
+ # Copyright 2015 Red Hat, Inc.
6
+ #
7
+ # Licensed under the Apache License, Version 2.0 (the "License");
8
+ # you may not use this file except in compliance with the License.
9
+ # You may obtain a copy of the License at
10
+ #
11
+ # http://www.apache.org/licenses/LICENSE-2.0
12
+ #
13
+ # Unless required by applicable law or agreed to in writing, software
14
+ # distributed under the License is distributed on an "AS IS" BASIS,
15
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
+ # See the License for the specific language governing permissions and
17
+ # limitations under the License.
18
+ #
19
+ require "simplecov"
20
+ require "codeclimate-test-reporter"
21
+ if ENV['CIRCLE_ARTIFACTS']
22
+ dir = File.join("..", "..", "..", ENV['CIRCLE_ARTIFACTS'], "coverage")
23
+ SimpleCov.coverage_dir(dir)
24
+ end
25
+
26
+ SimpleCov.add_filter 'vendor'
27
+
28
+ SimpleCov.start do
29
+ formatter SimpleCov::Formatter::MultiFormatter[
30
+ SimpleCov::Formatter::HTMLFormatter,
31
+ CodeClimate::TestReporter::Formatter
32
+ ]
33
+ end
34
+
35
+ begin
36
+ require "bundler"
37
+ rescue LoadError => e
38
+ STDERR.puts e.message
39
+ STDERR.puts "Run `gem install bundler` to install Bundler."
40
+ exit e.status_code
41
+ end
42
+
43
+ begin
44
+ Bundler.setup(:default, :development)
45
+ rescue Bundler::BundlerError => e
46
+ $stderr.puts e.message
47
+ $stderr.puts "Run `bundle install` to install missing gems"
48
+ exit e.status_code
49
+ end
50
+
51
+ require 'minitest/spec'
52
+ require 'minitest/autorun'
53
+ require 'minitest/benchmark'
54
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
55
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
56
+ require 'fluent/test'
57
+ unless ENV.has_key?('VERBOSE')
58
+ nulllogger = Object.new
59
+ nulllogger.instance_eval {|obj|
60
+ def method_missing(method, *args)
61
+ # pass
62
+ end
63
+ }
64
+ $log = nulllogger
65
+ end
66
+
67
+ require "minispec-metadata"
68
+ require "vcr"
69
+ require "minitest-vcr"
70
+ require "webmock"
71
+
72
+ VCR.configure do |c|
73
+ c.cassette_library_dir = 'test/cassettes'
74
+ c.hook_into :excon, :webmock
75
+ c.filter_sensitive_data('<DOCKER_HOST>') { Docker.url.sub(/tcp\:/, 'https:') }
76
+ c.ignore_hosts 'codeclimate.com'
77
+ end
78
+
79
+ MinitestVcr::Spec.configure!
80
+
81
+ require 'fluent/plugin/out_rancher'
82
+
@@ -0,0 +1,101 @@
1
+ #
2
+ # Fluentd Kubernetes Output Plugin - Enrich Fluentd events with Kubernetes
3
+ # metadata
4
+ #
5
+ # Copyright 2015 Red Hat, Inc.
6
+ #
7
+ # Licensed under the Apache License, Version 2.0 (the "License");
8
+ # you may not use this file except in compliance with the License.
9
+ # You may obtain a copy of the License at
10
+ #
11
+ # http://www.apache.org/licenses/LICENSE-2.0
12
+ #
13
+ # Unless required by applicable law or agreed to in writing, software
14
+ # distributed under the License is distributed on an "AS IS" BASIS,
15
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
+ # See the License for the specific language governing permissions and
17
+ # limitations under the License.
18
+ #
19
+ require 'helper'
20
+
21
+ describe 'Fluentd Kubernetes Output Plugin' do
22
+
23
+ CONFIG = %{
24
+ container_id ${tag_parts[5]}
25
+ tag docker.${name}
26
+ }
27
+
28
+ before do
29
+ Fluent::Test.setup
30
+ @fluentd_driver = Fluent::Test::OutputTestDriver.new(
31
+ Fluent::RancherOutput,
32
+ 'docker.var.lib.docker.containers.9b26b527e73550b1fb217d0d643b15aa2ec6607593a6b477cda82a9c72cb82a7')
33
+ .configure(CONFIG)
34
+ end
35
+
36
+ describe 'add kubernetes metadata', vcr: {record: :once} do
37
+ describe 'kubernetes container' do
38
+ it 'enriches with correct kubernets metadata' do
39
+ @fluentd_driver.run do
40
+ @fluentd_driver.emit("container_name" => "k8s_CONTAINER.ff8e9ce_POD.NAMESPACE.api_2b249189-c3e0-11e4-839d-54ee7527188d_c306d8a8")
41
+ end
42
+ mapped = {'container_id' => '9b26b527e73550b1fb217d0d643b15aa2ec6607593a6b477cda82a9c72cb82a7', 'project' => 'NAMESPACE', 'service' => 'POD', 'container' => 'CONTAINER'}
43
+ assert_equal [
44
+ {"container_name" => "k8s_CONTAINER.ff8e9ce_POD.NAMESPACE.api_2b249189-c3e0-11e4-839d-54ee7527188d_c306d8a8"}.merge(mapped),
45
+ ], @fluentd_driver.records
46
+
47
+ @fluentd_driver.run
48
+ end
49
+ end
50
+ describe 'rancher container' do
51
+ it 'enriches with correct rancher metadata' do
52
+ @fluentd_driver.run do
53
+ @fluentd_driver.emit("container_name" => "6f323098-639c-4376-bc5a-4fea24818278")
54
+ end
55
+ mapped = {'container_id' => '9b26b527e73550b1fb217d0d643b15aa2ec6607593a6b477cda82a9c72cb82a7', 'project' => 'NAMESPACE', 'service' => 'SERVICE', 'container' => 'CONTAINER'}
56
+ assert_equal [
57
+ {"container_name" => "6f323098-639c-4376-bc5a-4fea24818278"}.merge(mapped),
58
+ ], @fluentd_driver.records
59
+
60
+ @fluentd_driver.run
61
+ end
62
+ end
63
+ describe 'non-kubernetes container' do
64
+ it 'leaves event untouched' do
65
+ @fluentd_driver.run do
66
+ @fluentd_driver.emit("container_name" => "/non-kubernetes")
67
+ end
68
+ assert_equal [
69
+ {'container_id' => '9b26b527e73550b1fb217d0d643b15aa2ec6607593a6b477cda82a9c72cb82a7', "container_name" => "non-kubernetes"},
70
+ ], @fluentd_driver.records
71
+
72
+ @fluentd_driver.run
73
+ end
74
+ end
75
+ describe 'container name not starting with slash' do
76
+ it 'uses full container name' do
77
+ @fluentd_driver.run do
78
+ @fluentd_driver.emit("container_name" => "no-leading-slash")
79
+ end
80
+ assert_equal [
81
+ {'container_id' => '9b26b527e73550b1fb217d0d643b15aa2ec6607593a6b477cda82a9c72cb82a7', "container_name" => "no-leading-slash"},
82
+ ], @fluentd_driver.records
83
+
84
+ @fluentd_driver.run
85
+ end
86
+ end
87
+ describe 'json log data' do
88
+ it 'merges json log data' do
89
+ @fluentd_driver.run do
90
+ @fluentd_driver.emit({"container_name" => "non-kubernetes", "log" => "{\"this\":\"rocks\"}"})
91
+ end
92
+ assert_equal [
93
+ {'container_id' => '9b26b527e73550b1fb217d0d643b15aa2ec6607593a6b477cda82a9c72cb82a7', "container_name" => "non-kubernetes", "this" => "rocks"},
94
+ ], @fluentd_driver.records
95
+
96
+ @fluentd_driver.run
97
+ end
98
+ end
99
+ end
100
+
101
+ end
metadata ADDED
@@ -0,0 +1,180 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: fluent-plugin-rancher
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - BinZhao
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-12-09 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.3'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.3'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: minitest
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '4.0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '4.0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: copyright-header
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: minitest-vcr
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: webmock
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: fluentd
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :runtime
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: docker-api
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ">="
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :runtime
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
125
+ description: Output filter plugin to add rancher metadata
126
+ email:
127
+ - jimmidyson@gmail.com
128
+ executables: []
129
+ extensions: []
130
+ extra_rdoc_files: []
131
+ files:
132
+ - ".gitignore"
133
+ - Gemfile
134
+ - LICENSE.txt
135
+ - README.md
136
+ - Rakefile
137
+ - circle.yml
138
+ - fluent-plugin-rancher.gemspec
139
+ - lib/fluent/plugin/out_rancher.rb
140
+ - test/cassettes/Fluentd_Kubernetes_Output_Plugin/add_kubernetes_metadata/container_name_not_starting_with_slash/uses_full_container_name.yml
141
+ - test/cassettes/Fluentd_Kubernetes_Output_Plugin/add_kubernetes_metadata/json_log_data/merges_json_log_data.yml
142
+ - test/cassettes/Fluentd_Kubernetes_Output_Plugin/add_kubernetes_metadata/kubernetes_container/enriches_with_correct_kubernets_metadata.yml
143
+ - test/cassettes/Fluentd_Kubernetes_Output_Plugin/add_kubernetes_metadata/non-kubernetes_container/leaves_event_untouched.yml
144
+ - test/cassettes/Fluentd_Kubernetes_Output_Plugin/add_kubernetes_metadata/rancher_container/enriches_with_correct_kubernets_metadata.yml
145
+ - test/cassettes/Fluentd_Kubernetes_Output_Plugin/add_kubernetes_metadata/rancher_container/enriches_with_correct_rancher_metadata.yml
146
+ - test/helper.rb
147
+ - test/plugin/test_out_rancher.rb
148
+ homepage: https://github.com/we87/fluent-plugin-rancher
149
+ licenses:
150
+ - ASL2
151
+ metadata: {}
152
+ post_install_message:
153
+ rdoc_options: []
154
+ require_paths:
155
+ - lib
156
+ required_ruby_version: !ruby/object:Gem::Requirement
157
+ requirements:
158
+ - - ">="
159
+ - !ruby/object:Gem::Version
160
+ version: '0'
161
+ required_rubygems_version: !ruby/object:Gem::Requirement
162
+ requirements:
163
+ - - ">="
164
+ - !ruby/object:Gem::Version
165
+ version: '0'
166
+ requirements: []
167
+ rubyforge_project:
168
+ rubygems_version: 2.4.5.1
169
+ signing_key:
170
+ specification_version: 4
171
+ summary: Output filter plugin to add rancher metadata
172
+ test_files:
173
+ - test/cassettes/Fluentd_Kubernetes_Output_Plugin/add_kubernetes_metadata/container_name_not_starting_with_slash/uses_full_container_name.yml
174
+ - test/cassettes/Fluentd_Kubernetes_Output_Plugin/add_kubernetes_metadata/json_log_data/merges_json_log_data.yml
175
+ - test/cassettes/Fluentd_Kubernetes_Output_Plugin/add_kubernetes_metadata/kubernetes_container/enriches_with_correct_kubernets_metadata.yml
176
+ - test/cassettes/Fluentd_Kubernetes_Output_Plugin/add_kubernetes_metadata/non-kubernetes_container/leaves_event_untouched.yml
177
+ - test/cassettes/Fluentd_Kubernetes_Output_Plugin/add_kubernetes_metadata/rancher_container/enriches_with_correct_kubernets_metadata.yml
178
+ - test/cassettes/Fluentd_Kubernetes_Output_Plugin/add_kubernetes_metadata/rancher_container/enriches_with_correct_rancher_metadata.yml
179
+ - test/helper.rb
180
+ - test/plugin/test_out_rancher.rb