fluent-plugin-elasticsearch 4.2.2 → 4.3.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: d54b3f207af54f6fb5d3119f2d6d649478e25471fda03c56e00f9206ae72914e
4
- data.tar.gz: 82eea8ed3938919f6860582698ce1253214531c806c132723e8845adfb45e2e0
3
+ metadata.gz: 5aaeb8e93dcb477b3c2d83bc469cd327068aa59f9dc073e8578cea6320b5a4d4
4
+ data.tar.gz: 3b1f76ac44342ce51b53dce4d4b15be77744c21f130b6bd2cd5eee0de4dae4b2
5
5
  SHA512:
6
- metadata.gz: c4fd2785f716d97cb8c44845c51f933f7d0ee69fe3e2911f85bf621d043015e815639350e363ce42866b224905fc20ae12b3666d302e5f1f07937f047123b20d
7
- data.tar.gz: 15d34dc457c5a98b77f2142b271d3f4ef5f611e38caeb4f225f12dcfc2c3771dea0153bae3ebe99a83cc71c6e414d67e39fea1d2fa1fa430049f90839c677578
6
+ metadata.gz: 8605eeb221ebf030b440865cb049b092ba3a5f57264226f22edacbdb07844301820a8d96e230a6593cdd29ec1fb0febb4f0aa8b7225ec80802f5f0f5b1a8a82a
7
+ data.tar.gz: dcc159325045a0609935c92b53085e564109bcc3d3eb75946226f0c5ac4d7899e79b9480aede76545378c6a0c6927ee92505f5c1aa1801b89d11fa857650964d
@@ -0,0 +1,37 @@
1
+ ---
2
+ name: Bug Report
3
+ about: Create a report to help us improve. If you have questions about ES plugin on kubernetes, please direct these to https://discuss.kubernetes.io/ before sumbit kubernetes related issue.
4
+
5
+ ---
6
+
7
+ (check apply)
8
+ - [ ] read [the contribution guideline](https://github.com/uken/fluent-plugin-elasticsearch/blob/master/CONTRIBUTING.md)
9
+ - [ ] (optional) already reported 3rd party upstream repository or mailing list if you use k8s addon or helm charts.
10
+
11
+ #### Problem
12
+
13
+ ...
14
+
15
+ #### Steps to replicate
16
+
17
+ Either clone and modify https://gist.github.com/pitr/9a518e840db58f435911
18
+
19
+ **OR**
20
+
21
+ Provide example config and message
22
+
23
+ #### Expected Behavior or What you need to ask
24
+
25
+ ...
26
+
27
+ #### Using Fluentd and ES plugin versions
28
+
29
+ * OS version
30
+ * Bare Metal or within Docker or Kubernetes or others?
31
+ * Fluentd v0.12 or v0.14/v1.0
32
+ * paste result of ``fluentd --version`` or ``td-agent --version``
33
+ * ES plugin 3.x.y/2.x.y or 1.x.y
34
+ * paste boot log of fluentd or td-agent
35
+ * paste result of ``fluent-gem list``, ``td-agent-gem list`` or your Gemfile.lock
36
+ * ES version (optional)
37
+ * ES template(s) (optional)
@@ -0,0 +1,24 @@
1
+ ---
2
+ name: Feature request
3
+ about: Suggest an idea for this project
4
+
5
+ ---
6
+
7
+ (check apply)
8
+ - [ ] read [the contribution guideline](https://github.com/uken/fluent-plugin-elasticsearch/blob/master/CONTRIBUTING.md)
9
+
10
+ **Is your feature request related to a problem? Please describe.**
11
+
12
+ <!-- A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] -->
13
+
14
+ **Describe the solution you'd like**
15
+
16
+ <!-- A clear and concise description of what you want to happen. -->
17
+
18
+ **Describe alternatives you've considered**
19
+
20
+ <!-- A clear and concise description of any alternative solutions or features you've considered. -->
21
+
22
+ **Additional context**
23
+
24
+ <!-- Add any other context or screenshots about the feature request here. -->
@@ -9,4 +9,4 @@ jobs:
9
9
  with:
10
10
  repo-token: ${{ secrets.GITHUB_TOKEN }}
11
11
  issue-close-message: "@${issue.user.login} this issue was automatically closed because it did not follow the issue template."
12
- issue-pattern: "(.*Problem.*)|(.*Expected Behavior or What you need to ask.*)|(.*Using Fluentd and ES plugin versions.*)"
12
+ issue-pattern: "(.*Problem.*)|(.*Expected Behavior or What you need to ask.*)|(.*Using Fluentd and ES plugin versions.*)|(.*Is your feature request related to a problem? Please describe.*)|(.*Describe the solution you'd like.*)|(.*Describe alternatives you've considered.*)"
data/History.md CHANGED
@@ -2,6 +2,13 @@
2
2
 
3
3
  ### [Unreleased]
4
4
 
5
+ ### 4.3.0
6
+ - Add cloud_id & cloud_auth settings (#850)
7
+ - Fix failing tests on es6 client (#848)
8
+ - feat: retry on transport errors (#846)
9
+ - fix typo (#838)
10
+ - Remove unnecessary nil check (#826)
11
+
5
12
  ### 4.2.2
6
13
  - Remove unnecessary nil check (#826)
7
14
  - Fix ILM rollover index template pattern to apply index_separator (#825)
@@ -17,7 +17,7 @@
17
17
  In your Fluentd configuration, use `@type elasticsearch_genid`. Additional configuration is optional, default values would look like this:
18
18
 
19
19
  ```
20
- <source>
20
+ <filter>
21
21
  @type elasticsearch_genid
22
22
  hash_id_key _hash
23
23
  include_tag_in_seed false
@@ -27,7 +27,7 @@ In your Fluentd configuration, use `@type elasticsearch_genid`. Additional confi
27
27
  record_keys []
28
28
  separator _
29
29
  hash_type sha1
30
- </match>
30
+ </filter>
31
31
  ```
32
32
 
33
33
  ## Configuration
data/README.md CHANGED
@@ -19,6 +19,8 @@ Current maintainers: @cosmo0920
19
19
  * [Configuration](#configuration)
20
20
  + [host](#host)
21
21
  + [port](#port)
22
+ + [cloud_id](#cloud_id)
23
+ + [cloud_auth](#cloud_auth)
22
24
  + [emit_error_for_missing_id](#emit_error_for_missing_id)
23
25
  + [hosts](#hosts)
24
26
  + [user, password, path, scheme, ssl_verify](#user-password-path-scheme-ssl_verify)
@@ -187,6 +189,26 @@ port 9201 # defaults to 9200
187
189
 
188
190
  You can specify Elasticsearch port by this parameter.
189
191
 
192
+ ### cloud_id
193
+
194
+ ```
195
+ cloud_id test-dep:ZXVyb3BlLXdlc3QxLmdjcC5jbG91ZC5lcy5pbyRiYZTA1Ng==
196
+ ```
197
+
198
+ You can specify Elasticsearch cloud_id by this parameter.
199
+
200
+ If you specify `cloud_id` option then `cloud_auth` option is required.
201
+ If you specify `cloud_id` option, `host`, `port`, `user` and `password` options are ignored.
202
+
203
+ ### cloud_auth
204
+
205
+ ```
206
+ cloud_auth 'elastic:slkjdaooewkd87iqQ2O8EQYV'
207
+ ```
208
+
209
+ You can specify Elasticsearch cloud_auth by this parameter.
210
+
211
+
190
212
  ### emit_error_for_missing_id
191
213
 
192
214
  ```
@@ -501,7 +523,7 @@ Specify the application name for the rollover index to be created.
501
523
  application_name default # defaults to "default"
502
524
  ```
503
525
 
504
- If [enable_ilm](#enable_ilm is set, then this parameter will be in effect otherwise ignored.
526
+ If [enable_ilm](#enable_ilm) is set, then this parameter will be in effect otherwise ignored.
505
527
 
506
528
  ### template_overwrite
507
529
 
@@ -1143,6 +1165,8 @@ And yet another option is described in Dynamic Configuration section.
1143
1165
 
1144
1166
  ### Dynamic configuration
1145
1167
 
1168
+ **NOTE**: *`out_elasticsearch_dynamic` will be planned to be marked as deprecated.* Please don't use the new Fluentd configuration. This plugin is maintained for backward compatibility.
1169
+
1146
1170
  If you want configurations to depend on information in messages, you can use `elasticsearch_dynamic`. This is an experimental variation of the Elasticsearch plugin allows configuration values to be specified in ways such as the below:
1147
1171
 
1148
1172
  ```
@@ -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 = '4.2.2'
6
+ s.version = '4.3.0'
7
7
  s.authors = ['diogo', 'pitr', 'Hiroshi Hatake']
8
8
  s.email = ['pitr.vern@gmail.com', 'me@diogoterror.com', 'cosmo0920.wp@gmail.com']
9
9
  s.description = %q{Elasticsearch output plugin for Fluent event collector}
@@ -32,12 +32,13 @@ module Fluent::ElasticsearchIndexTemplate
32
32
  return false
33
33
  end
34
34
 
35
- def retry_operate(max_retries, fail_on_retry_exceed = true)
35
+ def retry_operate(max_retries, fail_on_retry_exceed = true, catch_trasport_exceptions = true)
36
36
  return unless block_given?
37
37
  retries = 0
38
+ transport_errors = Elasticsearch::Transport::Transport::Errors.constants.map{ |c| Elasticsearch::Transport::Transport::Errors.const_get c } if catch_trasport_exceptions
38
39
  begin
39
40
  yield
40
- rescue *client.transport.host_unreachable_exceptions, Timeout::Error => e
41
+ rescue *client.transport.host_unreachable_exceptions, *transport_errors, Timeout::Error => e
41
42
  @_es = nil
42
43
  @_es_info = nil
43
44
  if retries < max_retries
@@ -77,6 +77,8 @@ module Fluent::Plugin
77
77
  config_param :port, :integer, :default => 9200
78
78
  config_param :user, :string, :default => nil
79
79
  config_param :password, :string, :default => nil, :secret => true
80
+ config_param :cloud_id, :string, :default => nil
81
+ config_param :cloud_auth, :string, :default => nil
80
82
  config_param :path, :string, :default => nil
81
83
  config_param :scheme, :enum, :list => [:https, :http], :default => :http
82
84
  config_param :hosts, :string, :default => nil
@@ -171,6 +173,7 @@ EOC
171
173
  config_param :ilm_policy_overwrite, :bool, :default => false
172
174
  config_param :truncate_caches_interval, :time, :default => nil
173
175
  config_param :use_legacy_template, :bool, :default => true
176
+ config_param :catch_transport_exception_on_retry, :bool, :default => true
174
177
 
175
178
  config_section :metadata, param_name: :metainfo, multi: false do
176
179
  config_param :include_chunk_id, :bool, :default => false
@@ -261,7 +264,9 @@ EOC
261
264
  verify_ilm_working if @enable_ilm
262
265
  end
263
266
  if @templates
264
- retry_operate(@max_retry_putting_template, @fail_on_putting_template_retry_exceed) do
267
+ retry_operate(@max_retry_putting_template,
268
+ @fail_on_putting_template_retry_exceed,
269
+ @catch_transport_exception_on_retry) do
265
270
  templates_hash_install(@templates, @template_overwrite)
266
271
  end
267
272
  end
@@ -291,8 +296,14 @@ EOC
291
296
  @dump_proc = Yajl.method(:dump)
292
297
  end
293
298
 
299
+ raise Fluent::ConfigError, "`cloud_auth` must be present if `cloud_id` is present" if @cloud_id && @cloud_auth.nil?
294
300
  raise Fluent::ConfigError, "`password` must be present if `user` is present" if @user && @password.nil?
295
301
 
302
+ if @cloud_auth
303
+ @user = @cloud_auth.split(':', -1)[0]
304
+ @password = @cloud_auth.split(':', -1)[1]
305
+ end
306
+
296
307
  if @user && m = @user.match(/%{(?<user>.*)}/)
297
308
  @user = URI.encode_www_form_component(m["user"])
298
309
  end
@@ -470,7 +481,9 @@ EOC
470
481
 
471
482
  def handle_last_seen_es_major_version
472
483
  if @verify_es_version_at_startup && !dry_run?
473
- retry_operate(@max_retry_get_es_version, @fail_on_detecting_es_version_retry_exceed) do
484
+ retry_operate(@max_retry_get_es_version,
485
+ @fail_on_detecting_es_version_retry_exceed,
486
+ @catch_transport_exception_on_retry) do
474
487
  detect_es_major_version
475
488
  end
476
489
  else
@@ -555,7 +568,17 @@ EOC
555
568
  return Time.at(event_time).to_datetime
556
569
  end
557
570
 
571
+ def cloud_client
572
+ Elasticsearch::Client.new(
573
+ cloud_id: @cloud_id,
574
+ user: @user,
575
+ password: @password
576
+ )
577
+ end
578
+
558
579
  def client(host = nil, compress_connection = false)
580
+ return cloud_client if @cloud_id
581
+
559
582
  # check here to see if we already have a client connection for the given host
560
583
  connection_options = get_connection_options(host)
561
584
 
@@ -989,7 +1012,9 @@ EOC
989
1012
  log.debug("Template #{template_name} already exists (cached)")
990
1013
  end
991
1014
  else
992
- retry_operate(@max_retry_putting_template, @fail_on_putting_template_retry_exceed) do
1015
+ retry_operate(@max_retry_putting_template,
1016
+ @fail_on_putting_template_retry_exceed,
1017
+ @catch_transport_exception_on_retry) do
993
1018
  if customize_template
994
1019
  template_custom_install(template_name, @template_file, @template_overwrite, customize_template, @enable_ilm, deflector_alias, ilm_policy_id, host, target_index, @index_separator)
995
1020
  else
@@ -58,6 +58,7 @@ class ElasticsearchFallbackSelectorTest < Test::Unit::TestCase
58
58
  with_transporter_log true
59
59
  reload_connections true
60
60
  reload_after 10
61
+ catch_transport_exception_on_retry false # For fallback testing
61
62
  ]
62
63
  assert_raise(Elasticsearch::Transport::Transport::Errors::NotFound) do
63
64
  driver(config)
@@ -11,6 +11,9 @@ class TestElasticsearchIndexLifecycleManagement < Test::Unit::TestCase
11
11
  rescue LoadError
12
12
  omit "ILM testcase needs elasticsearch-xpack gem."
13
13
  end
14
+ if Gem::Version.create(::Elasticsearch::Transport::VERSION) < Gem::Version.create("7.4.0")
15
+ omit "elastisearch-ruby v7.4.0 or later is needed for ILM."
16
+ end
14
17
  Fluent::Plugin::ElasticsearchIndexLifecycleManagement.module_eval(<<-CODE)
15
18
  def client
16
19
  Elasticsearch::Client.new url: 'localhost:9200'
@@ -322,6 +322,19 @@ class ElasticsearchOutputTest < Test::Unit::TestCase
322
322
  assert_equal true, instance.client(nil, compressable).transport.options[:compression]
323
323
  end
324
324
 
325
+ test 'check configure cloud_id based client' do
326
+
327
+ config = %{
328
+ cloud_id "name:bG9jYWxob3N0JGFiY2QkZWZnaA=="
329
+ cloud_auth "some:auth"
330
+ }
331
+ instance = driver(config).instance
332
+
333
+ assert_equal "name:bG9jYWxob3N0JGFiY2QkZWZnaA==", instance.cloud_id
334
+ assert_equal "some", instance.user
335
+ assert_equal "auth", instance.password
336
+ end
337
+
325
338
  test 'configure Content-Type' do
326
339
  config = %{
327
340
  content_type application/x-ndjson
@@ -383,7 +396,13 @@ class ElasticsearchOutputTest < Test::Unit::TestCase
383
396
  data("legacy_template" => [true, "_template"],
384
397
  "new_template" => [false, "_index_template"])
385
398
  test 'valid configuration of index lifecycle management' do |data|
399
+ if Gem::Version.create(::Elasticsearch::Transport::VERSION) < Gem::Version.create("7.4.0")
400
+ omit "elastisearch-ruby v7.4.0 or later is needed for ILM."
401
+ end
386
402
  use_legacy_template_flag, endpoint = data
403
+ if !use_legacy_template_flag && Gem::Version.create(::Elasticsearch::Transport::VERSION) < Gem::Version.create("7.8.0")
404
+ omit "elastisearch-ruby v7.8.0 or later is needed."
405
+ end
387
406
  cwd = File.dirname(__FILE__)
388
407
  template_file = File.join(cwd, 'test_template.json')
389
408
 
@@ -419,7 +438,13 @@ class ElasticsearchOutputTest < Test::Unit::TestCase
419
438
  data("legacy_template" => [true, "_template"],
420
439
  "new_template" => [false, "_index_template"])
421
440
  test 'valid configuration of overwriting ilm_policy' do |data|
441
+ if Gem::Version.create(::Elasticsearch::Transport::VERSION) < Gem::Version.create("7.4.0")
442
+ omit "elastisearch-ruby v7.4.0 or later is needed for ILM."
443
+ end
422
444
  use_legacy_template_flag, endpoint = data
445
+ if !use_legacy_template_flag && Gem::Version.create(::Elasticsearch::Transport::VERSION) < Gem::Version.create("7.8.0")
446
+ omit "elastisearch-ruby v7.8.0 or later is needed."
447
+ end
423
448
  cwd = File.dirname(__FILE__)
424
449
  template_file = File.join(cwd, 'test_template.json')
425
450
 
@@ -823,6 +848,9 @@ class ElasticsearchOutputTest < Test::Unit::TestCase
823
848
  "new_template" => [false, "_index_template"])
824
849
  def test_template_already_present(data)
825
850
  use_legacy_template_flag, endpoint = data
851
+ if !use_legacy_template_flag && Gem::Version.create(::Elasticsearch::Transport::VERSION) < Gem::Version.create("7.8.0")
852
+ omit "elastisearch-ruby v7.8.0 or later is needed."
853
+ end
826
854
  config = %{
827
855
  host logs.google.com
828
856
  port 777
@@ -853,6 +881,9 @@ class ElasticsearchOutputTest < Test::Unit::TestCase
853
881
  "new_template" => [false, "_index_template"])
854
882
  def test_template_create(data)
855
883
  use_legacy_template_flag, endpoint = data
884
+ if !use_legacy_template_flag && Gem::Version.create(::Elasticsearch::Transport::VERSION) < Gem::Version.create("7.8.0")
885
+ omit "elastisearch-ruby v7.8.0 or later is needed."
886
+ end
856
887
  cwd = File.dirname(__FILE__)
857
888
  template_file = if use_legacy_template_flag
858
889
  File.join(cwd, 'test_template.json')
@@ -894,6 +925,9 @@ class ElasticsearchOutputTest < Test::Unit::TestCase
894
925
  "new_template" => [false, "_index_template"])
895
926
  def test_template_create_with_rollover_index_and_template_related_placeholders(data)
896
927
  use_legacy_template_flag, endpoint = data
928
+ if !use_legacy_template_flag && Gem::Version.create(::Elasticsearch::Transport::VERSION) < Gem::Version.create("7.8.0")
929
+ omit "elastisearch-ruby v7.8.0 or later is needed."
930
+ end
897
931
  cwd = File.dirname(__FILE__)
898
932
  template_file = if use_legacy_template_flag
899
933
  File.join(cwd, 'test_template.json')
@@ -959,6 +993,9 @@ class ElasticsearchOutputTest < Test::Unit::TestCase
959
993
  "new_template" => [false, "_index_template"])
960
994
  def test_template_create_with_rollover_index_and_template_related_placeholders_with_truncating_caches(data)
961
995
  use_legacy_template_flag, endpoint = data
996
+ if !use_legacy_template_flag && Gem::Version.create(::Elasticsearch::Transport::VERSION) < Gem::Version.create("7.8.0")
997
+ omit "elastisearch-ruby v7.8.0 or later is needed."
998
+ end
962
999
  cwd = File.dirname(__FILE__)
963
1000
  template_file = if use_legacy_template_flag
964
1001
  File.join(cwd, 'test_template.json')
@@ -1034,12 +1071,18 @@ class ElasticsearchOutputTest < Test::Unit::TestCase
1034
1071
  rescue LoadError
1035
1072
  omit "ILM testcase needs elasticsearch-xpack gem."
1036
1073
  end
1074
+ if Gem::Version.create(::Elasticsearch::Transport::VERSION) < Gem::Version.create("7.4.0")
1075
+ omit "elastisearch-ruby v7.4.0 or later is needed for ILM."
1076
+ end
1037
1077
  end
1038
1078
 
1039
1079
  data("legacy_template" => [true, "_template"],
1040
1080
  "new_template" => [false, "_index_template"])
1041
1081
  def test_template_create_with_rollover_index_and_default_ilm(data)
1042
1082
  use_legacy_template_flag, endpoint = data
1083
+ if !use_legacy_template_flag && Gem::Version.create(::Elasticsearch::Transport::VERSION) < Gem::Version.create("7.8.0")
1084
+ omit "elastisearch-ruby v7.8.0 or later is needed."
1085
+ end
1043
1086
  cwd = File.dirname(__FILE__)
1044
1087
  template_file = if use_legacy_template_flag
1045
1088
  File.join(cwd, 'test_template.json')
@@ -1120,6 +1163,9 @@ class ElasticsearchOutputTest < Test::Unit::TestCase
1120
1163
  "new_template" => [false, "_index_template"])
1121
1164
  def test_template_create_with_rollover_index_and_default_ilm_on_logstash_format(data)
1122
1165
  use_legacy_template_flag, endpoint = data
1166
+ if !use_legacy_template_flag && Gem::Version.create(::Elasticsearch::Transport::VERSION) < Gem::Version.create("7.8.0")
1167
+ omit "elastisearch-ruby v7.8.0 or later is needed."
1168
+ end
1123
1169
  cwd = File.dirname(__FILE__)
1124
1170
  template_file = if use_legacy_template_flag
1125
1171
  File.join(cwd, 'test_template.json')
@@ -1209,6 +1255,9 @@ class ElasticsearchOutputTest < Test::Unit::TestCase
1209
1255
  "new_template" => [false, "_index_template"])
1210
1256
  def test_template_create_with_rollover_index_and_default_ilm_and_ilm_policy_overwrite(data)
1211
1257
  use_legacy_template_flag, endpoint = data
1258
+ if !use_legacy_template_flag && Gem::Version.create(::Elasticsearch::Transport::VERSION) < Gem::Version.create("7.8.0")
1259
+ omit "elastisearch-ruby v7.8.0 or later is needed."
1260
+ end
1212
1261
  cwd = File.dirname(__FILE__)
1213
1262
  template_file = if use_legacy_template_flag
1214
1263
  File.join(cwd, 'test_template.json')
@@ -1316,6 +1365,9 @@ class ElasticsearchOutputTest < Test::Unit::TestCase
1316
1365
  "new_template" => [false, "_index_template"])
1317
1366
  def test_template_create_with_rollover_index_and_default_ilm_with_empty_index_date_pattern(data)
1318
1367
  use_legacy_template_flag, endpoint = data
1368
+ if !use_legacy_template_flag && Gem::Version.create(::Elasticsearch::Transport::VERSION) < Gem::Version.create("7.8.0")
1369
+ omit "elastisearch-ruby v7.8.0 or later is needed."
1370
+ end
1319
1371
  cwd = File.dirname(__FILE__)
1320
1372
  template_file = if use_legacy_template_flag
1321
1373
  File.join(cwd, 'test_template.json')
@@ -1396,6 +1448,9 @@ class ElasticsearchOutputTest < Test::Unit::TestCase
1396
1448
  "new_template" => [false, "_index_template"])
1397
1449
  def test_template_create_with_rollover_index_and_custom_ilm(data)
1398
1450
  use_legacy_template_flag, endpoint = data
1451
+ if !use_legacy_template_flag && Gem::Version.create(::Elasticsearch::Transport::VERSION) < Gem::Version.create("7.8.0")
1452
+ omit "elastisearch-ruby v7.8.0 or later is needed."
1453
+ end
1399
1454
  cwd = File.dirname(__FILE__)
1400
1455
  template_file = if use_legacy_template_flag
1401
1456
  File.join(cwd, 'test_template.json')
@@ -1477,6 +1532,9 @@ class ElasticsearchOutputTest < Test::Unit::TestCase
1477
1532
  "new_template" => [false, "_index_template"])
1478
1533
  def test_template_create_with_rollover_index_and_ilm_policies_and_placeholderstest_template_create_with_rollover_index_and_ilm_policies_and_placeholders(data)
1479
1534
  use_legacy_template_flag, endpoint = data
1535
+ if !use_legacy_template_flag && Gem::Version.create(::Elasticsearch::Transport::VERSION) < Gem::Version.create("7.8.0")
1536
+ omit "elastisearch-ruby v7.8.0 or later is needed."
1537
+ end
1480
1538
  cwd = File.dirname(__FILE__)
1481
1539
  template_file = if use_legacy_template_flag
1482
1540
  File.join(cwd, 'test_template.json')
@@ -1565,6 +1623,9 @@ class ElasticsearchOutputTest < Test::Unit::TestCase
1565
1623
  "new_template" => [false, "_index_template"])
1566
1624
  def test_tag_placeholder(data)
1567
1625
  use_legacy_template_flag, endpoint = data
1626
+ if !use_legacy_template_flag && Gem::Version.create(::Elasticsearch::Transport::VERSION) < Gem::Version.create("7.8.0")
1627
+ omit "elastisearch-ruby v7.8.0 or later is needed."
1628
+ end
1568
1629
  cwd = File.dirname(__FILE__)
1569
1630
  template_file = if use_legacy_template_flag
1570
1631
  File.join(cwd, 'test_template.json')
@@ -1652,6 +1713,9 @@ class ElasticsearchOutputTest < Test::Unit::TestCase
1652
1713
  "new_template" => [false, "_index_template"])
1653
1714
  def test_tag_placeholder_with_multiple_policies(data)
1654
1715
  use_legacy_template_flag, endpoint = data
1716
+ if !use_legacy_template_flag && Gem::Version.create(::Elasticsearch::Transport::VERSION) < Gem::Version.create("7.8.0")
1717
+ omit "elastisearch-ruby v7.8.0 or later is needed."
1718
+ end
1655
1719
  cwd = File.dirname(__FILE__)
1656
1720
  template_file = if use_legacy_template_flag
1657
1721
  File.join(cwd, 'test_template.json')
@@ -1740,6 +1804,9 @@ class ElasticsearchOutputTest < Test::Unit::TestCase
1740
1804
  "new_template" => [false, "_index_template"])
1741
1805
  def test_template_create_with_rollover_index_and_default_ilm_and_placeholders(data)
1742
1806
  use_legacy_template_flag, endpoint = data
1807
+ if !use_legacy_template_flag && Gem::Version.create(::Elasticsearch::Transport::VERSION) < Gem::Version.create("7.8.0")
1808
+ omit "elastisearch-ruby v7.8.0 or later is needed."
1809
+ end
1743
1810
  cwd = File.dirname(__FILE__)
1744
1811
  template_file = if use_legacy_template_flag
1745
1812
  File.join(cwd, 'test_template.json')
@@ -1867,6 +1934,9 @@ class ElasticsearchOutputTest < Test::Unit::TestCase
1867
1934
  "new_template" => [false, "_index_template"])
1868
1935
  def test_template_create_with_rollover_index_and_default_ilm_and_placeholders_and_index_separator(data)
1869
1936
  use_legacy_template_flag, endpoint = data
1937
+ if !use_legacy_template_flag && Gem::Version.create(::Elasticsearch::Transport::VERSION) < Gem::Version.create("7.8.0")
1938
+ omit "elastisearch-ruby v7.8.0 or later is needed."
1939
+ end
1870
1940
  cwd = File.dirname(__FILE__)
1871
1941
  template_file = if use_legacy_template_flag
1872
1942
  File.join(cwd, 'test_template.json')
@@ -1956,6 +2026,9 @@ class ElasticsearchOutputTest < Test::Unit::TestCase
1956
2026
  "new_template" => [false, "_index_template"])
1957
2027
  def test_template_create_with_rollover_index_and_default_ilm_and_custom_and_time_placeholders(data)
1958
2028
  use_legacy_template_flag, endpoint = data
2029
+ if !use_legacy_template_flag && Gem::Version.create(::Elasticsearch::Transport::VERSION) < Gem::Version.create("7.8.0")
2030
+ omit "elastisearch-ruby v7.8.0 or later is needed."
2031
+ end
1959
2032
  cwd = File.dirname(__FILE__)
1960
2033
  template_file = if use_legacy_template_flag
1961
2034
  File.join(cwd, 'test_template.json')
@@ -2050,6 +2123,10 @@ class ElasticsearchOutputTest < Test::Unit::TestCase
2050
2123
  "new_template" => [false, "_index_template"])
2051
2124
  def test_custom_template_create(data)
2052
2125
  use_legacy_template_flag, endpoint = data
2126
+
2127
+ if !use_legacy_template_flag && Gem::Version.create(::Elasticsearch::Transport::VERSION) < Gem::Version.create("7.8.0")
2128
+ omit "elastisearch-ruby v7.8.0 or later is needed."
2129
+ end
2053
2130
  cwd = File.dirname(__FILE__)
2054
2131
  template_file = if use_legacy_template_flag
2055
2132
  File.join(cwd, 'test_alias_template.json')
@@ -2092,6 +2169,9 @@ class ElasticsearchOutputTest < Test::Unit::TestCase
2092
2169
  "new_template" => [false, "_index_template"])
2093
2170
  def test_custom_template_create_with_customize_template_related_placeholders(data)
2094
2171
  use_legacy_template_flag, endpoint = data
2172
+ if !use_legacy_template_flag && Gem::Version.create(::Elasticsearch::Transport::VERSION) < Gem::Version.create("7.8.0")
2173
+ omit "elastisearch-ruby v7.8.0 or later is needed."
2174
+ end
2095
2175
  cwd = File.dirname(__FILE__)
2096
2176
  template_file = if use_legacy_template_flag
2097
2177
  File.join(cwd, 'test_alias_template.json')
@@ -2142,6 +2222,9 @@ class ElasticsearchOutputTest < Test::Unit::TestCase
2142
2222
  "new_template" => [false, "_index_template"])
2143
2223
  def test_custom_template_installation_for_host_placeholder(data)
2144
2224
  use_legacy_template_flag, endpoint = data
2225
+ if !use_legacy_template_flag && Gem::Version.create(::Elasticsearch::Transport::VERSION) < Gem::Version.create("7.8.0")
2226
+ omit "elastisearch-ruby v7.8.0 or later is needed."
2227
+ end
2145
2228
  cwd = File.dirname(__FILE__)
2146
2229
  template_file = if use_legacy_template_flag
2147
2230
  File.join(cwd, 'test_template.json')
@@ -2188,6 +2271,9 @@ class ElasticsearchOutputTest < Test::Unit::TestCase
2188
2271
  "new_template" => [false, "_index_template"])
2189
2272
  def test_custom_template_with_rollover_index_create(data)
2190
2273
  use_legacy_template_flag, endpoint = data
2274
+ if !use_legacy_template_flag && Gem::Version.create(::Elasticsearch::Transport::VERSION) < Gem::Version.create("7.8.0")
2275
+ omit "elastisearch-ruby v7.8.0 or later is needed."
2276
+ end
2191
2277
  cwd = File.dirname(__FILE__)
2192
2278
  template_file = if use_legacy_template_flag
2193
2279
  File.join(cwd, 'test_alias_template.json')
@@ -2246,6 +2332,9 @@ class ElasticsearchOutputTest < Test::Unit::TestCase
2246
2332
  "new_template" => [false, "_index_template"])
2247
2333
  def test_custom_template_with_rollover_index_create_and_deflector_alias(data)
2248
2334
  use_legacy_template_flag, endpoint = data
2335
+ if !use_legacy_template_flag && Gem::Version.create(::Elasticsearch::Transport::VERSION) < Gem::Version.create("7.8.0")
2336
+ omit "elastisearch-ruby v7.8.0 or later is needed."
2337
+ end
2249
2338
  cwd = File.dirname(__FILE__)
2250
2339
  template_file = if use_legacy_template_flag
2251
2340
  File.join(cwd, 'test_alias_template.json')
@@ -2305,6 +2394,9 @@ class ElasticsearchOutputTest < Test::Unit::TestCase
2305
2394
  "new_template" => [false, "_index_template"])
2306
2395
  def test_custom_template_with_rollover_index_create_with_logstash_format(data)
2307
2396
  use_legacy_template_flag, endpoint = data
2397
+ if !use_legacy_template_flag && Gem::Version.create(::Elasticsearch::Transport::VERSION) < Gem::Version.create("7.8.0")
2398
+ omit "elastisearch-ruby v7.8.0 or later is needed."
2399
+ end
2308
2400
  cwd = File.dirname(__FILE__)
2309
2401
  template_file = if use_legacy_template_flag
2310
2402
  File.join(cwd, 'test_alias_template.json')
@@ -2373,12 +2465,18 @@ class ElasticsearchOutputTest < Test::Unit::TestCase
2373
2465
  rescue LoadError
2374
2466
  omit "ILM testcase needs elasticsearch-xpack gem."
2375
2467
  end
2468
+ if Gem::Version.create(::Elasticsearch::Transport::VERSION) < Gem::Version.create("7.4.0")
2469
+ omit "elastisearch-ruby v7.4.0 or later is needed."
2470
+ end
2376
2471
  end
2377
2472
 
2378
2473
  data("legacy_template" => [true, "_template"],
2379
2474
  "new_template" => [false, "_index_template"])
2380
2475
  def test_custom_template_with_rollover_index_create_and_default_ilm(data)
2381
2476
  use_legacy_template_flag, endpoint = data
2477
+ if !use_legacy_template_flag && Gem::Version.create(::Elasticsearch::Transport::VERSION) < Gem::Version.create("7.8.0")
2478
+ omit "elastisearch-ruby v7.8.0 or later is needed."
2479
+ end
2382
2480
  cwd = File.dirname(__FILE__)
2383
2481
  template_file = if use_legacy_template_flag
2384
2482
  File.join(cwd, 'test_alias_template.json')
@@ -2463,6 +2561,9 @@ class ElasticsearchOutputTest < Test::Unit::TestCase
2463
2561
  "new_template" => [false, "_index_template"])
2464
2562
  def test_custom_template_with_rollover_index_create_and_default_ilm_and_ilm_policy_overwrite(data)
2465
2563
  use_legacy_template_flag, endpoint = data
2564
+ if !use_legacy_template_flag && Gem::Version.create(::Elasticsearch::Transport::VERSION) < Gem::Version.create("7.8.0")
2565
+ omit "elastisearch-ruby v7.8.0 or later is needed."
2566
+ end
2466
2567
  cwd = File.dirname(__FILE__)
2467
2568
  template_file = if use_legacy_template_flag
2468
2569
  File.join(cwd, 'test_alias_template.json')
@@ -2577,6 +2678,9 @@ class ElasticsearchOutputTest < Test::Unit::TestCase
2577
2678
  "new_template" => [false, "_index_template"])
2578
2679
  def test_custom_template_with_rollover_index_create_and_default_ilm_and_placeholders(data)
2579
2680
  use_legacy_template_flag, endpoint = data
2681
+ if !use_legacy_template_flag && Gem::Version.create(::Elasticsearch::Transport::VERSION) < Gem::Version.create("7.8.0")
2682
+ omit "elastisearch-ruby v7.8.0 or later is needed."
2683
+ end
2580
2684
  cwd = File.dirname(__FILE__)
2581
2685
  template_file = if use_legacy_template_flag
2582
2686
  File.join(cwd, 'test_alias_template.json')
@@ -2720,6 +2824,9 @@ class ElasticsearchOutputTest < Test::Unit::TestCase
2720
2824
  "new_template" => [false, "_index_template"])
2721
2825
  def test_custom_template_with_rollover_index_create_and_custom_ilm(data)
2722
2826
  use_legacy_template_flag, endpoint = data
2827
+ if !use_legacy_template_flag && Gem::Version.create(::Elasticsearch::Transport::VERSION) < Gem::Version.create("7.8.0")
2828
+ omit "elastisearch-ruby v7.8.0 or later is needed."
2829
+ end
2723
2830
  cwd = File.dirname(__FILE__)
2724
2831
  template_file = if use_legacy_template_flag
2725
2832
  File.join(cwd, 'test_alias_template.json')
@@ -2798,6 +2905,9 @@ class ElasticsearchOutputTest < Test::Unit::TestCase
2798
2905
  "new_template" => [false, "_index_template"])
2799
2906
  def test_template_overwrite(data)
2800
2907
  use_legacy_template_flag, endpoint = data
2908
+ if !use_legacy_template_flag && Gem::Version.create(::Elasticsearch::Transport::VERSION) < Gem::Version.create("7.8.0")
2909
+ omit "elastisearch-ruby v7.8.0 or later is needed."
2910
+ end
2801
2911
  cwd = File.dirname(__FILE__)
2802
2912
  template_file = if use_legacy_template_flag
2803
2913
  File.join(cwd, 'test_template.json')
@@ -2840,6 +2950,9 @@ class ElasticsearchOutputTest < Test::Unit::TestCase
2840
2950
  "new_template" => [false, "_index_template"])
2841
2951
  def test_custom_template_overwrite(data)
2842
2952
  use_legacy_template_flag, endpoint = data
2953
+ if !use_legacy_template_flag && Gem::Version.create(::Elasticsearch::Transport::VERSION) < Gem::Version.create("7.8.0")
2954
+ omit "elastisearch-ruby v7.8.0 or later is needed."
2955
+ end
2843
2956
  cwd = File.dirname(__FILE__)
2844
2957
  template_file = if use_legacy_template_flag
2845
2958
  File.join(cwd, 'test_template.json')
@@ -2883,6 +2996,9 @@ class ElasticsearchOutputTest < Test::Unit::TestCase
2883
2996
  "new_template" => [false, "_index_template"])
2884
2997
  def test_custom_template_with_rollover_index_overwrite(data)
2885
2998
  use_legacy_template_flag, endpoint = data
2999
+ if !use_legacy_template_flag && Gem::Version.create(::Elasticsearch::Transport::VERSION) < Gem::Version.create("7.8.0")
3000
+ omit "elastisearch-ruby v7.8.0 or later is needed."
3001
+ end
2886
3002
  cwd = File.dirname(__FILE__)
2887
3003
  template_file = if use_legacy_template_flag
2888
3004
  File.join(cwd, 'test_template.json')
@@ -2969,6 +3085,9 @@ class ElasticsearchOutputTest < Test::Unit::TestCase
2969
3085
  "new_template" => [false, "_index_template"])
2970
3086
  def test_template_create_for_host_placeholder(data)
2971
3087
  use_legacy_template_flag, endpoint = data
3088
+ if !use_legacy_template_flag && Gem::Version.create(::Elasticsearch::Transport::VERSION) < Gem::Version.create("7.8.0")
3089
+ omit "elastisearch-ruby v7.8.0 or later is needed."
3090
+ end
2972
3091
  cwd = File.dirname(__FILE__)
2973
3092
  template_file = if use_legacy_template_flag
2974
3093
  File.join(cwd, 'test_template.json')
@@ -3017,6 +3136,9 @@ class ElasticsearchOutputTest < Test::Unit::TestCase
3017
3136
  "new_template" => [false, "_index_template"])
3018
3137
  def test_template_retry_install_fails(data)
3019
3138
  use_legacy_template_flag, endpoint = data
3139
+ if !use_legacy_template_flag && Gem::Version.create(::Elasticsearch::Transport::VERSION) < Gem::Version.create("7.8.0")
3140
+ omit "elastisearch-ruby v7.8.0 or later is needed."
3141
+ end
3020
3142
  cwd = File.dirname(__FILE__)
3021
3143
  template_file = if use_legacy_template_flag
3022
3144
  File.join(cwd, 'test_template.json')
@@ -3052,10 +3174,54 @@ class ElasticsearchOutputTest < Test::Unit::TestCase
3052
3174
  assert_equal(4, connection_resets)
3053
3175
  end
3054
3176
 
3177
+ transport_errors_handled_separately = [Elasticsearch::Transport::Transport::Errors::NotFound]
3178
+ transport_errors = Elasticsearch::Transport::Transport::Errors.constants.map { |err| [err, Elasticsearch::Transport::Transport::Errors.const_get(err)] }
3179
+ transport_errors_hash = Hash[transport_errors.select { |err| !transport_errors_handled_separately.include?(err[1]) } ]
3180
+
3181
+ data(transport_errors_hash)
3182
+ def test_template_retry_transport_errors(error)
3183
+ endpoint, use_legacy_template_flag = if Gem::Version.create(::Elasticsearch::Transport::VERSION) >= Gem::Version.create("7.8.0")
3184
+ ["_index_template".freeze, false]
3185
+ else
3186
+ ["_template".freeze, true]
3187
+ end
3188
+ cwd = File.dirname(__FILE__)
3189
+ template_file = File.join(cwd, 'test_index_template.json')
3190
+
3191
+ config = %{
3192
+ host logs.google.com
3193
+ port 778
3194
+ scheme https
3195
+ path /es/
3196
+ user john
3197
+ password doe
3198
+ template_name logstash
3199
+ template_file #{template_file}
3200
+ max_retry_putting_template 0
3201
+ use_legacy_template #{use_legacy_template_flag}
3202
+ }
3203
+
3204
+ retries = 0
3205
+ stub_request(:get, "https://logs.google.com:778/es//#{endpoint}/logstash")
3206
+ .with(basic_auth: ['john', 'doe']) do |req|
3207
+ retries += 1
3208
+ raise error
3209
+ end
3210
+
3211
+ assert_raise(Fluent::Plugin::ElasticsearchError::RetryableOperationExhaustedFailure) do
3212
+ driver(config)
3213
+ end
3214
+
3215
+ assert_equal(1, retries)
3216
+ end
3217
+
3055
3218
  data("legacy_template" => [true, "_template"],
3056
3219
  "new_template" => [false, "_index_template"])
3057
3220
  def test_template_retry_install_does_not_fail(data)
3058
3221
  use_legacy_template_flag, endpoint = data
3222
+ if !use_legacy_template_flag && Gem::Version.create(::Elasticsearch::Transport::VERSION) < Gem::Version.create("7.8.0")
3223
+ omit "elastisearch-ruby v7.8.0 or later is needed."
3224
+ end
3059
3225
  cwd = File.dirname(__FILE__)
3060
3226
  template_file = if use_legacy_template_flag
3061
3227
  File.join(cwd, 'test_template.json')
@@ -3094,6 +3260,9 @@ class ElasticsearchOutputTest < Test::Unit::TestCase
3094
3260
  "new_template" => [false, "_index_template"])
3095
3261
  def test_templates_create(data)
3096
3262
  use_legacy_template_flag, endpoint = data
3263
+ if !use_legacy_template_flag && Gem::Version.create(::Elasticsearch::Transport::VERSION) < Gem::Version.create("7.8.0")
3264
+ omit "elastisearch-ruby v7.8.0 or later is needed."
3265
+ end
3097
3266
  cwd = File.dirname(__FILE__)
3098
3267
  template_file = if use_legacy_template_flag
3099
3268
  File.join(cwd, 'test_template.json')
@@ -3148,6 +3317,9 @@ class ElasticsearchOutputTest < Test::Unit::TestCase
3148
3317
  "new_template" => [false, "_index_template"])
3149
3318
  def test_templates_overwrite(data)
3150
3319
  use_legacy_template_flag, endpoint = data
3320
+ if !use_legacy_template_flag && Gem::Version.create(::Elasticsearch::Transport::VERSION) < Gem::Version.create("7.8.0")
3321
+ omit "elastisearch-ruby v7.8.0 or later is needed."
3322
+ end
3151
3323
  cwd = File.dirname(__FILE__)
3152
3324
  template_file = if use_legacy_template_flag
3153
3325
  File.join(cwd, 'test_template.json')
@@ -3202,6 +3374,9 @@ class ElasticsearchOutputTest < Test::Unit::TestCase
3202
3374
  "new_template" => [false, "_index_template"])
3203
3375
  def test_templates_are_also_used(data)
3204
3376
  use_legacy_template_flag, endpoint = data
3377
+ if !use_legacy_template_flag && Gem::Version.create(::Elasticsearch::Transport::VERSION) < Gem::Version.create("7.8.0")
3378
+ omit "elastisearch-ruby v7.8.0 or later is needed."
3379
+ end
3205
3380
  cwd = File.dirname(__FILE__)
3206
3381
  template_file = if use_legacy_template_flag
3207
3382
  File.join(cwd, 'test_template.json')
@@ -3258,6 +3433,9 @@ class ElasticsearchOutputTest < Test::Unit::TestCase
3258
3433
  "new_template" => [false, "_index_template"])
3259
3434
  def test_templates_can_be_partially_created_if_error_occurs(data)
3260
3435
  use_legacy_template_flag, endpoint = data
3436
+ if !use_legacy_template_flag && Gem::Version.create(::Elasticsearch::Transport::VERSION) < Gem::Version.create("7.8.0")
3437
+ omit "elastisearch-ruby v7.8.0 or later is needed."
3438
+ end
3261
3439
  cwd = File.dirname(__FILE__)
3262
3440
  template_file = if use_legacy_template_flag
3263
3441
  File.join(cwd, 'test_template.json')
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: 4.2.2
4
+ version: 4.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - diogo
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2020-10-16 00:00:00.000000000 Z
13
+ date: 2020-12-04 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: fluentd
@@ -135,6 +135,8 @@ extra_rdoc_files: []
135
135
  files:
136
136
  - ".coveralls.yml"
137
137
  - ".editorconfig"
138
+ - ".github/ISSUE_TEMPLATE/bug_report.md"
139
+ - ".github/ISSUE_TEMPLATE/feature_request.md"
138
140
  - ".github/workflows/issue-auto-closer.yml"
139
141
  - ".github/workflows/linux.yml"
140
142
  - ".github/workflows/macos.yml"