fluent-plugin-elasticsearch 4.2.1 → 4.2.2

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: 9eb6b06e90f827162d669e94fb9a622c09f12b35e0a05f82c961ad870e3f9726
4
- data.tar.gz: c7964330b33c36176e4b1238e4ba4f2d55e60e6ee6da4fec6799f25d943ab85f
3
+ metadata.gz: d54b3f207af54f6fb5d3119f2d6d649478e25471fda03c56e00f9206ae72914e
4
+ data.tar.gz: 82eea8ed3938919f6860582698ce1253214531c806c132723e8845adfb45e2e0
5
5
  SHA512:
6
- metadata.gz: fd5d961731f5866a7c841f9cbeb11f8434868988862cb9929af4cfbe174a7ce65c38d125b91dc8952120be2da4b5ad08e89c127f9c65b9e38585185acccd1cdc
7
- data.tar.gz: 0c15c5670b0a2a9eda90b6962768c8db7e510e2da4b2434e3cb841d2fa5b15cf52a8f65f35b4236ab01cb8721d640c690f3bf753a4f4f269b2c802d9f2d7a9b6
6
+ metadata.gz: c4fd2785f716d97cb8c44845c51f933f7d0ee69fe3e2911f85bf621d043015e815639350e363ce42866b224905fc20ae12b3666d302e5f1f07937f047123b20d
7
+ data.tar.gz: 15d34dc457c5a98b77f2142b271d3f4ef5f611e38caeb4f225f12dcfc2c3771dea0153bae3ebe99a83cc71c6e414d67e39fea1d2fa1fa430049f90839c677578
data/History.md CHANGED
@@ -2,6 +2,12 @@
2
2
 
3
3
  ### [Unreleased]
4
4
 
5
+ ### 4.2.2
6
+ - Remove unnecessary nil check (#826)
7
+ - Fix ILM rollover index template pattern to apply index_separator (#825)
8
+ - Fix ILM rollover alias creation when a placeholder is used in index_name (#823)
9
+ - Add a note about the pitfalls of per-date indexes used with ILM (#822)
10
+
5
11
  ### 4.2.1
6
12
  - Update a broken link (#821)
7
13
  - Include chunk_id in records (#820)
data/README.md CHANGED
@@ -1881,6 +1881,16 @@ template_name your-fluentd-template
1881
1881
  template_file /path/to/fluentd-template.json
1882
1882
  ```
1883
1883
 
1884
+ Note that if you create a new set of indexes every day, the elasticsearch ILM policy system will treat each day separately and will always
1885
+ maintain a separate active write index for each day.
1886
+
1887
+ If you have a rollover based on max_age, it will continue to roll the indexes for prior dates even if no new documents are indexed. If you want
1888
+ to delete indexes after a period of time, the ILM policy will never delete the current write index regardless of its age, so you would need a separate
1889
+ system, such as curator, to actually delete the old indexes.
1890
+
1891
+ For this reason, if you put the date into the index names with ILM you should only rollover based on size or number of documents and may need to use
1892
+ curator to actually delete old indexes.
1893
+
1884
1894
  #### Fixed ILM indices
1885
1895
 
1886
1896
  Also, users can use fixed ILM indices configuration.
@@ -1996,4 +2006,7 @@ Install dev dependencies:
1996
2006
  $ gem install bundler
1997
2007
  $ bundle install
1998
2008
  $ bundle exec rake test
2009
+ # To just run the test you are working on:
2010
+ $ bundle exec rake test TEST=test/plugin/test_out_elasticsearch.rb TESTOPTS='--verbose --name=test_custom_template_with_rollover_index_create_and_custom_ilm'
2011
+
1999
2012
  ```
@@ -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.1'
6
+ s.version = '4.2.2'
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}
@@ -73,14 +73,15 @@ module Fluent::ElasticsearchIndexTemplate
73
73
  end
74
74
  end
75
75
 
76
- def template_install(name, template_file, overwrite, enable_ilm = false, deflector_alias_name = nil, ilm_policy_id = nil, host = nil, target_index = nil)
76
+ def template_install(name, template_file, overwrite, enable_ilm = false, deflector_alias_name = nil, ilm_policy_id = nil, host = nil, target_index = nil, index_separator = '-')
77
77
  inject_template_name = get_template_name(enable_ilm, name, deflector_alias_name)
78
78
  if overwrite
79
79
  template_put(inject_template_name,
80
80
  enable_ilm ? inject_ilm_settings_to_template(deflector_alias_name,
81
81
  target_index,
82
82
  ilm_policy_id,
83
- get_template(template_file)) :
83
+ get_template(template_file),
84
+ index_separator) :
84
85
  get_template(template_file), host)
85
86
 
86
87
  log.debug("Template '#{inject_template_name}' overwritten with #{template_file}.")
@@ -91,7 +92,8 @@ module Fluent::ElasticsearchIndexTemplate
91
92
  enable_ilm ? inject_ilm_settings_to_template(deflector_alias_name,
92
93
  target_index,
93
94
  ilm_policy_id,
94
- get_template(template_file)) :
95
+ get_template(template_file),
96
+ index_separator) :
95
97
  get_template(template_file), host)
96
98
  log.info("Template configured, but no template installed. Installed '#{inject_template_name}' from #{template_file}.")
97
99
  else
@@ -99,14 +101,15 @@ module Fluent::ElasticsearchIndexTemplate
99
101
  end
100
102
  end
101
103
 
102
- def template_custom_install(template_name, template_file, overwrite, customize_template, enable_ilm, deflector_alias_name, ilm_policy_id, host, target_index)
104
+ def template_custom_install(template_name, template_file, overwrite, customize_template, enable_ilm, deflector_alias_name, ilm_policy_id, host, target_index, index_separator)
103
105
  template_custom_name = get_template_name(enable_ilm, template_name, deflector_alias_name)
104
106
  custom_template = if enable_ilm
105
107
  inject_ilm_settings_to_template(deflector_alias_name,
106
108
  target_index,
107
109
  ilm_policy_id,
108
110
  get_custom_template(template_file,
109
- customize_template))
111
+ customize_template),
112
+ index_separator)
110
113
  else
