fluent-plugin-elasticsearch 5.4.2 → 5.4.3

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d654e4c24122a1f08b7440556ff43eca647e9aae360c4ebc43f4e29d7a8abfec
4
- data.tar.gz: 961f8dab627d2628e854e4b6b64a30fb3719c8387dfd73a67aa6da8f059eb447
3
+ metadata.gz: 542a7706becd1b24f8d3e6ad8957015dba5f721b3a93047ec4bea80313df8200
4
+ data.tar.gz: 8104645d96578abf0f4357a22c83a7f9cbc548e7bbc35ef5eeb8726deaada6f8
5
5
  SHA512:
6
- metadata.gz: 78d3e7ab001e326c47a192798da97b9d44956db46869b807589818469b8c74cfc36bc936c67f2fdffed3c2f2967d4c9ede1737c8c6d774362f524861eee74186
7
- data.tar.gz: 85e1144f3b227d28772cf785932a44bdf6d73307b7cc0401098acd97083b9638089d5a1e5ad2343cc9a7f64f4d93e274db99419fe07fdfe5b785176d667e6592
6
+ metadata.gz: 93a2a932a766170b197f3ded762c89912f743cec3ddcef3e7719d8ca57b504f6f7b51bc17bac02ef5073fd1fade3366140a7d775351c8b86b1f05693a76be122
7
+ data.tar.gz: 35b82c172909a1f47dc74507c7ea9df451576b9cb1c8dcba85fdb094b3568b2187aafa1aecbd3367ef2ab0a347a30f90d8b663780e3261bdefc5dcb2b24f0133
data/History.md CHANGED
@@ -2,7 +2,10 @@
2
2
 
3
3
  ### [Unreleased]
4
4
 
