logstash-output-amazon_es 2.0.1-java → 6.4.0-java

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.
Files changed (35) hide show
  1. checksums.yaml +5 -5
  2. data/CONTRIBUTORS +12 -0
  3. data/Gemfile +8 -0
  4. data/LICENSE +10 -199
  5. data/README.md +34 -65
  6. data/lib/logstash/outputs/amazon_es.rb +218 -423
  7. data/lib/logstash/outputs/amazon_es/common.rb +347 -0
  8. data/lib/logstash/outputs/amazon_es/common_configs.rb +141 -0
  9. data/lib/logstash/outputs/amazon_es/elasticsearch-template-es2x.json +95 -0
  10. data/lib/logstash/outputs/amazon_es/elasticsearch-template-es5x.json +46 -0
  11. data/lib/logstash/outputs/amazon_es/elasticsearch-template-es6x.json +45 -0
  12. data/lib/logstash/outputs/amazon_es/elasticsearch-template-es7x.json +46 -0
  13. data/lib/logstash/outputs/amazon_es/http_client.rb +359 -74
  14. data/lib/logstash/outputs/amazon_es/http_client/manticore_adapter.rb +169 -0
  15. data/lib/logstash/outputs/amazon_es/http_client/pool.rb +457 -0
  16. data/lib/logstash/outputs/amazon_es/http_client_builder.rb +164 -0
  17. data/lib/logstash/outputs/amazon_es/template_manager.rb +36 -0
  18. data/logstash-output-amazon_es.gemspec +13 -22
  19. data/spec/es_spec_helper.rb +37 -0
  20. data/spec/unit/http_client_builder_spec.rb +189 -0
  21. data/spec/unit/outputs/elasticsearch/http_client/manticore_adapter_spec.rb +105 -0
  22. data/spec/unit/outputs/elasticsearch/http_client/pool_spec.rb +198 -0
  23. data/spec/unit/outputs/elasticsearch/http_client_spec.rb +222 -0
  24. data/spec/unit/outputs/elasticsearch/template_manager_spec.rb +25 -0
  25. data/spec/unit/outputs/elasticsearch_spec.rb +615 -0
  26. data/spec/unit/outputs/error_whitelist_spec.rb +60 -0
  27. metadata +49 -110
  28. data/lib/logstash/outputs/amazon_es/aws_transport.rb +0 -109
  29. data/lib/logstash/outputs/amazon_es/aws_v4_signer.rb +0 -7
  30. data/lib/logstash/outputs/amazon_es/aws_v4_signer_impl.rb +0 -62
  31. data/lib/logstash/outputs/amazon_es/elasticsearch-template.json +0 -41
  32. data/spec/amazon_es_spec_helper.rb +0 -69
  33. data/spec/unit/outputs/amazon_es_spec.rb +0 -50
  34. data/spec/unit/outputs/elasticsearch/protocol_spec.rb +0 -36
  35. data/spec/unit/outputs/elasticsearch_proxy_spec.rb +0 -58
@@ -0,0 +1,60 @@
1
+ require "logstash/outputs/amazon_es"
2
+ require_relative "../../../spec/es_spec_helper"
3
+
4
+ describe "whitelisting error types in expected behavior" do
5
+ let(:template) { '{"template" : "not important, will be updated by :index"}' }
6
+ let(:event1) { LogStash::Event.new("somevalue" => 100, "@timestamp" => "2014-11-17T20:37:17.223Z") }
7
+ let(:action1) { ["index", {:_id=>1, :_routing=>nil, :_index=>"logstash-2014.11.17", :_type=>"doc"}, event1] }
8
+ let(:settings) { {"manage_template" => true,
9
+ "index" => "logstash-2014.11.17",
10
+ "template_overwrite" => true,
11
+ "hosts" => get_host_port(),
12
+ "protocol" => "http",
13
+ "port" => 9200,
14
+ "aws_access_key_id" => "AAAAAAAAAAAAAAAAAAAA",
15
+ "aws_secret_access_key" => "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"} }
16
+
17
+ subject { LogStash::Outputs::ElasticSearch.new(settings) }
18
+
19
+ before :each do
20
+ allow(subject.logger).to receive(:warn)
21
+
22
+ subject.register
23
+
24
+ allow(subject.client).to receive(:maximum_seen_major_version).and_return(0)
25
+ allow(subject.client).to receive(:bulk).and_return(
26
+ {
27
+ "errors" => true,
28
+ "items" => [{
29
+ "create" => {
30
+ "status" => 409,
31
+ "error" => {
32
+ "type" => "document_already_exists_exception",
33
+ "reason" => "[shard] document already exists"
34
+ }
35
+ }
36
+ }]
37
+ })
38
+
39
+ subject.multi_receive([event1])
40
+ end
41
+
42
+ after :each do
43
+ subject.close
44
+ end
45
+
46
+ describe "when failure logging is enabled for everything" do
47
+ it "should log a failure on the action" do
48
+ expect(subject.logger).to have_received(:warn).with("Failed action.", anything)
49
+ end
50
+ end
51
+
52
+ describe "when failure logging is disabled for docuemnt exists error" do
53
+ let(:settings) { super.merge("failure_type_logging_whitelist" => ["document_already_exists_exception"]) }
54
+
55
+ it "should log a failure on the action" do
56
+ expect(subject.logger).not_to have_received(:warn).with("Failed action.", anything)
57
+ end
58
+ end
59
+
60
+ end
metadata CHANGED
@@ -1,49 +1,35 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: logstash-output-amazon_es
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.1
4
+ version: 6.4.0
5
5
  platform: java