111
114
  get_custom_template(template_file, customize_template)
112
115
  end
@@ -127,9 +130,9 @@ module Fluent::ElasticsearchIndexTemplate
127
130
  enable_ilm ? deflector_alias_name : template_name
128
131
  end
129
132
 
130
- def inject_ilm_settings_to_template(deflector_alias, target_index, ilm_policy_id, template)
133
+ def inject_ilm_settings_to_template(deflector_alias, target_index, ilm_policy_id, template, index_separator)
131
134
  log.debug("Overwriting index patterns when Index Lifecycle Management is enabled.")
132
- template['index_patterns'] = "#{target_index}-*"
135
+ template['index_patterns'] = "#{target_index}#{index_separator}*"
133
136
  if @use_legacy_template
134
137
  template.delete('template') if template.include?('template')
135
138
  # Prepare settings Hash
@@ -140,7 +143,7 @@ module Fluent::ElasticsearchIndexTemplate
140
143
  log.debug("Overwriting index lifecycle name and rollover alias when Index Lifecycle Management is enabled.")
141
144
  end
142
145
  template['settings'].update({ 'index.lifecycle.name' => ilm_policy_id, 'index.lifecycle.rollover_alias' => deflector_alias})
143
- template['order'] = template['order'] ? template['order'] + target_index.split('-').length : 50 + target_index.split('-').length
146
+ template['order'] = template['order'] ? template['order'] + target_index.count(index_separator) + 1 : 51 + target_index.count(index_separator)
144
147
  else
145
148
  # Prepare template.settings Hash
146
149
  if !template['template'].key?('settings')
@@ -150,7 +153,7 @@ module Fluent::ElasticsearchIndexTemplate
150
153
  log.debug("Overwriting index lifecycle name and rollover alias when Index Lifecycle Management is enabled.")
151
154
  end
152
155
  template['template']['settings'].update({ 'index.lifecycle.name' => ilm_policy_id, 'index.lifecycle.rollover_alias' => deflector_alias})
153
- template['priority'] = template['priority'] ? template['priority'] + target_index.split('-').length : 100 + target_index.split('-').length
156
+ template['priority'] = template['priority'] ? template['priority'] + target_index.count(index_separator) + 1 : 101 + target_index.count(index_separator)
154
157
  end
155
158
  template
156
159
  end
@@ -259,7 +259,7 @@ EOC
259
259
  template_installation_actual(@deflector_alias ? @deflector_alias : @index_name, @template_name, @customize_template, @application_name, @index_name, @ilm_policy_id)
260
260
  end
261
261
  verify_ilm_working if @enable_ilm
262
- end
262
+ end
263
263
  if @templates
264
264
  retry_operate(@max_retry_putting_template, @fail_on_putting_template_retry_exceed) do
265
265
  templates_hash_install(@templates, @template_overwrite)
@@ -982,22 +982,24 @@ EOC
982
982
 
983
983
  def template_installation_actual(deflector_alias, template_name, customize_template, application_name, target_index, ilm_policy_id, host=nil)
984
984
  if template_name && @template_file
985
- if !@logstash_format && @alias_indexes.include?(deflector_alias)
986
- log.debug("Index alias #{deflector_alias} already exists (cached)")
987
- elsif !@logstash_format && @template_names.include?(template_name)
988
- log.debug("Template name #{template_name} already exists (cached)")
985
+ if !@logstash_format && (deflector_alias.nil? || (@alias_indexes.include? deflector_alias)) && (@template_names.include? template_name)
986
+ if deflector_alias
987
+ log.debug("Index alias #{deflector_alias} and template #{template_name} already exist (cached)")
988
+ else
989
+ log.debug("Template #{template_name} already exists (cached)")
990
+ end
989
991
  else
990
992
  retry_operate(@max_retry_putting_template, @fail_on_putting_template_retry_exceed) do
991
993
  if customize_template
