fluent-plugin-elasticsearch 3.0.2 → 3.1.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
2
  SHA256:
3
- metadata.gz: 73279ef661fbc0c7d8f5539b8e8524e7fce1ade17ae44e2f0ca96bd49fd047d8
4
- data.tar.gz: b9b5fd6396f87231a9b430fa194da647f221083ec292cd5fa3092a5f76f57655
3
+ metadata.gz: 848660aa041feaaebb21f90db0da0a9e2e4b5dc912ba83c58d452607f9d1e982
4
+ data.tar.gz: e2c4dfedd7458cab2146b5e3939720b2fca6ce69d58be2ffbe0cc966929a2943
5
5
  SHA512:
6
- metadata.gz: 7893520f2758d4c256c33c4656db6b5afb4125ff55bb18277f5edb7cee8a9cd14b7e9705f005a5c4ce6574b51548bee239cd261036f2aa3cb1f0eff24104cb65
7
- data.tar.gz: 281ea7247a4d3b6ccf35a47698f632bc91fcac7f51a5b16fdb3b4a3e75a96bd518807de1c018b905e0d6cf353fe56973a06d04483f39c2decf80c67ac320429d
6
+ metadata.gz: 4addc8de17edeb5b1a698d21180e314789e56284576f37eed8d645d6af5bc9f7afe310fed1c16f9d63b68683d005364e0bc18324984a9029d120fcde5ee05c1d
7
+ data.tar.gz: 83dd202ec5ec3ad1d1cbffd14e5cdb49e90e84ec764d129a7b45fa080fa5646e56b0363241fc6cf9a0f4c7403fa43812ae45137e6499cb3014e8f84e0629d9d5
data/History.md CHANGED
@@ -2,6 +2,10 @@
2
2
 
3
3
  ### [Unreleased]
4
4
 