6
6
  authors:
7
7
  - Amazon
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-03-30 00:00:00.000000000 Z
11
+ date: 2018-09-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  requirement: !ruby/object:Gem::Requirement
15
15
  requirements:
16
16
  - - ">="
17
17
  - !ruby/object:Gem::Version
18
- version: '0'
19
- name: concurrent-ruby
20
- prerelease: false
21
- type: :runtime
22
- version_requirements: !ruby/object:Gem::Requirement
23
- requirements:
24
- - - ">="
25
- - !ruby/object:Gem::Version
26
- version: '0'
27
- - !ruby/object:Gem::Dependency
28
- requirement: !ruby/object:Gem::Requirement
29
- requirements:
30
- - - ">="
31
- - !ruby/object:Gem::Version
32
- version: 1.0.10
18
+ version: 0.5.4
33
19
  - - "<"
34
20
  - !ruby/object:Gem::Version
35
- version: 6.0.0
36
- name: elasticsearch
21
+ version: 1.0.0
22
+ name: manticore
37
23
  prerelease: false
38
24
  type: :runtime
39
25
  version_requirements: !ruby/object:Gem::Requirement
40
26
  requirements:
41
27
  - - ">="
42
28
  - !ruby/object:Gem::Version
43
- version: 1.0.10
29
+ version: 0.5.4
44
30
  - - "<"
45
31
  - !ruby/object:Gem::Version
46
- version: 6.0.0
32
+ version: 1.0.0
47
33
  - !ruby/object:Gem::Dependency
48
34
  requirement: !ruby/object:Gem::Requirement
49
35
  requirements:
@@ -123,117 +109,55 @@ dependencies:
123
109
  requirements:
124
110
  - - "~>"
125
111
  - !ruby/object:Gem::Version
126
- version: 0.9.1
127
- name: faraday
128
- prerelease: false
129
- type: :runtime
130
- version_requirements: !ruby/object:Gem::Requirement
131
- requirements:
132
- - - "~>"
133
- - !ruby/object:Gem::Version
134
- version: 0.9.1
135
- - !ruby/object:Gem::Dependency
136
- requirement: !ruby/object:Gem::Requirement
137
- requirements:
138
- - - "~>"
139
- - !ruby/object:Gem::Version
140
- version: 0.10.0
141
- name: faraday_middleware
142
- prerelease: false
143
- type: :runtime
144
- version_requirements: !ruby/object:Gem::Requirement
145
- requirements:
146
- - - "~>"
147
- - !ruby/object:Gem::Version
148
- version: 0.10.0
149
- - !ruby/object:Gem::Dependency
150
- requirement: !ruby/object:Gem::Requirement
151
- requirements:
152
- - - "<"
153
- - !ruby/object:Gem::Version
154
- version: 2.5.0
155
- name: addressable
156
- prerelease: false
157
- type: :development
158
- version_requirements: !ruby/object:Gem::Requirement
159
- requirements:
160
- - - "<"
161
- - !ruby/object:Gem::Version
162
- version: 2.5.0
163
- - !ruby/object:Gem::Dependency
164
- requirement: !ruby/object:Gem::Requirement
165
- requirements:
166
- - - "~>"
167
- - !ruby/object:Gem::Version
168
- version: 0.0.42
169
- name: ftw
112
+ version: '0'
113
+ name: logstash-codec-plain
170
114
  prerelease: false