992
- template_custom_install(template_name, @template_file, @template_overwrite, customize_template, @enable_ilm, deflector_alias, ilm_policy_id, host, target_index)
994
+ template_custom_install(template_name, @template_file, @template_overwrite, customize_template, @enable_ilm, deflector_alias, ilm_policy_id, host, target_index, @index_separator)
993
995
  else
994
- template_install(template_name, @template_file, @template_overwrite, @enable_ilm, deflector_alias, ilm_policy_id, host, target_index)
996
+ template_install(template_name, @template_file, @template_overwrite, @enable_ilm, deflector_alias, ilm_policy_id, host, target_index, @index_separator)
995
997
  end
996
998
  ilm_policy = @ilm_policies[ilm_policy_id] || {}
997
999
  create_rollover_alias(target_index, @rollover_index, deflector_alias, application_name, @index_date_pattern, @index_separator, @enable_ilm, ilm_policy_id, ilm_policy, @ilm_policy_overwrite, host)
998
1000
  end
999
1001
  @alias_indexes << deflector_alias unless deflector_alias.nil?
1000
- @template_names << template_name unless template_name.nil?
1002
+ @template_names << template_name
1001
1003
  end
1002
1004
  end
1003
1005
  end
@@ -1775,30 +1775,65 @@ class ElasticsearchOutputTest < Test::Unit::TestCase
1775
1775
  with(basic_auth: ['john', 'doe']).
1776
1776
  to_return(:status => 200, :body => "", :headers => {})
1777
1777
  # check if alias exists
1778
- stub_request(:head, "https://logs.google.com:777/es//_alias/logstash-test").
1778
+ stub_request(:head, "https://logs.google.com:777/es//_alias/logstash-tag1").
1779
1779
  with(basic_auth: ['john', 'doe']).
1780
1780
  to_return(:status => 404, :body => "", :headers => {})
1781
- stub_request(:get, "https://logs.google.com:777/es//#{endpoint}/logstash-test").
1781
+ stub_request(:get, "https://logs.google.com:777/es//#{endpoint}/logstash-tag1").
1782
1782
  with(basic_auth: ['john', 'doe']).
1783
1783
  to_return(status: 404, body: "", headers: {})
1784
1784
  if use_legacy_template_flag
1785
- stub_request(:put, "https://logs.google.com:777/es//#{endpoint}/logstash-test").
1785
+ stub_request(:put, "https://logs.google.com:777/es//#{endpoint}/logstash-tag1").
1786
1786
  with(basic_auth: ['john', 'doe'],
1787
- body: "{\"settings\":{\"number_of_shards\":1,\"index.lifecycle.name\":\"logstash-policy\",\"index.lifecycle.rollover_alias\":\"logstash-test\"},\"mappings\":{\"type1\":{\"_source\":{\"enabled\":false},\"properties\":{\"host_name\":{\"type\":\"string\",\"index\":\"not_analyzed\"},\"created_at\":{\"type\":\"date\",\"format\":\"EEE MMM dd HH:mm:ss Z YYYY\"}}}},\"index_patterns\":\"logstash-test-*\",\"order\":52}").
1787
+ body: "{\"settings\":{\"number_of_shards\":1,\"index.lifecycle.name\":\"logstash-policy\",\"index.lifecycle.rollover_alias\":\"logstash-tag1\"},\"mappings\":{\"type1\":{\"_source\":{\"enabled\":false},\"properties\":{\"host_name\":{\"type\":\"string\",\"index\":\"not_analyzed\"},\"created_at\":{\"type\":\"date\",\"format\":\"EEE MMM dd HH:mm:ss Z YYYY\"}}}},\"index_patterns\":\"logstash-tag1-*\",\"order\":52}").
1788
1788
  to_return(status: 200, body: "", headers: {})
1789
1789
  else
1790
- stub_request(:put, "https://logs.google.com:777/es//#{endpoint}/logstash-test").
1790
+ stub_request(:put, "https://logs.google.com:777/es//#{endpoint}/logstash-tag1").
1791
1791
  with(basic_auth: ['john', 'doe'],
1792
- body: "{\"index_patterns\":\"logstash-test-*\",\"template\":{\"settings\":{\"number_of_shards\":1,\"index.lifecycle.name\":\"logstash-policy\",\"index.lifecycle.rollover_alias\":\"logstash-test\"},\"mappings\":{\"type1\":{\"_source\":{\"enabled\":false},\"properties\":{\"host_name\":{\"type\":\"string\",\"index\":\"not_analyzed\"},\"created_at\":{\"type\":\"date\",\"format\":\"EEE MMM dd HH:mm:ss Z YYYY\"}}}}},\"priority\":102}").
1792
+ body: "{\"index_patterns\":\"logstash-tag1-*\",\"template\":{\"settings\":{\"number_of_shards\":1,\"index.lifecycle.name\":\"logstash-policy\",\"index.lifecycle.rollover_alias\":\"logstash-tag1\"},\"mappings\":{\"type1\":{\"_source\":{\"enabled\":false},\"properties\":{\"host_name\":{\"type\":\"string\",\"index\":\"not_analyzed\"},\"created_at\":{\"type\":\"date\",\"format\":\"EEE MMM dd HH:mm:ss Z YYYY\"}}}}},\"priority\":102}").
1793
1793
  to_return(status: 200, body: "", headers: {})
