logstash-filter-elasticsearch 3.9.3 → 3.9.4

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
2
  SHA256:
3
- metadata.gz: 886cfa121f2af1a9efdcfff9f3f2e97be3456be2aecbb668b89d3517d8087ffc
4
- data.tar.gz: 0f0a568d1bf012cd0845a6d9cb5782a6460a32332a493790b84f010e68c06fcd
3
+ metadata.gz: 3264c43657eea13f942de4c005f0996dfc30e845cf7643fe374ec6918d400d83
4
+ data.tar.gz: bfdb2268299b87ed893d778411c450c1758977cd2e2e3c051e0679aa9467fd37
5
5
  SHA512:
6
- metadata.gz: 3e15a05bd9d013a2145ce983b2699f94c619276d93a675d49695ef8b8cf1d48ef88e6dfb4edac975d11a85bc57c0e769566b35ec44b8b2776fca8e35300af65d
7
- data.tar.gz: 667279291114a2a93cbbd211e6ec7ff7533eada83dbfc73377d0a67b759ae773e7787f9b1a11518e9101302653cf5b8b356936a211521f9f635cc58646826730
6
+ metadata.gz: 759cb7f87175ac2894adc715e108399fd6d27af1cae91fdf91bd05aa5312678e9963fde3c36a25519b6eac3b53a326ed203583a1f22a94fdd66239014ddf2433
7
+ data.tar.gz: 5dda79137366f9d40d1fddf21b6eb92da6377187eb470d3e725b1cfb338bd1e2f2296263e67fec7f10bf7b9a4d611bcca243d393235727ffef200264da5ef4c9
data/CHANGELOG.md CHANGED
@@ -1,3 +1,10 @@
1
+ ## 3.9.4
2
+ - Fix: a regression (in LS 7.14.0) where due the elasticsearch client update (from 5.0.5 to 7.5.0) the `Authorization`
3
+ header isn't passed, this leads to the plugin not being able to leverage `user`/`password` credentials set by the user.
4
+ [#148](https://github.com/logstash-plugins/logstash-filter-elasticsearch/pull/148)
5
+ - Fix: default setting for `hosts` not working (since 3.7.0) GH-147
6
+ - Fix: mutating @hosts variable which leads to issues with multiple worker threads GH-129
7
+
1
8
  ## 3.9.3
2
9
  - [DOC] Update links to use shared attributes [#144](https://github.com/logstash-plugins/logstash-filter-elasticsearch/pull/144)
3
10
 
@@ -1,19 +1,15 @@
1
1
  # encoding: utf-8
2
2
  require "logstash/filters/base"
3
3
  require "logstash/namespace"
4
- require_relative "elasticsearch/client"
5
4
  require "logstash/json"
6
- require "logstash/util/safe_uri"
7
- java_import "java.util.concurrent.ConcurrentHashMap"
8
-
5
+ require_relative "elasticsearch/client"
6
+ require_relative "elasticsearch/patches/_elasticsearch_transport_http_manticore"
9
7
 
10
8
  class LogStash::Filters::Elasticsearch < LogStash::Filters::Base
11
9
  config_name "elasticsearch"
12
10
 
13
- DEFAULT_HOST = ::LogStash::Util::SafeURI.new("//localhost:9200")
14
-
15
11
  # List of elasticsearch hosts to use for querying.
16
- config :hosts, :validate => :array, :default => [ DEFAULT_HOST ]
12
+ config :hosts, :validate => :array, :default => [ 'localhost:9200' ]
17
13
 
18
14
  # Comma-delimited list of index names to search; use `_all` or empty string to perform the operation on all indices.
19
15
  # Field substitution (e.g. `index-name-%{date_field}`) is available
@@ -112,7 +108,7 @@ class LogStash::Filters::Elasticsearch < LogStash::Filters::Base
112
108
  fill_user_password_from_cloud_auth
113
109
  fill_hosts_from_cloud_id
114
110
 
115
- @hosts = Array(@hosts).map { |host| host.to_s } # for ES client URI#to_s
111
+ @hosts = Array(@hosts).map { |host| host.to_s } # potential SafeURI#to_s
116
112
 
117
113
  test_connection!
118
114
  end # def register
@@ -120,7 +116,7 @@ class LogStash::Filters::Elasticsearch < LogStash::Filters::Base
120
116
  def filter(event)
121
117
  matched = false
122
118
  begin
123
- params = {:index => event.sprintf(@index) }
119
+ params = { :index => event.sprintf(@index) }
124
120
 
125
121
  if @query_dsl
126
122
  query = LogStash::Json.load(event.sprintf(@query_dsl))
@@ -237,8 +233,7 @@ class LogStash::Filters::Elasticsearch < LogStash::Filters::Base
237
233
  end
238
234
 
239
235
  def hosts_default?(hosts)
240
- # NOTE: would be nice if pipeline allowed us a clean way to detect a config default :
241
- hosts.is_a?(Array) && hosts.size == 1 && hosts.first.equal?(DEFAULT_HOST)
236
+ hosts.is_a?(Array) && hosts.size == 1 && !original_params.key?('hosts')
242
237
  end
243
238
 
244
239
  def validate_authentication
@@ -273,6 +268,7 @@ class LogStash::Filters::Elasticsearch < LogStash::Filters::Base
273
268
  end
274
269
 
275
270
  def parse_host_uri_from_cloud_id(cloud_id)
271
+ require 'logstash/util/safe_uri'
276
272
  begin # might not be available on older LS
277
273
  require 'logstash/util/cloud_setting_id'
278
274
  rescue LoadError
@@ -24,7 +24,7 @@ module LogStash
24
24
  logger.warn "Supplied proxy setting (proxy => '') has no effect" if @proxy.eql?('')
25
25
  transport_options[:proxy] = proxy.to_s if proxy && !proxy.eql?('')
26
26
 
27
- hosts.map! {|h| { host: h, scheme: 'https' } } if ssl
27
+ hosts = hosts.map { |host| { host: host, scheme: 'https' } } if ssl
28
28
  # set ca_file even if ssl isn't on, since the host can be an https url
29
29
  ssl_options = { ssl: true, ca_file: options[:ca_file] } if options[:ca_file]
30
30
  ssl_options ||= {}
@@ -43,14 +43,14 @@ module LogStash
43
43
  return {} unless user && password && password.value
44
44
 
45
45
  token = ::Base64.strict_encode64("#{user}:#{password.value}")
46
- { Authorization: "Basic #{token}" }
46
+ { 'Authorization' => "Basic #{token}" }
47
47
  end
48
48
 
49
49
  def setup_api_key(api_key)
50
50
  return {} unless (api_key && api_key.value)
51
51
 
52
52
  token = ::Base64.strict_encode64(api_key.value)
53
- { Authorization: "ApiKey #{token}" }
53
+ { 'Authorization' => "ApiKey #{token}" }
54
54
  end
55
55
  end
56
56
  end
@@ -0,0 +1,33 @@
1
+ # encoding: utf-8
2
+ require "elasticsearch"
3
+ require "elasticsearch/transport/transport/http/manticore"
4
+
5
+ es_client_version = Gem.loaded_specs['elasticsearch-transport'].version
6
+ if es_client_version >= Gem::Version.new('7.2') && es_client_version < Gem::Version.new('7.16')
7
+ # elasticsearch-transport 7.2.0 - 7.14.0 had a bug where setting http headers
8
+ # ES::Client.new ..., transport_options: { headers: { 'Authorization' => ... } }
9
+ # would be lost https://github.com/elastic/elasticsearch-ruby/issues/1428
10
+ #
11
+ # NOTE: needs to be idempotent as input ES plugin might apply the same patch!
12
+ #
13
+ # @private
14
+ module Elasticsearch
15
+ module Transport
16
+ module Transport
17
+ module HTTP
18
+ class Manticore
19
+
20
+ def apply_headers(request_options, options)
21
+ headers = (options && options[:headers]) || {}
22
+ headers[CONTENT_TYPE_STR] = find_value(headers, CONTENT_TYPE_REGEX) || DEFAULT_CONTENT_TYPE
23
+ headers[USER_AGENT_STR] = find_value(headers, USER_AGENT_REGEX) || user_agent_header
24
+ headers[ACCEPT_ENCODING] = GZIP if use_compression?
25
+ (request_options[:headers] ||= {}).merge!(headers) # this line was changed
26
+ end
27
+
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
33
+ end
@@ -1,7 +1,7 @@
1
1
  Gem::Specification.new do |s|
2
2
 
3
3
  s.name = 'logstash-filter-elasticsearch'
4
- s.version = '3.9.3'
4
+ s.version = '3.9.4'
5
5
  s.licenses = ['Apache License (2.0)']
6
6
  s.summary = "Copies fields from previous log events in Elasticsearch to current events "
7
7
  s.description = "This gem is a Logstash plugin required to be installed on top of the Logstash core pipeline using $LS_HOME/bin/logstash-plugin install gemname. This gem is not a stand-alone program"
@@ -21,7 +21,7 @@ Gem::Specification.new do |s|
21
21
 
22
22
  # Gem dependencies
23
23
  s.add_runtime_dependency "logstash-core-plugin-api", ">= 1.60", "<= 2.99"
24
- s.add_runtime_dependency 'elasticsearch', ">= 5.0.3"
24
+ s.add_runtime_dependency 'elasticsearch', ">= 5.0.5" # LS >= 6.7 and < 7.14 all used version 5.0.5
25
25
  s.add_runtime_dependency 'manticore', "~> 0.6"
26
26
 
27
27
  s.add_development_dependency 'logstash-devutils'
data/spec/es_helper.rb CHANGED
@@ -7,8 +7,12 @@ module ESHelper
7
7
  end
8
8
  end
9
9
 
10
- def self.get_client
11
- Elasticsearch::Client.new(:hosts => [get_host_port])
10
+ def self.get_client(credentials)
11
+ require 'elasticsearch/transport/transport/http/faraday' # supports user/password options
12
+ host, port = get_host_port.split(':')
13
+ host_opts = credentials.inject({}) { |h, (k, v)| h[k.to_sym] = v; h } # user: _, password: _
14
+ host_opts.merge! host: host, port: port, scheme: 'http'
15
+ Elasticsearch::Client.new(hosts: [host_opts], transport_class: Elasticsearch::Transport::Transport::HTTP::Faraday)
12
16
  end
13
17
 
14
18
  def self.doc_type
@@ -313,12 +313,12 @@ describe LogStash::Filters::Elasticsearch do
313
313
  'sample:dXMtY2VudHJhbDEuZ2NwLmNsb3VkLmVzLmlvJGFjMzFlYmI5MDI0MTc3MzE1NzA0M2MzNGZkMjZmZDQ2OjkyNDMkYTRjMDYyMzBlNDhjOGZjZTdiZTg4YTA3NGEzYmIzZTA6OTI0NA=='
314
314
  end
315
315
 
316
- let(:config) { super.merge({ 'cloud_id' => valid_cloud_id }) }
316
+ let(:config) { super().merge({ 'cloud_id' => valid_cloud_id }) }
317
317
 
318
318
  it "should set host(s)" do
319
319
  plugin.register
320
320
  client = plugin.send(:get_client).client
321
- expect( client.transport.hosts ).to eql [{
321
+ expect( extract_transport(client).hosts ).to eql [{
322
322
  :scheme => "https",
323
323
  :host => "ac31ebb90241773157043c34fd26fd46.us-central1.gcp.cloud.es.io",
324
324
  :port => 9243,
@@ -328,7 +328,7 @@ describe LogStash::Filters::Elasticsearch do
328
328
  end
329
329
 
330
330
  context 'invalid' do
331
- let(:config) { super.merge({ 'cloud_id' => 'invalid:dXMtY2VudHJhbDEuZ2NwLmNsb3VkLmVzLmlv' }) }
331
+ let(:config) { super().merge({ 'cloud_id' => 'invalid:dXMtY2VudHJhbDEuZ2NwLmNsb3VkLmVzLmlv' }) }
332
332
 
333
333
  it "should fail" do
334
334
  expect { plugin.register }.to raise_error LogStash::ConfigurationError, /cloud_id.*? is invalid/
@@ -336,7 +336,7 @@ describe LogStash::Filters::Elasticsearch do
336
336
  end
337
337
 
338
338
  context 'hosts also set' do
339
- let(:config) { super.merge({ 'cloud_id' => valid_cloud_id, 'hosts' => [ 'localhost:9200' ] }) }
339
+ let(:config) { super().merge({ 'cloud_id' => valid_cloud_id, 'hosts' => [ 'localhost:9200' ] }) }
340
340
 
341
341
  it "should fail" do
342
342
  expect { plugin.register }.to raise_error LogStash::ConfigurationError, /cloud_id and hosts/
@@ -345,18 +345,18 @@ describe LogStash::Filters::Elasticsearch do
345
345
  end if LOGSTASH_VERSION > '6.0'
346
346
 
347
347
  describe "cloud.auth" do
348
- let(:config) { super.merge({ 'cloud_auth' => LogStash::Util::Password.new('elastic:my-passwd-00') }) }
348
+ let(:config) { super().merge({ 'cloud_auth' => LogStash::Util::Password.new('elastic:my-passwd-00') }) }
349
349
 
350
350
  it "should set authorization" do
351
351
  plugin.register
352
352
  client = plugin.send(:get_client).client
353
- auth_header = client.transport.options[:transport_options][:headers][:Authorization]
353
+ auth_header = extract_transport(client).options[:transport_options][:headers]['Authorization']
354
354
 
355
355
  expect( auth_header ).to eql "Basic #{Base64.encode64('elastic:my-passwd-00').rstrip}"
356
356
  end
357
357
 
358
358
  context 'invalid' do
359
- let(:config) { super.merge({ 'cloud_auth' => 'invalid-format' }) }
359
+ let(:config) { super().merge({ 'cloud_auth' => 'invalid-format' }) }
360
360
 
361
361
  it "should fail" do
362
362
  expect { plugin.register }.to raise_error LogStash::ConfigurationError, /cloud_auth.*? format/
@@ -364,7 +364,7 @@ describe LogStash::Filters::Elasticsearch do
364
364
  end
365
365
 
366
366
  context 'user also set' do
367
- let(:config) { super.merge({ 'cloud_auth' => 'elastic:my-passwd-00', 'user' => 'another' }) }
367
+ let(:config) { super().merge({ 'cloud_auth' => 'elastic:my-passwd-00', 'user' => 'another' }) }
368
368
 
369
369
  it "should fail" do
370
370
  expect { plugin.register }.to raise_error LogStash::ConfigurationError, /Multiple authentication options are specified/
@@ -374,7 +374,7 @@ describe LogStash::Filters::Elasticsearch do
374
374
 
375
375
  describe "api_key" do
376
376
  context "without ssl" do
377
- let(:config) { super.merge({ 'api_key' => LogStash::Util::Password.new('foo:bar') }) }
377
+ let(:config) { super().merge({ 'api_key' => LogStash::Util::Password.new('foo:bar') }) }
378
378
 
379
379
  it "should fail" do
380
380
  expect { plugin.register }.to raise_error LogStash::ConfigurationError, /api_key authentication requires SSL\/TLS/
@@ -382,18 +382,18 @@ describe LogStash::Filters::Elasticsearch do
382
382
  end
383
383
 
384
384
  context "with ssl" do
385
- let(:config) { super.merge({ 'api_key' => LogStash::Util::Password.new('foo:bar'), "ssl" => true }) }
385
+ let(:config) { super().merge({ 'api_key' => LogStash::Util::Password.new('foo:bar'), "ssl" => true }) }
386
386
 
387
387
  it "should set authorization" do
388
388
  plugin.register
389
389
  client = plugin.send(:get_client).client
390
- auth_header = client.transport.options[:transport_options][:headers][:Authorization]
390
+ auth_header = extract_transport(client).options[:transport_options][:headers]['Authorization']
391
391
 
392
392
  expect( auth_header ).to eql "ApiKey #{Base64.strict_encode64('foo:bar')}"
393
393
  end
394
394
 
395
395
  context 'user also set' do
396
- let(:config) { super.merge({ 'api_key' => 'foo:bar', 'user' => 'another' }) }
396
+ let(:config) { super().merge({ 'api_key' => 'foo:bar', 'user' => 'another' }) }
397
397
 
398
398
  it "should fail" do
399
399
  expect { plugin.register }.to raise_error LogStash::ConfigurationError, /Multiple authentication options are specified/
@@ -404,30 +404,44 @@ describe LogStash::Filters::Elasticsearch do
404
404
 
405
405
  describe "proxy" do
406
406
  context 'valid' do
407
- let(:config) { super.merge({ 'proxy' => 'http://localhost:1234' }) }
407
+ let(:config) { super().merge({ 'proxy' => 'http://localhost:1234' }) }
408
408
 
409
409
  it "should set proxy" do
410
410
  plugin.register
411
411
  client = plugin.send(:get_client).client
412
- proxy = client.transport.options[:transport_options][:proxy]
412
+ proxy = extract_transport(client).options[:transport_options][:proxy]
413
413
 
414
414
  expect( proxy ).to eql "http://localhost:1234"
415
415
  end
416
416
  end
417
417
 
418
418
  context 'invalid' do
419
- let(:config) { super.merge({ 'proxy' => '${A_MISSING_ENV_VAR:}' }) }
419
+ let(:config) { super().merge({ 'proxy' => '${A_MISSING_ENV_VAR:}' }) }
420
420
 
421
421
  it "should not set proxy" do
422
422
  plugin.register
423
423
  client = plugin.send(:get_client).client
424
424
 
425
- expect( client.transport.options[:transport_options] ).to_not include(:proxy)
425
+ expect( extract_transport(client).options[:transport_options] ).to_not include(:proxy)
426
426
  end
427
427
  end
428
428
  end
429
429
  end
430
430
 
431
+ describe "defaults" do
432
+
433
+ let(:config) { Hash.new }
434
+ let(:plugin) { described_class.new(config) }
435
+
436
+ before { allow(plugin).to receive(:test_connection!) }
437
+
438
+ it "should set localhost:9200 as hosts" do
439
+ plugin.register
440
+ client = plugin.send(:get_client).client
441
+ expect( extract_transport(client).hosts ).to eql [{ :host => "localhost", :port => 9200, :protocol => "http"}]
442
+ end
443
+ end
444
+
431
445
  describe "query template" do
432
446
  let(:config) do
433
447
  {
@@ -453,4 +467,10 @@ describe LogStash::Filters::Elasticsearch do
453
467
  plugin.filter(LogStash::Event.new)
454
468
  end
455
469
  end
470
+
471
+ # @note can be removed once gem depends on elasticsearch >= 6.x
472
+ def extract_transport(client) # on 7.x client.transport is a ES::Transport::Client
473
+ client.transport.respond_to?(:transport) ? client.transport.transport : client.transport
474
+ end
475
+
456
476
  end
@@ -6,21 +6,31 @@ require_relative "../../../spec/es_helper"
6
6
 
7
7
  describe LogStash::Filters::Elasticsearch, :integration => true do
8
8
 
9
+ ELASTIC_SECURITY_ENABLED = ENV['ELASTIC_SECURITY_ENABLED'].eql? 'true'
9
10
 
10
- let(:config) do
11
+ let(:base_config) do
11
12
  {
12
- "index" => 'logs',
13
- "hosts" => [ESHelper.get_host_port],
14
- "query" => "response: 404",
15
- "sort" => "response",
16
- "fields" => [ ["response", "code"] ],
13
+ "index" => 'logs',
14
+ "hosts" => [ESHelper.get_host_port],
15
+ "query" => "response: 404",
16
+ "sort" => "response",
17
+ "fields" => [ ["response", "code"] ],
17
18
  }
18
19
  end
20
+
21
+ let(:credentials) do
22
+ { 'user' => 'elastic', 'password' => ENV['ELASTIC_PASSWORD'] }
23
+ end
24
+
25
+ let(:config) do
26
+ ELASTIC_SECURITY_ENABLED ? base_config.merge(credentials) : base_config
27
+ end
28
+
19
29
  let(:plugin) { described_class.new(config) }
20
30
  let(:event) { LogStash::Event.new({}) }
21
31
 
22
32
  before(:each) do
23
- @es = ESHelper.get_client
33
+ @es = ESHelper.get_client(ELASTIC_SECURITY_ENABLED ? credentials : {})
24
34
  # Delete all templates first.
25
35
  # Clean ES of data before we start.
26
36
  @es.indices.delete_template(:name => "*")
@@ -30,11 +40,10 @@ describe LogStash::Filters::Elasticsearch, :integration => true do
30
40
  ESHelper.index_doc(@es, :index => 'logs', :body => { :response => 404, :this => 'that'})
31
41
  end
32
42
  @es.indices.refresh
33
-
34
- plugin.register
35
43
  end
36
44
 
37
45
  it "should enhance the current event with new data" do
46
+ plugin.register
38
47
  plugin.filter(event)
39
48
  expect(event.get('code')).to eq(404)
40
49
  end
@@ -42,20 +51,28 @@ describe LogStash::Filters::Elasticsearch, :integration => true do
42
51
  context "when retrieving a list of elements" do
43
52
 
44
53
  let(:config) do
45
- {
46
- "index" => 'logs',
47
- "hosts" => [ESHelper.get_host_port],
48
- "query" => "response: 404",
49
- "fields" => [ ["response", "code"] ],
50
- "sort" => "response",
51
- "result_size" => 10
52
- }
54
+ super().merge("fields" => [ ["response", "code"] ], "result_size" => 10)
53
55
  end
54
56
 
57
+ before { plugin.register }
58
+
55
59
  it "should enhance the current event with new data" do
56
60
  plugin.filter(event)
57
61
  expect(event.get("code")).to eq([404]*10)
58
62
  end
59
63
 
60
64
  end
65
+
66
+ context "incorrect auth credentials" do
67
+
68
+ let(:config) do
69
+ super().reject { |key, _| key == 'password' }
70
+ end
71
+
72
+ it "should enhance the current event with new data" do
73
+ expect { plugin.register }.to raise_error Elasticsearch::Transport::Transport::Errors::Unauthorized
74
+ end
75
+
76
+ end if ELASTIC_SECURITY_ENABLED
77
+
61
78
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: logstash-filter-elasticsearch
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.9.3
4
+ version: 3.9.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Elastic
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-01-26 00:00:00.000000000 Z
11
+ date: 2021-08-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  requirement: !ruby/object:Gem::Requirement
@@ -20,8 +20,8 @@ dependencies:
20
20
  - !ruby/object:Gem::Version
21
21
  version: '2.99'
22
22
  name: logstash-core-plugin-api
23
- prerelease: false
24
23
  type: :runtime
24
+ prerelease: false
25
25
  version_requirements: !ruby/object:Gem::Requirement
26
26
  requirements:
27
27
  - - ">="
@@ -35,15 +35,15 @@ dependencies:
35
35
  requirements:
36
36
  - - ">="
37
37
  - !ruby/object:Gem::Version
38
- version: 5.0.3
38
+ version: 5.0.5
39
39
  name: elasticsearch
40
- prerelease: false
41
40
  type: :runtime
41
+ prerelease: false
42
42
  version_requirements: !ruby/object:Gem::Requirement
43
43
  requirements:
44
44
  - - ">="
45
45
  - !ruby/object:Gem::Version
46
- version: 5.0.3
46
+ version: 5.0.5
47
47
  - !ruby/object:Gem::Dependency
48
48
  requirement: !ruby/object:Gem::Requirement
49
49
  requirements:
@@ -51,8 +51,8 @@ dependencies:
51
51
  - !ruby/object:Gem::Version
52
52
  version: '0.6'
53
53
  name: manticore
54
- prerelease: false
55
54
  type: :runtime
55
+ prerelease: false
56
56
  version_requirements: !ruby/object:Gem::Requirement
57
57
  requirements:
58
58
  - - "~>"
@@ -65,8 +65,8 @@ dependencies:
65
65
  - !ruby/object:Gem::Version
66
66
  version: '0'
67
67
  name: logstash-devutils
68
- prerelease: false
69
68
  type: :development
69
+ prerelease: false
70
70
  version_requirements: !ruby/object:Gem::Requirement
71
71
  requirements:
72
72
  - - ">="
@@ -89,6 +89,7 @@ files:
89
89
  - docs/index.asciidoc
90
90
  - lib/logstash/filters/elasticsearch.rb
91
91
  - lib/logstash/filters/elasticsearch/client.rb
92
+ - lib/logstash/filters/elasticsearch/patches/_elasticsearch_transport_http_manticore.rb
92
93
  - logstash-filter-elasticsearch.gemspec
93
94
  - spec/es_helper.rb
94
95
  - spec/filters/elasticsearch_spec.rb
@@ -121,8 +122,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
121
122
  - !ruby/object:Gem::Version
122
123
  version: '0'
123
124
  requirements: []
124
- rubyforge_project:
125
- rubygems_version: 2.6.13
125
+ rubygems_version: 3.0.6
126
126
  signing_key:
127
127
  specification_version: 4
128
128
  summary: Copies fields from previous log events in Elasticsearch to current events