171
115
  type: :development
172
116
  version_requirements: !ruby/object:Gem::Requirement
173
117
  requirements:
174
118
  - - "~>"
175
119
  - !ruby/object:Gem::Version
176
- version: 0.0.42
120
+ version: '0'
177
121
  - !ruby/object:Gem::Dependency
178
122
  requirement: !ruby/object:Gem::Requirement
179
123
  requirements:
180
- - - ">="
124
+ - - "~>"
181
125
  - !ruby/object:Gem::Version
182
126
  version: '0'
183
- name: logstash-input-generator
127
+ name: logstash-devutils
184
128
  prerelease: false
185
129
  type: :development
186
130
  version_requirements: !ruby/object:Gem::Requirement
187
131
  requirements:
188
- - - ">="
132
+ - - "~>"
189
133
  - !ruby/object:Gem::Version
190
134
  version: '0'
191
135
  - !ruby/object:Gem::Dependency
192
136
  requirement: !ruby/object:Gem::Requirement
193
137
  requirements:
194
- - - ">="
195
- - !ruby/object:Gem::Version
196
- version: 0.5.2
197
- - - "<"
198
- - !ruby/object:Gem::Version
199
- version: 1.0.0
200
- name: manticore
201
- prerelease: false
202
- type: :runtime
203
- version_requirements: !ruby/object:Gem::Requirement
204
- requirements:
205
- - - ">="
206
- - !ruby/object:Gem::Version
207
- version: 0.5.2
208
- - - "<"
209
- - !ruby/object:Gem::Version
210
- version: 1.0.0
211
- - !ruby/object:Gem::Dependency
212
- requirement: !ruby/object:Gem::Requirement
213
- requirements:
214
- - - ">="
138
+ - - "~>"
215
139
  - !ruby/object:Gem::Version
216
140
  version: '0'
217
- name: logstash-devutils
141
+ name: flores
218
142
  prerelease: false
219
143
  type: :development
220
144
  version_requirements: !ruby/object:Gem::Requirement
221
145
  requirements:
222
- - - ">="
146
+ - - "~>"
223
147
  - !ruby/object:Gem::Version
224
148
  version: '0'
225
149
  - !ruby/object:Gem::Dependency
226
150
  requirement: !ruby/object:Gem::Requirement
227
151
  requirements:
228
- - - ">="
152
+ - - "~>"
229
153
  - !ruby/object:Gem::Version
230
154
  version: '0'
231
- name: longshoreman
155
+ name: elasticsearch
232
156
  prerelease: false
233
157
  type: :development
234
158
  version_requirements: !ruby/object:Gem::Requirement
235
159
  requirements:
236
- - - ">="
160
+ - - "~>"
237
161
  - !ruby/object:Gem::Version
238
162
  version: '0'
239
163
  description: Output events to Amazon Elasticsearch Service with V4 signing
@@ -242,24 +166,35 @@ executables: []
242
166
  extensions: []
243
167
  extra_rdoc_files: []
244
168
  files:
169
+ - CONTRIBUTORS
245
170
  - Gemfile
246
171
  - LICENSE
247
172
  - NOTICE.TXT
248
173
  - README.md
249
174
  - lib/logstash/outputs/amazon_es.rb
250
- - lib/logstash/outputs/amazon_es/aws_transport.rb
251
- - lib/logstash/outputs/amazon_es/aws_v4_signer.rb
252
- - lib/logstash/outputs/amazon_es/aws_v4_signer_impl.rb
253
- - lib/logstash/outputs/amazon_es/elasticsearch-template.json
175
+ - lib/logstash/outputs/amazon_es/common.rb
176
+ - lib/logstash/outputs/amazon_es/common_configs.rb
177
+ - lib/logstash/outputs/amazon_es/elasticsearch-template-es2x.json
178
+ - lib/logstash/outputs/amazon_es/elasticsearch-template-es5x.json
179
+ - lib/logstash/outputs/amazon_es/elasticsearch-template-es6x.json
180
+ - lib/logstash/outputs/amazon_es/elasticsearch-template-es7x.json
254
181
  - lib/logstash/outputs/amazon_es/http_client.rb