1794
1794
  end
1795
1795
  # put the alias for the index
1796
- stub_request(:put, "https://logs.google.com:777/es//%3Clogstash-test-default-%7Bnow%2Fw%7Bxxxx.ww%7D%7D-000001%3E").
1796
+ stub_request(:put, "https://logs.google.com:777/es//%3Clogstash-tag1-default-%7Bnow%2Fw%7Bxxxx.ww%7D%7D-000001%3E").
1797
1797
  with(basic_auth: ['john', 'doe']).
1798
1798
  to_return(:status => 200, :body => "", :headers => {})
1799
- stub_request(:put, "https://logs.google.com:777/es//%3Clogstash-test-default-%7Bnow%2Fw%7Bxxxx.ww%7D%7D-000001%3E/#{alias_endpoint}/logstash-test").
1799
+ stub_request(:put, "https://logs.google.com:777/es//%3Clogstash-tag1-default-%7Bnow%2Fw%7Bxxxx.ww%7D%7D-000001%3E/#{alias_endpoint}/logstash-tag1").
1800
1800
  with(basic_auth: ['john', 'doe'],
1801
- :body => "{\"aliases\":{\"logstash-test\":{\"is_write_index\":true}}}").
1801
+ :body => "{\"aliases\":{\"logstash-tag1\":{\"is_write_index\":true}}}").
1802
+ to_return(:status => 200, :body => "", :headers => {})
1803
+ stub_request(:get, "https://logs.google.com:777/es//_xpack").
1804
+ with(basic_auth: ['john', 'doe']).
1805
+ to_return(:status => 200, :body => '{"features":{"ilm":{"available":true,"enabled":true}}}', :headers => {"Content-Type"=> "application/json"})
1806
+ stub_request(:get, "https://logs.google.com:777/es//_ilm/policy/logstash-policy").
1807
+ with(basic_auth: ['john', 'doe']).
1808
+ to_return(:status => 404, :body => "", :headers => {})
1809
+ stub_request(:put, "https://logs.google.com:777/es//_ilm/policy/logstash-policy").
1810
+ with(basic_auth: ['john', 'doe'],
1811
+ :body => "{\"policy\":{\"phases\":{\"hot\":{\"actions\":{\"rollover\":{\"max_size\":\"50gb\",\"max_age\":\"30d\"}}}}}}").
1812
+ to_return(:status => 200, :body => "", :headers => {})
1813
+ # check if alias exists
1814
+ stub_request(:head, "https://logs.google.com:777/es//_alias/logstash-tag2").
1815
+ with(basic_auth: ['john', 'doe']).
1816
+ to_return(:status => 404, :body => "", :headers => {})
1817
+ stub_request(:get, "https://logs.google.com:777/es//#{endpoint}/logstash-tag2").
1818
+ with(basic_auth: ['john', 'doe']).
1819
+ to_return(status: 404, body: "", headers: {})
1820
+ if use_legacy_template_flag
1821
+ stub_request(:put, "https://logs.google.com:777/es//#{endpoint}/logstash-tag2").
1822
+ with(basic_auth: ['john', 'doe'],
1823
+ body: "{\"settings\":{\"number_of_shards\":1,\"index.lifecycle.name\":\"logstash-policy\",\"index.lifecycle.rollover_alias\":\"logstash-tag2\"},\"mappings\":{\"type1\":{\"_source\":{\"enabled\":false},\"properties\":{\"host_name\":{\"type\":\"string\",\"index\":\"not_analyzed\"},\"created_at\":{\"type\":\"date\",\"format\":\"EEE MMM dd HH:mm:ss Z YYYY\"}}}},\"index_patterns\":\"logstash-tag2-*\",\"order\":52}").
1824
+ to_return(status: 200, body: "", headers: {})
1825
+ else
1826
+ stub_request(:put, "https://logs.google.com:777/es//#{endpoint}/logstash-tag2").
1827
+ with(basic_auth: ['john', 'doe'],
1828
+ body: "{\"index_patterns\":\"logstash-tag2-*\",\"template\":{\"settings\":{\"number_of_shards\":1,\"index.lifecycle.name\":\"logstash-policy\",\"index.lifecycle.rollover_alias\":\"logstash-tag2\"},\"mappings\":{\"type1\":{\"_source\":{\"enabled\":false},\"properties\":{\"host_name\":{\"type\":\"string\",\"index\":\"not_analyzed\"},\"created_at\":{\"type\":\"date\",\"format\":\"EEE MMM dd HH:mm:ss Z YYYY\"}}}}},\"priority\":102}").
1829
+ to_return(status: 200, body: "", headers: {})
1830
+ end # put the alias for the index
1831
+ stub_request(:put, "https://logs.google.com:777/es//%3Clogstash-tag2-default-%7Bnow%2Fw%7Bxxxx.ww%7D%7D-000001%3E").
1832
+ with(basic_auth: ['john', 'doe']).
1833
+ to_return(:status => 200, :body => "", :headers => {})
1834
+ stub_request(:put, "https://logs.google.com:777/es//%3Clogstash-tag2-default-%7Bnow%2Fw%7Bxxxx.ww%7D%7D-000001%3E/#{alias_endpoint}/logstash-tag2").
1835
+ with(basic_auth: ['john', 'doe'],
1836
+ :body => "{\"aliases\":{\"logstash-tag2\":{\"is_write_index\":true}}}").
1802
1837
  to_return(:status => 200, :body => "", :headers => {})