5
+ ### 3.1.0
6
+ - Retry obtaining Elasticsearch version (#532)
7
+ - Fix broken id links (#530)
8
+
5
9
  ### 3.0.2
6
10
  - appveyor: Remove Ruby 2.1 CI targets on AppVeyor (#524)
7
11
  - Follow removal of _routing field change on recent Elasticsearch (#523)
data/README.md CHANGED
@@ -42,6 +42,7 @@ Current maintainers: @cosmo0920
42
42
  + [index_prefix](#index_prefix)
43
43
  + [templates](#templates)
44
44
  + [max_retry_putting_template](#max_retry_putting_template)
45
+ + [max_retry_get_es_version](#max_retry_get_es_version)
45
46
  + [request_timeout](#request_timeout)
46
47
  + [reload_connections](#reload_connections)
47
48
  + [reload_on_failure](#reload_on_failure)
@@ -67,8 +68,8 @@ Current maintainers: @cosmo0920
67
68
  + [Buffer options](#buffer-options)
68
69
  + [Hash flattening](#hash-flattening)
69
70
  + [Generate Hash ID](#generate-hash-id)
70
- + [sniffer_class_name](#sniffer_class_name)
71
- + [reload_after](#reload_after)
71
+ + [sniffer_class_name](#sniffer-class-name)
72
+ + [reload_after](#reload-after)
72
73
  + [validate_client_version](#validate-client-version)
73
74
  + [unrecoverable_error_types](#unrecoverable-error-types)
74
75
  + [verify_es version at startup](#verify_es_version_at_startup)
@@ -77,7 +78,7 @@ Current maintainers: @cosmo0920
77
78
  + [Dynamic configuration](#dynamic-configuration)
78
79
  + [Placeholders](#placeholders)
79
80
  + [Multi workers](#multi-workers)
80
- + [log_es_400_reason](#log-es-400-reason)
81
+ + [log_es_400_reason](#log_es_400_reason)
81
82
  * [Troubleshooting](#troubleshooting)
82
83
  + [Cannot send events to elasticsearch](#cannot-send-events-to-elasticsearch)
83
84
  + [Cannot see detailed failure log](#cannot-see-detailed-failure-log)
@@ -431,6 +432,17 @@ Usually, booting up clustered Elasticsearch containers are much slower than laun
431
432
  max_retry_putting_template 15 # defaults to 10
432
433
  ```
433
434
 
435
+ ### max_retry_get_es_version
436
+
437
+ You can specify times of retry obtaining Elasticsearch version.
438
+
439
+ This is useful when Elasticsearch plugin cannot connect Elasticsearch to obtain Elasticsearch version.
440
+ Usually, booting up clustered Elasticsearch containers are much slower than launching Fluentd container.
441
+
442
+ ```
443
+ max_retry_get_es_version 17 # defaults to 15
444
+ ```
445
+
434
446
  ### request_timeout
435
447
 
436
448
  You can specify HTTP request timeout.
@@ -3,7 +3,7 @@ $:.push File.expand_path('../lib', __FILE__)
3
3
 
4
4
  Gem::Specification.new do |s|
5
5
  s.name = 'fluent-plugin-elasticsearch'
6
- s.version = '3.0.2'
6
+ s.version = '3.1.0'
7
7
  s.authors = ['diogo', 'pitr']
8
8
  s.email = ['pitr.vern@gmail.com', 'me@diogoterror.com']
9
9
  s.description = %q{Elasticsearch output plugin for Fluent event collector}
@@ -0,0 +1,5 @@
1
+ require 'fluent/error'
2
+
3
+ class Fluent::Plugin::ElasticsearchError
4
+ class RetryableOperationExhaustedFailure < Fluent::UnrecoverableError; end
5
+ end
@@ -1,8 +1,7 @@
1
1
  require 'fluent/error'
2
+ require_relative './elasticsearch_error'
2
3
 
3
4
  module Fluent::ElasticsearchIndexTemplate
4
- class TemplateInstallationFailure < Fluent::UnrecoverableError; end
5
-
6
5
  def get_template(template_file)
7
6
  if !File.exists?(template_file)
8
7
  raise "If you specify a template_name you must specify a valid template file (checked '#{template_file}')!"
@@ -29,7 +28,7 @@ module Fluent::ElasticsearchIndexTemplate
29
28
  return false
30
29
  end
31
30
 
32
- def retry_install(max_retries)
31
+ def retry_operate(max_retries)
33
32
  return unless block_given?
34
33
  retries = 0
35
34
  begin
@@ -40,10 +39,11 @@ module Fluent::ElasticsearchIndexTemplate
40
39
  if retries < max_retries
41
40
  retries += 1
42
41
  sleep 2**retries
43
- log.warn "Could not push template(s) to Elasticsearch, resetting connection and trying again. #{e.message}"
42
+ log.warn "Could not communicate to Elasticsearch, resetting connection and trying again. #{e.message}"
44
43
  retry
45
44
  end
46
- raise TemplateInstallationFailure, "Could not push template(s) to Elasticsearch after #{retries} retries. #{e.message}"
45
+ raise Fluent::Plugin::ElasticsearchError::RetryableOperationExhaustedFailure,
46
+ "Could not communicate to Elasticsearch after #{retries} retries. #{e.message}"
47
47
  end
48
48
  end
49
49
 
@@ -13,6 +13,7 @@ require 'fluent/plugin/output'
13
13
  require 'fluent/event'
14
14
  require 'fluent/error'
15
15
  require_relative 'elasticsearch_constants'
16
+ require_relative 'elasticsearch_error'
16
17
  require_relative 'elasticsearch_error_handler'
17
18
  require_relative 'elasticsearch_index_template'
18
19
  begin
@@ -106,6 +107,7 @@ EOC
106
107
  config_param :application_name, :string, :default => "default"
107
108
  config_param :templates, :hash, :default => nil
108
109
  config_param :max_retry_putting_template, :integer, :default => 10
110
+ config_param :max_retry_get_es_version, :integer, :default => 15
109
111
  config_param :include_tag_key, :bool, :default => false
110
112
  config_param :tag_key, :string, :default => 'tag'
111
113
  config_param :time_parse_error_tag, :string, :default => 'Fluent::ElasticsearchOutput::TimeParser.error'
@@ -170,7 +172,7 @@ EOC
170
172
  raise Fluent::ConfigError, "'max_retry_putting_template' must be positive number." if @max_retry_putting_template < 0
171
173
 
172
174
  if @template_name && @template_file
173
- retry_install(@max_retry_putting_template) do
175
+ retry_operate(@max_retry_putting_template) do
174
176
  if @customize_template
175
177
  if @rollover_index
176
178
  raise Fluent::ConfigError, "'deflector_alias' must be provided if 'rollover_index' is set true ." if not @deflector_alias
@@ -181,7 +183,7 @@ EOC
181
183
  end
182
184
  end
183
185
  elsif @templates
184
- retry_install(@max_retry_putting_template) do
186
+ retry_operate(@max_retry_putting_template) do
185
187
  templates_hash_install(@templates, @template_overwrite)
186
188
  end
187
189
  end
@@ -229,11 +231,8 @@ EOC
229
231
 
230
232
  @last_seen_major_version =
231
233
  if @verify_es_version_at_startup
232
- begin
234
+ retry_operate(@max_retry_get_es_version) do
233
235
  detect_es_major_version
234
- rescue
235
- log.warn "Could not connect Elasticsearch or obtain version. Assuming Elasticsearch #{@default_elasticsearch_version}."
236
- @default_elasticsearch_version
237
236
  end
238
237
  else
239
238
  @default_elasticsearch_version
@@ -350,6 +350,51 @@ class ElasticsearchOutput < Test::Unit::TestCase
350
350
  end
351
351
  end
352
352
 
353
+ class GetElasticsearchVersionTest < self
354
+ def create_driver(conf='', client_version="\"5.0\"")
355
+ # For request stub to detect compatibility.
356
+ @client_version ||= client_version
357
+ # Ensure original implementation existence.
358
+ Fluent::Plugin::ElasticsearchOutput.module_eval(<<-CODE)
359
+ def detect_es_major_version
360
+ @_es_info ||= client.info
361
+ @_es_info["version"]["number"].to_i
362
+ end
363
+ CODE
364
+ Fluent::Plugin::ElasticsearchOutput.module_eval(<<-CODE)
365
+ def client_library_version
366
+ #{@client_version}
367
+ end
368
+ CODE
369
+ Fluent::Test::Driver::Output.new(Fluent::Plugin::ElasticsearchOutput).configure(conf)
370
+ end
371
+
372
+ def test_retry_get_es_version
373
+ config = %{
374
+ host logs.google.com
375
+ port 778
376
+ scheme https
377
+ path /es/
378
+ user john
379
+ password doe
380
+ verify_es_version_at_startup true
381
+ max_retry_get_es_version 3
382
+ }
383
+
384
+ connection_resets = 0
385
+ stub_request(:get, "https://john:doe@logs.google.com:778/es//").with do |req|
386
+ connection_resets += 1
387
+ raise Faraday::ConnectionFailed, "Test message"
388
+ end
389
+
390
+ assert_raise(Fluent::Plugin::ElasticsearchError::RetryableOperationExhaustedFailure) do
391
+ create_driver(config)
392
+ end
393
+
394
+ assert_equal(connection_resets, 4)
395
+ end
396
+ end
397
+
353
398
  def test_template_already_present
354
399
  config = %{
355
400
  host logs.google.com
@@ -636,7 +681,7 @@ class ElasticsearchOutput < Test::Unit::TestCase
636
681
  raise Faraday::ConnectionFailed, "Test message"
637
682
  end
638
683
 
639
- assert_raise(Fluent::ElasticsearchIndexTemplate::TemplateInstallationFailure) do
684
+ assert_raise(Fluent::Plugin::ElasticsearchError::RetryableOperationExhaustedFailure) do
640
685
  driver(config)
641
686
  end
642
687
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fluent-plugin-elasticsearch
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.0.2
4
+ version: 3.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - diogo
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2019-01-11 00:00:00.000000000 Z
12
+ date: 2019-01-22 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: fluentd
@@ -145,6 +145,7 @@ files:
145
145
  - appveyor.yml
146
146
  - fluent-plugin-elasticsearch.gemspec
147
147
  - lib/fluent/plugin/elasticsearch_constants.rb
148
+ - lib/fluent/plugin/elasticsearch_error.rb
148
149
  - lib/fluent/plugin/elasticsearch_error_handler.rb
149
150
  - lib/fluent/plugin/elasticsearch_index_template.rb
150
151
  - lib/fluent/plugin/elasticsearch_simple_sniffer.rb