182
+ - lib/logstash/outputs/amazon_es/http_client/manticore_adapter.rb
183
+ - lib/logstash/outputs/amazon_es/http_client/pool.rb
184
+ - lib/logstash/outputs/amazon_es/http_client_builder.rb
185
+ - lib/logstash/outputs/amazon_es/template_manager.rb
255
186
  - logstash-output-amazon_es.gemspec
256
- - spec/amazon_es_spec_helper.rb
257
- - spec/unit/outputs/amazon_es_spec.rb
258
- - spec/unit/outputs/elasticsearch/protocol_spec.rb
259
- - spec/unit/outputs/elasticsearch_proxy_spec.rb
260
- homepage: http://logstash.net/
187
+ - spec/es_spec_helper.rb
188
+ - spec/unit/http_client_builder_spec.rb
189
+ - spec/unit/outputs/elasticsearch/http_client/manticore_adapter_spec.rb
190
+ - spec/unit/outputs/elasticsearch/http_client/pool_spec.rb
191
+ - spec/unit/outputs/elasticsearch/http_client_spec.rb
192
+ - spec/unit/outputs/elasticsearch/template_manager_spec.rb
193
+ - spec/unit/outputs/elasticsearch_spec.rb
194
+ - spec/unit/outputs/error_whitelist_spec.rb
195
+ homepage: https://docs.aws.amazon.com/elasticsearch-service/latest/developerguide/index.html
261
196
  licenses:
262
- - apache-2.0
197
+ - Apache-2.0
263
198
  metadata:
264
199
  logstash_plugin: 'true'
265
200
  logstash_group: output
@@ -279,12 +214,16 @@ required_rubygems_version: !ruby/object:Gem::Requirement
279
214
  version: '0'
280
215
  requirements: []
281
216
  rubyforge_project:
282
- rubygems_version: 2.6.8
217
+ rubygems_version: 2.6.13
283
218
  signing_key:
284
219
  specification_version: 4
285
220
  summary: Logstash Output to Amazon Elasticsearch Service
286
221
  test_files:
287
- - spec/amazon_es_spec_helper.rb
288
- - spec/unit/outputs/amazon_es_spec.rb
289
- - spec/unit/outputs/elasticsearch/protocol_spec.rb
290
- - spec/unit/outputs/elasticsearch_proxy_spec.rb
222
+ - spec/es_spec_helper.rb
223
+ - spec/unit/http_client_builder_spec.rb
224
+ - spec/unit/outputs/elasticsearch/http_client/manticore_adapter_spec.rb
225
+ - spec/unit/outputs/elasticsearch/http_client/pool_spec.rb
226
+ - spec/unit/outputs/elasticsearch/http_client_spec.rb
227
+ - spec/unit/outputs/elasticsearch/template_manager_spec.rb
228
+ - spec/unit/outputs/elasticsearch_spec.rb
229
+ - spec/unit/outputs/error_whitelist_spec.rb
@@ -1,109 +0,0 @@
1
- require 'faraday'
2
- require 'faraday_middleware'
3
- require 'aws-sdk-core'
4
- require 'elasticsearch'
5
- require 'elasticsearch-transport'
6
- require 'manticore'
7
- require 'faraday/adapter/manticore'
8
-
9
- #
10
- require 'uri'
11
-
12
- require_relative "aws_v4_signer"
13
-
14
-
15
- module Elasticsearch
16
- module Transport
17
- module Transport
18
- module HTTP
19
-
20
- # Transport implementation, which V4 Signs requests using the [_Faraday_](https://rubygems.org/gems/faraday)
21
- # library for abstracting the HTTP client.
22
- #
23
- # @see Transport::Base
24
- #
25
- class AWS
26
- include Elasticsearch::Transport::Transport::Base
27
-
28
-
29
- DEFAULT_PORT = 80
30
- DEFAULT_PROTOCOL = "http"
31
-
32
- CredentialConfig = Struct.new(
33
- :access_key_id,
34
- :secret_access_key,
35
- :session_token,
36
- :profile,
37
- :instance_profile_credentials_retries,
38
- :instance_profile_credentials_timeout,
39
- :region
40
- )
41
-
42
- # Performs the request by invoking {Transport::Base#perform_request} with a block.
43
- #
44
- # @return [Response]
45
- # @see Transport::Base#perform_request
46
- #
47
- def perform_request(method, path, params={}, body=nil)
48
- super do |connection, url|
49
- response = connection.connection.run_request \
50
- method.downcase.to_sym,
51
- url,
52
- ( body ? __convert_to_json(body) : nil ),
53
- {}
54
-
55
- Response.new response.status, response.body, response.headers
56
- end
57
- end
58
-
59
- # Builds and returns a collection of connections.
60
- #
61
- # @return [Connections::Collection]
62
- #
63
- def __build_connections
64
- region = options[:region]
65
- access_key_id = options[:aws_access_key_id] || nil
66
- secret_access_key = options[:aws_secret_access_key] || nil
67
- session_token = options[:session_token] || nil
68
- profile = options[:profile] || 'default'
69
- instance_cred_retries = options[:instance_profile_credentials_retries] || 0
70
- instance_cred_timeout = options[:instance_profile_credentials_timeout] || 1
71
-
72
- credential_config = CredentialConfig.new(access_key_id, secret_access_key, session_token, profile,
73
- instance_cred_retries, instance_cred_timeout, region)
74
- credentials = Aws::CredentialProviderChain.new(credential_config).resolve
75
-
76
- Connections::Collection.new \
77
- :connections => hosts.map { |host|
78
- host[:protocol] = host[:scheme] || DEFAULT_PROTOCOL
79
- host[:port] ||= DEFAULT_PORT
80
- url = __full_url(host)
81
-
82
- aes_connection = ::Faraday::Connection.new(url, (options[:transport_options] || {})) do |faraday|
83
- faraday.request :aws_v4_signer,
84
- credentials: credentials,
85
- service_name: 'es',
86
- region: region
87
- faraday.adapter :manticore
88
- end
89
-
90
- Connections::Connection.new \
91
- :host => host,
92
- :connection => aes_connection
93
- },
94
- :selector_class => options[:selector_class],
95
- :selector => options[:selector]
96
- end
97
-
98
- # Returns an array of implementation specific connection errors.
99
- #
100
- # @return [Array]
101
- #
102
- def host_unreachable_exceptions
103
- [::Faraday::Error::ConnectionFailed, ::Faraday::Error::TimeoutError]
104
- end
105
- end
106
- end
107
- end
108
- end
109
- end
@@ -1,7 +0,0 @@
1
- require 'faraday'
2
- require_relative 'aws_v4_signer_impl'
3
-
4
- module FaradayMiddleware
5
- Faraday::Request.register_middleware :aws_v4_signer => lambda { AwsV4Signer }
6
- end
7
-
@@ -1,62 +0,0 @@
1
- require 'aws-sdk-core'
2
- require 'faraday'
3
-
4
-
5
- class AwsV4Signer < Faraday::Middleware
6
- class Request
7
- def initialize(env)
8
- @env = env
9
- end
10
-
11
- def headers
12
- @env.request_headers
13
- end
14
-
15
- def set_header(header)
16
- @env.request_headers = header
17
- end
18
-
19
- def body
20
- @env.body || ''
21
- end
22
-
23
- def endpoint
24
- @env.url
25
- end
26
-
27
- def http_method
28
- @env.method.to_s.upcase
29
- end
30
- end
31
-
32
- def signer
33
- credentials = @options.fetch(:credentials)
34
- service_name = @options.fetch(:service_name)
35
- region = @options.fetch(:region)
36
- Aws::Signers::V4.new(credentials, service_name, region)
37
- end
38
-
39
- def initialize(app, options = nil)
40
- super(app)
41
- @options = options
42
- @net_http = app.is_a?(Faraday::Adapter::NetHttp)
43
- end
44
-
45
- def call(env)
46
- normalize_for_net_http!(env)
47
- req = Request.new(env)
48
- signer().sign(req)
49
- @app.call(env)
50
- end
51
-
52
- private
53
- def normalize_for_net_http!(env)
54
- return unless @net_http
55
-
56
- if Net::HTTP::HAVE_ZLIB
57
- env.request_headers['Accept-Encoding'] ||= 'gzip;q=1.0,deflate;q=0.6,identity;q=0.3'
58
- end
59
-
60
- env.request_headers['Accept'] ||= '*/*'
61
- end
62
- end