1803
1838
  stub_request(:get, "https://logs.google.com:777/es//_xpack").
1804
1839
  with(basic_auth: ['john', 'doe']).
@@ -1815,11 +1850,104 @@ class ElasticsearchOutputTest < Test::Unit::TestCase
1815
1850
 
1816
1851
  elastic_request = stub_elastic("https://logs.google.com:777/es//_bulk")
1817
1852
  driver.run(default_tag: 'test') do
1818
- driver.feed(sample_record)
1853
+ driver.feed('tag1', event_time, sample_record)
1854
+ driver.feed('tag2', event_time, sample_record)
1855
+ driver.feed('tag1', event_time, sample_record)
1856
+ driver.feed('tag2', event_time, sample_record)
1857
+ end
1858
+ assert_equal('logstash-tag2', index_cmds.first['index']['_index'])
1859
+
1860
+ assert_equal ["logstash-tag1", "logstash-tag2"], driver.instance.alias_indexes
1861
+
1862
+ assert_requested(elastic_request)
1863
+ end
1864
+
1865
+
1866
+ data("legacy_template" => [true, "_template"],
1867
+ "new_template" => [false, "_index_template"])
1868
+ def test_template_create_with_rollover_index_and_default_ilm_and_placeholders_and_index_separator(data)
1869
+ use_legacy_template_flag, endpoint = data
1870
+ cwd = File.dirname(__FILE__)
1871
+ template_file = if use_legacy_template_flag
1872
+ File.join(cwd, 'test_template.json')
1873
+ else
1874
+ File.join(cwd, 'test_index_template.json')
1875
+ end
1876
+
1877
+ config = %{
1878
+ host logs.google.com
1879
+ port 777
1880
+ scheme https
1881
+ path /es/
1882
+ user john
1883
+ password doe
1884
+ template_name logstash
1885
+ template_file #{template_file}
1886
+ index_date_pattern now/w{xxxx.ww}
1887
+ index_name logstash.${tag}
1888
+ enable_ilm true
1889
+ index_separator "."
1890
+ use_legacy_template #{use_legacy_template_flag}
1891
+ }
1892
+
1893
+ # connection start
1894
+ stub_request(:head, "https://logs.google.com:777/es//").
1895
+ with(basic_auth: ['john', 'doe']).
1896
+ to_return(:status => 200, :body => "", :headers => {})
1897
+ # check if template exists
1898
+ stub_request(:get, "https://logs.google.com:777/es//#{endpoint}/logstash").
1899
+ with(basic_auth: ['john', 'doe']).
1900
+ to_return(:status => 404, :body => "", :headers => {})
1901
+ # creation
1902
+ stub_request(:put, "https://logs.google.com:777/es//#{endpoint}/logstash").
1903
+ with(basic_auth: ['john', 'doe']).
1904
+ to_return(:status => 200, :body => "", :headers => {})
1905
+ # check if alias exists
1906
+ stub_request(:head, "https://logs.google.com:777/es//_alias/logstash.tag1").
1907
+ with(basic_auth: ['john', 'doe']).
1908
+ to_return(:status => 404, :body => "", :headers => {})
1909
+ stub_request(:get, "https://logs.google.com:777/es//#{endpoint}/logstash.tag1").
1910
+ with(basic_auth: ['john', 'doe']).
1911
+ to_return(status: 404, body: "", headers: {})
1912
+ if use_legacy_template_flag
1913
+ stub_request(:put, "https://logs.google.com:777/es//#{endpoint}/logstash.tag1").
1914
+ with(basic_auth: ['john', 'doe'],
1915
+ body: "{\"settings\":{\"number_of_shards\":1,\"index.lifecycle.name\":\"logstash-policy\",\"index.lifecycle.rollover_alias\":\"logstash.tag1\"},\"mappings\":{\"type1\":{\"_source\":{\"enabled\":false},\"properties\":{\"host_name\":{\"type\":\"string\",\"index\":\"not_analyzed\"},\"created_at\":{\"type\":\"date\",\"format\":\"EEE MMM dd HH:mm:ss Z YYYY\"}}}},\"index_patterns\":\"logstash.tag1.*\",\"order\":52}").
1916
+ to_return(status: 200, body: "", headers: {})
1917
+ else
1918
+ stub_request(:put, "https://logs.google.com:777/es//#{endpoint}/logstash.tag1").
1919
+ with(basic_auth: ['john', 'doe'],
1920
+ body: "{\"index_patterns\":\"logstash.tag1.*\",\"template\":{\"settings\":{\"number_of_shards\":1,\"index.lifecycle.name\":\"logstash-policy\",\"index.lifecycle.rollover_alias\":\"logstash.tag1\"},\"mappings\":{\"type1\":{\"_source\":{\"enabled\":false},\"properties\":{\"host_name\":{\"type\":\"string\",\"index\":\"not_analyzed\"},\"created_at\":{\"type\":\"date\",\"format\":\"EEE MMM dd HH:mm:ss Z YYYY\"}}}}},\"priority\":102}").
1921
+ to_return(status: 200, body: "", headers: {})
1819
1922
  end