5
- ### 5.4.1
5
+ ### 5.4.3
6
+ - add data_stream_template\_use\_index\_patterns\_wildcard in elasticsearch\_data\_stream (#1040)
7
+
8
+ ### 5.4.2
6
9
  - in\_elasticsearch: Avoid to use deprecated endpoint for clear\_scroll (#1039)
7
10
 
8
11
  ### 5.4.1
data/README.md CHANGED
@@ -1561,6 +1561,50 @@ Default value is `false`.
1561
1561
 
1562
1562
  **NOTE:** This parameter requests to install elasticsearch-xpack gem.
1563
1563
 
1564
+ ### data_stream_template_use_index_patterns_wildcard
1565
+
1566
+ Specify whether index patterns should include a wildcard (*) when creating an index template. This is particularly useful to prevent errors in scenarios where index templates are generated automatically, and multiple services with distinct suffixes are in use.
1567
+
1568
+ Default value is `true`.
1569
+
1570
+ Consider the following JSON error response when index patterns clash due to wildcard usage:
1571
+ ```json
1572
+ {
1573
+ "error": {
1574
+ "root_cause": [
1575
+ {
1576
+ "type": "illegal_argument_exception",
1577
+ "reason": "index template [eks-kube-apiserver] has index patterns [eks-kube-apiserver*] matching patterns from existing templates [eks-kube-apiserver-audit] with patterns (eks-kube-apiserver-audit => [eks-kube-apiserver-audit*]) that have the same priority [0], multiple index templates may not match during index creation, please use a different priority"
1578
+ }
1579
+ ],
1580
+ "type": "illegal_argument_exception",
1581
+ "reason": "index template [eks-kube-apiserver] has index patterns [eks-kube-apiserver*] matching patterns from existing templates [eks-kube-apiserver-audit] with patterns (eks-kube-apiserver-audit => [eks-kube-apiserver-audit*]) that have the same priority [0], multiple index templates may not match during index creation, please use a different priority"
1582
+ },
1583
+ "status": 400
1584
+ }
1585
+ ```
1586
+
1587
+ #### Usage Examples
1588
+
1589
+ When `data_stream_template_use_index_patterns_wildcard` is set to `true` (default):
1590
+
1591
+ ```
1592
+ data_stream_name: foo
1593
+ data_stream_template_use_index_patterns_wildcard: true
1594
+ ```
1595
+
1596
+ In this case, the resulting index patterns will be: `["foo*"]`
1597
+
1598
+ When `data_stream_template_use_index_patterns_wildcard` is set to `false`:
1599
+
1600
+ ```
1601
+ data_stream_name: foo
1602
+ data_stream_template_use_index_patterns_wildcard: false
1603
+ ```
1604
+
1605
+ The resulting index patterns will be: `["foo"]`
1606
+
1607
+
1564
1608
  ## Troubleshooting
1565
1609
 
1566
1610
  See [Troubleshooting document](README.Troubleshooting.md)
@@ -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 = '5.4.2'
6
+ s.version = '5.4.3'
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}
@@ -13,6 +13,7 @@ module Fluent::Plugin
13
13
  config_param :data_stream_template_name, :string, :default => nil
14
14
  config_param :data_stream_ilm_policy, :string, :default => nil
15
15
  config_param :data_stream_ilm_policy_overwrite, :bool, :default => false
16
+ config_param :data_stream_template_use_index_patterns_wildcard, :bool, :default => true
16
17
 
17
18
  # Elasticsearch 7.9 or later always support new style of index template.
18
19
  config_set_default :use_legacy_template, false
@@ -112,8 +113,9 @@ module Fluent::Plugin
112
113
 
113
114
  def create_index_template(datastream_name, template_name, ilm_name, host = nil)
114
115
  return if data_stream_exist?(datastream_name, host) or template_exists?(template_name, host)
116
+ wildcard = @data_stream_template_use_index_patterns_wildcard ? '*' : ''
115
117
  body = {
116
- "index_patterns" => ["#{datastream_name}*"],
118
+ "index_patterns" => ["#{datastream_name}#{wildcard}"],
117
119
  "data_stream" => {},
118
120
  "template" => {
119
121
  "settings" => {
@@ -34,6 +34,10 @@ class ElasticsearchOutputDataStreamTest < Test::Unit::TestCase
34
34
  '_ilm'.freeze
35
35
  end
36
36
 
37
+ def index_template_endpoint
38
+ '_index_template'.freeze
39
+ end
40
+
37
41
  def driver(conf='', es_version=elasticsearch_version.to_i, client_version=elasticsearch_version)
38
42
  # For request stub to detect compatibility.
39
43
  @es_version ||= es_version
@@ -124,7 +128,6 @@ class ElasticsearchOutputDataStreamTest < Test::Unit::TestCase
124
128
  stub_request(:get, "#{url}/_index_template/#{name}").to_return(:status => [404, TRANSPORT_CLASS::Transport::Errors::NotFound], :headers => {'x-elastic-product' => 'Elasticsearch'})
125
129
  end
126
130
 
127
-
128
131
  def push_bulk_request(req_body)
129
132
  # bulk data must be pair of OP and records
130
133
  # {"create": {}}\nhttp://localhost:9200/_ilm/policy/foo_ilm_bar
@@ -486,7 +489,8 @@ class ElasticsearchOutputDataStreamTest < Test::Unit::TestCase
486
489
  '@type' => ELASTIC_DATA_STREAM_TYPE,
487
490
  'data_stream_name' => 'foo',
488
491
  'data_stream_ilm_name' => "foo_ilm_policy",
489
- 'data_stream_template_name' => "foo_tpl"
492
+ 'data_stream_template_name' => "foo_tpl",
493
+ 'data_stream_template_use_index_patterns_wildcard' => false
490
494
  })
491
495
  assert_equal "foo", driver(conf).instance.data_stream_name
492
496
  end
@@ -556,6 +560,21 @@ class ElasticsearchOutputDataStreamTest < Test::Unit::TestCase
556
560
  assert_equal true, driver(config).instance.compression
557
561
  end
558
562
 
563
+ def test_configure_wildcard_usage
564
+ omit REQUIRED_ELASTIC_MESSAGE unless data_stream_supported?
565
+
566
+ config = %{
567
+ data_stream_name foo
568
+ data_stream_template_name foo_tpl
569
+ data_stream_ilm_name foo_ilm_policy
570
+ data_stream_template_use_index_patterns_wildcard false
571
+ }
572
+
573
+ stub_default
574
+
575
+ assert_equal false, driver(config).instance.data_stream_template_use_index_patterns_wildcard
576
+ end
577
+
559
578
  def test_check_compression_strategy
560
579
  omit REQUIRED_ELASTIC_MESSAGE unless data_stream_supported?
561
580
 
@@ -722,6 +741,72 @@ class ElasticsearchOutputDataStreamTest < Test::Unit::TestCase
722
741
  assert_equal "foo_policy", driver(conf).instance.data_stream_ilm_name
723
742
  end
724
743
 
744
+ def test_template_index_patterns_with_wildcard
745
+ omit REQUIRED_ELASTIC_MESSAGE unless data_stream_supported?
746
+
747
+ stub_existent_ilm?
748
+
749
+ stub_nonexistent_data_stream?
750
+ stub_data_stream
751
+
752
+ stub_nonexistent_template?("foo_template")
753
+ stub_request(:put, "http://localhost:9200/#{index_template_endpoint}/foo_template").with do |req|
754
+ # bulk data must be pair of OP and records
755
+ # {"create": {}}\nhttp://localhost:9200/_index_template//foo_template
756
+ # {"@timestamp": ...}
757
+ push_bulk_request(req.body)
758
+ end.to_return({:status => 200, :body => "{}", :headers => { 'Content-Type' => 'json', 'x-elastic-product' => 'Elasticsearch' } })
759
+
760
+ conf = config_element(
761
+ 'ROOT', '', {
762
+ '@type' => ELASTIC_DATA_STREAM_TYPE,
763
+ 'data_stream_name' => 'foo',
764
+ 'data_stream_ilm_name' => 'foo_ilm_policy',
765
+ 'data_stream_template_use_index_patterns_wildcard' => false
766
+ })
767
+
768
+ assert_nothing_raised {
769
+ driver(conf)
770
+ }
771
+
772
+ assert_requested(:put, "http://localhost:9200/#{index_template_endpoint}/foo_template",
773
+ body: '{"index_patterns":["foo"],"data_stream":{},"template":{"settings":{"index.lifecycle.name":"foo_ilm_policy"}}}',
774
+ times: 1)
775
+ end
776
+
777
+ def test_template_index_patterns_without_wildcard
778
+ omit REQUIRED_ELASTIC_MESSAGE unless data_stream_supported?
779
+
780
+ stub_existent_ilm?
781
+
782
+ stub_nonexistent_data_stream?
783
+ stub_data_stream
784
+
785
+ stub_nonexistent_template?("foo_template")
786
+ stub_request(:put, "http://localhost:9200/#{index_template_endpoint}/foo_template").with do |req|
787
+ # bulk data must be pair of OP and records
788
+ # {"create": {}}\nhttp://localhost:9200/_index_template//foo_template
789
+ # {"@timestamp": ...}
790
+ push_bulk_request(req.body)
791
+ end.to_return({:status => 200, :body => "{}", :headers => { 'Content-Type' => 'json', 'x-elastic-product' => 'Elasticsearch' } })
792
+
793
+ conf = config_element(
794
+ 'ROOT', '', {
795
+ '@type' => ELASTIC_DATA_STREAM_TYPE,
796
+ 'data_stream_name' => 'foo',
797
+ 'data_stream_ilm_name' => 'foo_ilm_policy',
798
+ 'data_stream_template_use_index_patterns_wildcard' => true
799
+ })
800
+
801
+ assert_nothing_raised {
802
+ driver(conf)
803
+ }
804
+
805
+ assert_requested(:put, "http://localhost:9200/#{index_template_endpoint}/foo_template",
806
+ body: '{"index_patterns":["foo*"],"data_stream":{},"template":{"settings":{"index.lifecycle.name":"foo_ilm_policy"}}}',
807
+ times: 1)
808
+ end
809
+
725
810
  def test_placeholder
726
811
  omit REQUIRED_ELASTIC_MESSAGE unless data_stream_supported?
727
812
 
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: 5.4.2
4
+ version: 5.4.3
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: 2023-12-05 00:00:00.000000000 Z
13
+ date: 2024-01-15 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: fluentd