1820
- assert_equal('logstash-test', index_cmds.first['index']['_index'])
1923
+ # put the alias for the index
1924
+ stub_request(:put, "https://logs.google.com:777/es//%3Clogstash.tag1.default-%7Bnow%2Fw%7Bxxxx.ww%7D%7D-000001%3E").
1925
+ with(basic_auth: ['john', 'doe']).
1926
+ to_return(:status => 200, :body => "", :headers => {})
1927
+ stub_request(:put, "https://logs.google.com:777/es//%3Clogstash.tag1.default-%7Bnow%2Fw%7Bxxxx.ww%7D%7D-000001%3E/#{alias_endpoint}/logstash.tag1").
1928
+ with(basic_auth: ['john', 'doe'],
1929
+ :body => "{\"aliases\":{\"logstash.tag1\":{\"is_write_index\":true}}}").
1930
+ to_return(:status => 200, :body => "", :headers => {})
1931
+ stub_request(:get, "https://logs.google.com:777/es//_xpack").
1932
+ with(basic_auth: ['john', 'doe']).
1933
+ to_return(:status => 200, :body => '{"features":{"ilm":{"available":true,"enabled":true}}}', :headers => {"Content-Type"=> "application/json"})
1934
+ stub_request(:get, "https://logs.google.com:777/es//_ilm/policy/logstash-policy").
1935
+ with(basic_auth: ['john', 'doe']).
1936
+ to_return(:status => 404, :body => "", :headers => {})
1937
+ stub_request(:put, "https://logs.google.com:777/es//_ilm/policy/logstash-policy").
1938
+ with(basic_auth: ['john', 'doe'],
1939
+ :body => "{\"policy\":{\"phases\":{\"hot\":{\"actions\":{\"rollover\":{\"max_size\":\"50gb\",\"max_age\":\"30d\"}}}}}}").
1940
+ to_return(:status => 200, :body => "", :headers => {})
1821
1941
 
1822
- assert_equal ["logstash-test"], driver.instance.alias_indexes
1942
+ driver(config)
1943
+
1944
+ elastic_request = stub_elastic("https://logs.google.com:777/es//_bulk")
1945
+ driver.run(default_tag: 'test') do
1946
+ driver.feed('tag1', event_time, sample_record)
1947
+ end
1948
+ assert_equal('logstash.tag1', index_cmds.first['index']['_index'])
1949
+
1950
+ assert_equal ["logstash.tag1"], driver.instance.alias_indexes
1823
1951
 
1824
1952
  assert_requested(elastic_request)
1825
1953
  end
@@ -2202,7 +2330,7 @@ class ElasticsearchOutputTest < Test::Unit::TestCase
2202
2330
  use_legacy_template #{use_legacy_template_flag}
2203
2331
  }
2204
2332
 
2205
- timestr = Time.now.strftime("%Y.%m.%d")
2333
+ timestr = Time.now.getutc.strftime("%Y.%m.%d")
2206
2334
  # connection start
2207
2335
  stub_request(:head, "https://logs.google.com:777/es//").
2208
2336
  with(basic_auth: ['john', 'doe']).
@@ -2478,6 +2606,8 @@ class ElasticsearchOutputTest < Test::Unit::TestCase
2478
2606
  stub_request(:head, "https://logs.google.com:777/es//").
2479
2607
  with(basic_auth: ['john', 'doe']).
2480
2608
  to_return(:status => 200, :body => "", :headers => {})
2609
+
2610
+ # test-tag1
2481
2611
  # check if template exists
2482
2612
  stub_request(:get, "https://logs.google.com:777/es//#{endpoint}/myapp_alias_template").
2483
2613
  with(basic_auth: ['john', 'doe']).
@@ -2487,31 +2617,78 @@ class ElasticsearchOutputTest < Test::Unit::TestCase
2487
2617
  with(basic_auth: ['john', 'doe']).
2488
2618
  to_return(:status => 200, :body => "", :headers => {})
2489
2619
  # creation of index which can rollover
2490
- stub_request(:put, "https://logs.google.com:777/es//%3Cmylogs-custom-test-myapp-%7Bnow%2Fw%7Bxxxx.ww%7D%7D-000001%3E").
2620
+ stub_request(:put, "https://logs.google.com:777/es//%3Cmylogs-test-tag1-myapp-%7Bnow%2Fw%7Bxxxx.ww%7D%7D-000001%3E").
2621
+ with(basic_auth: ['john', 'doe']).
2622
+ to_return(:status => 200, :body => "", :headers => {})
2623
+ # check if alias exists
2624
+ stub_request(:head, "https://logs.google.com:777/es//_alias/mylogs-test-tag1").
2625
+ with(basic_auth: ['john', 'doe']).
2626
+ to_return(:status => 404, :body => "", :headers => {})
2627
+ stub_request(:get, "https://logs.google.com:777/es//#{endpoint}/mylogs-test-tag1").
2628
+ with(basic_auth: ['john', 'doe']).
2629
+ to_return(status: 404, body: "", headers: {})
2630
+ if use_legacy_template_flag
2631
+ stub_request(:put, "https://logs.google.com:777/es//#{endpoint}/mylogs-test-tag1").
2632
+ with(basic_auth: ['john', 'doe'],
2633
+ body: "{\"order\":8,\"settings\":{\"index.lifecycle.name\":\"fluentd-policy\",\"index.lifecycle.rollover_alias\":\"mylogs-test-tag1\"},\"mappings\":{},\"aliases\":{\"myapp-logs-alias\":{}},\"index_patterns\":\"mylogs-test-tag1-*\"}").
2634
+ to_return(status: 200, body: "", headers: {})
2635
+ else
2636
+ stub_request(:put, "https://logs.google.com:777/es//#{endpoint}/mylogs-test-tag1").
2637
+ with(basic_auth: ['john', 'doe'],
2638
+ body: "{\"priority\":108,\"index_patterns\":\"mylogs-test-tag1-*\",\"template\":{\"settings\":{\"index.lifecycle.name\":\"fluentd-policy\",\"index.lifecycle.rollover_alias\":\"mylogs-test-tag1\"},\"mappings\":{},\"aliases\":{\"myapp-logs-alias\":{}}}}").
2639
+ to_return(status: 200, body: "", headers: {})
2640
+ end
2641
+ # put the alias for the index
2642
+ stub_request(:put, "https://logs.google.com:777/es//%3Cmylogs-test-tag1-myapp-%7Bnow%2Fw%7Bxxxx.ww%7D%7D-000001%3E/#{alias_endpoint}/mylogs-test-tag1").
2643
+ with(basic_auth: ['john', 'doe'],
2644
+ :body => "{\"aliases\":{\"mylogs-test-tag1\":{\"is_write_index\":true}}}").
2645
+ to_return(:status => 200, :body => "", :headers => {})
2646
+ stub_request(:get, "https://logs.google.com:777/es//_xpack").
2647
+ with(basic_auth: ['john', 'doe']).
2648
+ to_return(:status => 200, :body => '{"features":{"ilm":{"available":true,"enabled":true}}}', :headers => {"Content-Type"=> "application/json"})
2649
+ stub_request(:get, "https://logs.google.com:777/es//_ilm/policy/fluentd-policy").
2650
+ with(basic_auth: ['john', 'doe']).
2651
+ to_return(:status => 404, :body => "", :headers => {})
2652
+ stub_request(:put, "https://logs.google.com:777/es//_ilm/policy/fluentd-policy").
2653
+ with(basic_auth: ['john', 'doe'],
2654
+ :body => "{\"policy\":{\"phases\":{\"hot\":{\"actions\":{\"rollover\":{\"max_size\":\"50gb\",\"max_age\":\"30d\"}}}}}}").
2655
+ to_return(:status => 200, :body => "", :headers => {})
2656
+
2657
+ # test-tag2
2658
+ # check if template exists
2659
+ stub_request(:get, "https://logs.google.com:777/es//_template/myapp_alias_template").
2660
+ with(basic_auth: ['john', 'doe']).
2661
+ to_return(:status => 404, :body => "", :headers => {})
2662
+ # creation
2663
+ stub_request(:put, "https://logs.google.com:777/es//_template/myapp_alias_template").
2664
+ with(basic_auth: ['john', 'doe']).
2665
+ to_return(:status => 200, :body => "", :headers => {})
2666
+ # creation of index which can rollover
2667
+ stub_request(:put, "https://logs.google.com:777/es//%3Cmylogs-test-tag2-myapp-%7Bnow%2Fw%7Bxxxx.ww%7D%7D-000001%3E").
2491
2668
  with(basic_auth: ['john', 'doe']).
2492
2669
  to_return(:status => 200, :body => "", :headers => {})
2493
2670
  # check if alias exists
2494
- stub_request(:head, "https://logs.google.com:777/es//_alias/mylogs-custom-test").
2671
+ stub_request(:head, "https://logs.google.com:777/es//_alias/mylogs-test-tag2").
2495
2672
  with(basic_auth: ['john', 'doe']).
2496
2673
  to_return(:status => 404, :body => "", :headers => {})
2497
- stub_request(:get, "https://logs.google.com:777/es//#{endpoint}/mylogs-custom-test").
2674
+ stub_request(:get, "https://logs.google.com:777/es//#{endpoint}/mylogs-test-tag2").
2498
2675
  with(basic_auth: ['john', 'doe']).
2499
2676
  to_return(status: 404, body: "", headers: {})
2500
2677
  if use_legacy_template_flag
2501
- stub_request(:put, "https://logs.google.com:777/es//#{endpoint}/mylogs-custom-test").
2678
+ stub_request(:put, "https://logs.google.com:777/es//#{endpoint}/mylogs-test-tag2").
2502
2679
  with(basic_auth: ['john', 'doe'],
2503
- body: "{\"order\":8,\"settings\":{\"index.lifecycle.name\":\"fluentd-policy\",\"index.lifecycle.rollover_alias\":\"mylogs-custom-test\"},\"mappings\":{},\"aliases\":{\"myapp-logs-alias\":{}},\"index_patterns\":\"mylogs-custom-test-*\"}").
2680
+ body: "{\"order\":8,\"settings\":{\"index.lifecycle.name\":\"fluentd-policy\",\"index.lifecycle.rollover_alias\":\"mylogs-test-tag2\"},\"mappings\":{},\"aliases\":{\"myapp-logs-alias\":{}},\"index_patterns\":\"mylogs-test-tag2-*\"}").
2504
2681
  to_return(status: 200, body: "", headers: {})
2505
2682
  else
2506
- stub_request(:put, "https://logs.google.com:777/es//#{endpoint}/mylogs-custom-test").
2683
+ stub_request(:put, "https://logs.google.com:777/es//#{endpoint}/mylogs-test-tag2").
2507
2684
  with(basic_auth: ['john', 'doe'],
2508
- body: "{\"priority\":108,\"index_patterns\":\"mylogs-custom-test-*\",\"template\":{\"settings\":{\"index.lifecycle.name\":\"fluentd-policy\",\"index.lifecycle.rollover_alias\":\"mylogs-custom-test\"},\"mappings\":{},\"aliases\":{\"myapp-logs-alias\":{}}}}").
2685
+ body: "{\"priority\":108,\"index_patterns\":\"mylogs-test-tag2-*\",\"template\":{\"settings\":{\"index.lifecycle.name\":\"fluentd-policy\",\"index.lifecycle.rollover_alias\":\"mylogs-test-tag2\"},\"mappings\":{},\"aliases\":{\"myapp-logs-alias\":{}}}}").
2509
2686
  to_return(status: 200, body: "", headers: {})
2510
2687
  end
2511
2688
  # put the alias for the index
2512
- stub_request(:put, "https://logs.google.com:777/es//%3Cmylogs-custom-test-myapp-%7Bnow%2Fw%7Bxxxx.ww%7D%7D-000001%3E/#{alias_endpoint}/mylogs-custom-test").
2689
+ stub_request(:put, "https://logs.google.com:777/es//%3Cmylogs-test-tag2-myapp-%7Bnow%2Fw%7Bxxxx.ww%7D%7D-000001%3E/#{alias_endpoint}/mylogs-test-tag2").
2513
2690
  with(basic_auth: ['john', 'doe'],
2514
- :body => "{\"aliases\":{\"mylogs-custom-test\":{\"is_write_index\":true}}}").
2691
+ :body => "{\"aliases\":{\"mylogs-test-tag2\":{\"is_write_index\":true}}}").
2515
2692
  to_return(:status => 200, :body => "", :headers => {})
2516
2693
  stub_request(:get, "https://logs.google.com:777/es//_xpack").
2517
2694
  with(basic_auth: ['john', 'doe']).
@@ -2527,12 +2704,14 @@ class ElasticsearchOutputTest < Test::Unit::TestCase
2527
2704
  driver(config)
2528
2705
 
2529
2706
  elastic_request = stub_elastic("https://logs.google.com:777/es//_bulk")
2530
- driver.run(default_tag: 'custom-test') do
2531
- driver.feed(sample_record)
2707
+ driver.run(default_tag: 'test') do
2708
+ driver.feed("test-tag1", event_time, sample_record)
2709
+ driver.feed("test-tag2", event_time, sample_record)
2710
+ driver.feed("test-tag1", event_time, sample_record)
2711
+ driver.feed("test-tag2", event_time, sample_record)
2532
2712
  end
2533
- assert_equal('mylogs-custom-test', index_cmds.first['index']['_index'])
2534
-
2535
- assert_equal ["mylogs-custom-test"], driver.instance.alias_indexes
2713
+ assert_equal('mylogs-test-tag2', index_cmds.first['index']['_index'])
2714
+ assert_equal ["mylogs-test-tag1", "mylogs-test-tag2"], driver.instance.alias_indexes
2536
2715
 
2537
2716
  assert_requested(elastic_request)
2538
2717
  end
@@ -4344,7 +4523,7 @@ class ElasticsearchOutputTest < Test::Unit::TestCase
4344
4523
  stub_elastic
4345
4524
 
4346
4525
  ts = "2001/02/03 13:14:01,673+02:00"
4347
- index = "logstash-#{Date.today.strftime("%Y.%m.%d")}"
4526
+ index = "logstash-#{Time.now.getutc.strftime("%Y.%m.%d")}"
4348
4527
 
4349
4528
  flexmock(driver.instance.router).should_receive(:emit_error_event)
4350
4529
  .with(tag_for_error, Fluent::EventTime, Hash, ArgumentError).once
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.1
4
+ version: 4.2.2
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-12 00:00:00.000000000 Z
13
+ date: 2020-10-16 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: fluentd