fluent-plugin-elasticsearch 3.8.0 → 4.0.0
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 +4 -4
- data/.travis.yml +2 -6
- data/History.md +7 -0
- data/README.md +51 -18
- data/appveyor.yml +3 -13
- data/fluent-plugin-elasticsearch.gemspec +2 -2
- data/lib/fluent/plugin/elasticsearch_index_template.rb +4 -3
- data/lib/fluent/plugin/out_elasticsearch.rb +57 -26
- data/lib/fluent/plugin/out_elasticsearch_dynamic.rb +1 -1
- data/test/plugin/test_out_elasticsearch.rb +429 -157
- data/test/plugin/test_out_elasticsearch_dynamic.rb +0 -21
- metadata +5 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4e963cd715f4b07ec74b88df45a4b27bd28ea3d9a81a986720eb103baf1f4ab8
|
4
|
+
data.tar.gz: 99adcede30be2bff2bce8eebdfb39e67a14028e46d073516411bfb81bcd623df
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a0fd61160246d393d0059737a2557ca595d943a5db15a554d12a7c20664b42972c2f466325a1c027cbddb1d3dcc0e6cb69fe3499f506aa95f17a47d809e6a7c9
|
7
|
+
data.tar.gz: 7031ebb1c3fbfcd8bd23662c77ea34b44512297f780f7be632765a30753df7802e677a66bf6d468c6d3c33314938add162a26a16a484e587d1fae416e56ca8b1
|
data/.travis.yml
CHANGED
@@ -2,12 +2,6 @@ language: ruby
|
|
2
2
|
|
3
3
|
matrix:
|
4
4
|
include:
|
5
|
-
- rvm: 2.1
|
6
|
-
gemfile: Gemfile
|
7
|
-
- rvm: 2.2
|
8
|
-
gemfile: Gemfile
|
9
|
-
- rvm: 2.3
|
10
|
-
gemfile: Gemfile
|
11
5
|
- rvm: 2.4.6
|
12
6
|
gemfile: Gemfile
|
13
7
|
- rvm: 2.5.5
|
@@ -16,6 +10,8 @@ matrix:
|
|
16
10
|
gemfile: gemfiles/Gemfile.ilm
|
17
11
|
- rvm: 2.6.3
|
18
12
|
gemfile: Gemfile
|
13
|
+
- rvm: 2.7.0
|
14
|
+
gemfile: Gemfile
|
19
15
|
|
20
16
|
gemfile:
|
21
17
|
- Gemfile
|
data/History.md
CHANGED
@@ -1,6 +1,13 @@
|
|
1
1
|
## Changelog [[tags]](https://github.com/uken/fluent-plugin-elasticsearch/tags)
|
2
2
|
|
3
3
|
### [Unreleased]
|
4
|
+
|
5
|
+
### 4.0.0
|
6
|
+
- Restructuring ILM related features (#701)
|
7
|
+
- Extract placeholders in pipeline parameter (#695)
|
8
|
+
- fix typo in `README.md` (#698)
|
9
|
+
- Reduce log noise when not using rollover_index (#692)
|
10
|
+
|
4
11
|
### 3.8.0
|
5
12
|
- Add FAQ for specifying index.codec (#679)
|
6
13
|
- Add FAQ for connect_write timeout reached error (#687)
|
data/README.md
CHANGED
@@ -435,15 +435,14 @@ Specify this to override the index date pattern for creating a rollover index. T
|
|
435
435
|
for example: <logstash-default-{now/d}-000001>. Overriding this changes the rollover time period. Setting
|
436
436
|
"now/w{xxxx.ww}" would create weekly rollover indexes instead of daily.
|
437
437
|
|
438
|
-
This setting only takes effect when combined with the [
|
438
|
+
This setting only takes effect when combined with the [enable_ilm](#enable_ilm) setting.
|
439
439
|
|
440
|
-
And rollover\_index is also used in Lifecycle Index Management(ILM) feature.
|
441
440
|
```
|
442
441
|
index_date_pattern "now/w{xxxx.ww}" # defaults to "now/d"
|
443
442
|
```
|
444
443
|
|
445
|
-
If empty string(`""`) is specified in `
|
446
|
-
Elasticsearch plugin just creates <`
|
444
|
+
If empty string(`""`) is specified in `index_date_pattern`, index date pattern is not used.
|
445
|
+
Elasticsearch plugin just creates <`target_index`-`application_name`-000001> rollover index instead of <`target_index`-`application_name`-`{index_date_pattern}`-000001>.
|
447
446
|
|
448
447
|
If [customize_template](#customize_template) is set, then this parameter will be in effect otherwise ignored.
|
449
448
|
|
@@ -458,12 +457,9 @@ If [rollover_index](#rollover_index) is set, then this parameter will be in effe
|
|
458
457
|
|
459
458
|
### index_prefix
|
460
459
|
|
461
|
-
|
462
|
-
|
463
|
-
|
464
|
-
```
|
465
|
-
|
466
|
-
If [rollover_index](#rollover_index) is set, then this parameter will be in effect otherwise ignored.
|
460
|
+
This parameter is marked as obsoleted.
|
461
|
+
Consider to use [index_name](#index_name) for specify ILM target index when not using with logstash_format.
|
462
|
+
When specifying `logstash_format` as true, consider to use [logstash_prefix](#logstash_prefix) to specify ILM target index prefix.
|
467
463
|
|
468
464
|
### application_name
|
469
465
|
|
@@ -472,7 +468,7 @@ Specify the application name for the rollover index to be created.
|
|
472
468
|
application_name default # defaults to "default"
|
473
469
|
```
|
474
470
|
|
475
|
-
If [
|
471
|
+
If [enable_ilm](#enable_ilm is set, then this parameter will be in effect otherwise ignored.
|
476
472
|
|
477
473
|
### template_overwrite
|
478
474
|
|
@@ -1593,23 +1589,27 @@ Index lifecycle management is template based index management feature.
|
|
1593
1589
|
|
1594
1590
|
Main ILM feature parameters are:
|
1595
1591
|
|
1596
|
-
* `
|
1597
|
-
* `
|
1592
|
+
* `index_name` (when logstash_format as false)
|
1593
|
+
* `logstash_prefix` (when logstash_format as true)
|
1598
1594
|
* `enable_ilm`
|
1599
1595
|
* `ilm_policy_id`
|
1600
1596
|
* `ilm_policy`
|
1601
1597
|
|
1602
1598
|
They are not all mandatory parameters but they are used for ILM feature in effect.
|
1603
1599
|
|
1600
|
+
ILM target index alias is created with `index_name` or an index which is calculated from `logstash_prefix`.
|
1601
|
+
|
1602
|
+
From Elasticsearch plugin v4.0.0, ILM target index will be calculated from `index_name` (normal mode) or `logstash_prefix` (using with `logstash_format`as true).
|
1603
|
+
|
1604
|
+
When using `deflectoe_alias` parameter, Elasticsearch plugin will create ILM target indices alias with `deflector_alias` instead of `index_name` or an index which is calculated from `logstash_prefix`. This behavior should be kept due to backward ILM feature compatibility.
|
1605
|
+
|
1604
1606
|
And also, ILM feature users should specify their Elasticsearch template for ILM enabled indices.
|
1605
1607
|
Because ILM settings are injected into their Elasticsearch templates.
|
1606
1608
|
|
1609
|
+
#### Example ILM settings
|
1610
|
+
|
1607
1611
|
```aconf
|
1608
1612
|
index_name fluentd-${tag}
|
1609
|
-
# Should specify rollover_index as true
|
1610
|
-
rollover_index true
|
1611
|
-
deflector_alias fluentd-${tag} # Should specify as same index_name
|
1612
|
-
index_prefix fluentd
|
1613
1613
|
application_name ${tag}
|
1614
1614
|
index_date_pattern "now/d"
|
1615
1615
|
enable_ilm true
|
@@ -1618,11 +1618,44 @@ ilm_policy_id fluentd-policy
|
|
1618
1618
|
# ilm_policy {} # Use default policy
|
1619
1619
|
template_name your-fluentd-template
|
1620
1620
|
template_file /path/to/fluentd-template.json
|
1621
|
-
customize_template {"<<index_prefix>>": "fluentd"}
|
1621
|
+
# customize_template {"<<index_prefix>>": "fluentd"}
|
1622
1622
|
```
|
1623
1623
|
|
1624
1624
|
Note: This plugin only creates rollover-enabled indices, which are aliases pointing to them and index templates, and creates an ILM policy if enabled.
|
1625
1625
|
|
1626
|
+
#### Create ILM indices in each day
|
1627
|
+
|
1628
|
+
If you want to create new index in each day, you should use `logstash_format` style configuration:
|
1629
|
+
|
1630
|
+
```aconf
|
1631
|
+
logstash_prefix fluentd
|
1632
|
+
application_name default
|
1633
|
+
index_date_pattern "now/d"
|
1634
|
+
enable_ilm true
|
1635
|
+
# Policy configurations
|
1636
|
+
ilm_policy_id fluentd-policy
|
1637
|
+
# ilm_policy {} # Use default policy
|
1638
|
+
template_name your-fluentd-template
|
1639
|
+
template_file /path/to/fluentd-template.json
|
1640
|
+
```
|
1641
|
+
|
1642
|
+
#### Fixed ILM indices
|
1643
|
+
|
1644
|
+
Also, users can use fixed ILM indices configuration.
|
1645
|
+
If `index_date_pattern` is set as `""`(empty string), Elasticsearch plugin won't attach date pattern in ILM indices:
|
1646
|
+
|
1647
|
+
```aconf
|
1648
|
+
index_name fluentd
|
1649
|
+
application_name default
|
1650
|
+
index_date_pattern ""
|
1651
|
+
enable_ilm true
|
1652
|
+
# Policy configurations
|
1653
|
+
ilm_policy_id fluentd-policy
|
1654
|
+
# ilm_policy {} # Use default policy
|
1655
|
+
template_name your-fluentd-template
|
1656
|
+
template_file /path/to/fluentd-template.json
|
1657
|
+
```
|
1658
|
+
|
1626
1659
|
### How to specify index codec
|
1627
1660
|
|
1628
1661
|
Elasticsearch can handle compression methods for stored data such as LZ4 and best_compression.
|
data/appveyor.yml
CHANGED
@@ -1,8 +1,7 @@
|
|
1
1
|
version: '{build}'
|
2
2
|
install:
|
3
3
|
- SET PATH=C:\Ruby%ruby_version%\bin;%PATH%
|
4
|
-
-
|
5
|
-
- IF EXIST "%devkit%\\bin\\ridk.cmd" ridk.cmd enable
|
4
|
+
- ridk.cmd enable
|
6
5
|
- ruby --version
|
7
6
|
- gem --version
|
8
7
|
- bundle install
|
@@ -13,18 +12,9 @@ test_script:
|
|
13
12
|
# https://www.appveyor.com/docs/installed-software/#ruby
|
14
13
|
environment:
|
15
14
|
matrix:
|
15
|
+
- ruby_version: "26-x64"
|
16
|
+
- ruby_version: "26"
|
16
17
|
- ruby_version: "25-x64"
|
17
|
-
devkit: C:\Ruby23-x64\DevKit
|
18
18
|
- ruby_version: "25"
|
19
|
-
devkit: C:\Ruby23\DevKit
|
20
19
|
- ruby_version: "24-x64"
|
21
|
-
devkit: C:\Ruby23-x64\DevKit
|
22
20
|
- ruby_version: "24"
|
23
|
-
devkit: C:\Ruby23\DevKit
|
24
|
-
- ruby_version: "23-x64"
|
25
|
-
devkit: C:\Ruby23-x64\DevKit
|
26
|
-
- ruby_version: "22-x64"
|
27
|
-
devkit: C:\Ruby23-x64\DevKit
|
28
|
-
matrix:
|
29
|
-
allow_failures:
|
30
|
-
- ruby_version: "21"
|
@@ -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 = '
|
6
|
+
s.version = '4.0.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}
|
@@ -29,7 +29,7 @@ Gem::Specification.new do |s|
|
|
29
29
|
|
30
30
|
s.add_development_dependency 'rake', '>= 0'
|
31
31
|
s.add_development_dependency 'webmock', '~> 3'
|
32
|
-
s.add_development_dependency 'test-unit', '~> 3.
|
32
|
+
s.add_development_dependency 'test-unit', '~> 3.3.0'
|
33
33
|
s.add_development_dependency 'minitest', '~> 5.8'
|
34
34
|
s.add_development_dependency 'flexmock', '~> 2.0'
|
35
35
|
end
|
@@ -74,7 +74,7 @@ module Fluent::ElasticsearchIndexTemplate
|
|
74
74
|
get_template(template_file)) :
|
75
75
|
get_template(template_file), host)
|
76
76
|
|
77
|
-
log.
|
77
|
+
log.debug("Template '#{inject_template_name}' overwritten with #{template_file}.")
|
78
78
|
return
|
79
79
|
end
|
80
80
|
if !template_exists?(inject_template_name, host)
|
@@ -128,7 +128,8 @@ module Fluent::ElasticsearchIndexTemplate
|
|
128
128
|
end
|
129
129
|
|
130
130
|
def create_rollover_alias(index_prefix, rollover_index, deflector_alias_name, app_name, index_date_pattern, index_separator, enable_ilm, ilm_policy_id, ilm_policy, host)
|
131
|
-
|
131
|
+
# ILM request to create alias.
|
132
|
+
if rollover_index || enable_ilm
|
132
133
|
if !client.indices.exists_alias(:name => deflector_alias_name)
|
133
134
|
if index_date_pattern.empty?
|
134
135
|
index_name_temp='<'+index_prefix.downcase+index_separator+app_name.downcase+'-000001>'
|
@@ -152,7 +153,7 @@ module Fluent::ElasticsearchIndexTemplate
|
|
152
153
|
log.debug("The alias '#{deflector_alias_name}' is already present")
|
153
154
|
end
|
154
155
|
else
|
155
|
-
log.
|
156
|
+
log.debug("No index and alias creation action performed because rollover_index or enable_ilm is set to: '#{rollover_index}', '#{enable_ilm}'")
|
156
157
|
end
|
157
158
|
end
|
158
159
|
|
@@ -49,7 +49,7 @@ module Fluent::Plugin
|
|
49
49
|
end
|
50
50
|
end
|
51
51
|
|
52
|
-
RequestInfo = Struct.new(:host, :index)
|
52
|
+
RequestInfo = Struct.new(:host, :index, :ilm_index)
|
53
53
|
|
54
54
|
attr_reader :alias_indexes
|
55
55
|
|
@@ -117,7 +117,8 @@ EOC
|
|
117
117
|
config_param :index_date_pattern, :string, :default => "now/d"
|
118
118
|
config_param :index_separator, :string, :default => "-"
|
119
119
|
config_param :deflector_alias, :string, :default => nil
|
120
|
-
config_param :index_prefix, :string, :default => "logstash"
|
120
|
+
config_param :index_prefix, :string, :default => "logstash",
|
121
|
+
obsoleted: "This parameter shouldn't be used in 4.0.0 or later. Specify ILM target index with using `index_name' w/o `logstash_format' or 'logstash_prefix' w/ `logstash_format' instead."
|
121
122
|
config_param :application_name, :string, :default => "default"
|
122
123
|
config_param :templates, :hash, :default => nil
|
123
124
|
config_param :max_retry_putting_template, :integer, :default => 10
|
@@ -150,7 +151,7 @@ EOC
|
|
150
151
|
config_param :ignore_exceptions, :array, :default => [], value_type: :string, :desc => "Ignorable exception list"
|
151
152
|
config_param :exception_backup, :bool, :default => true, :desc => "Chunk backup flag when ignore exception occured"
|
152
153
|
config_param :bulk_message_request_threshold, :size, :default => TARGET_BULK_BYTES
|
153
|
-
config_param :compression_level, :enum,
|
154
|
+
config_param :compression_level, :enum, list: [:no_compression, :best_speed, :best_compression, :default_compression], :default => :no_compression
|
154
155
|
config_param :enable_ilm, :bool, :default => false
|
155
156
|
config_param :ilm_policy_id, :string, :default => DEFAULT_POLICY_ID
|
156
157
|
config_param :ilm_policy, :hash, :default => {}
|
@@ -173,8 +174,12 @@ EOC
|
|
173
174
|
compat_parameters_convert(conf, :buffer)
|
174
175
|
|
175
176
|
super
|
176
|
-
|
177
|
-
|
177
|
+
if placeholder_substitution_needed_for_template?
|
178
|
+
# nop.
|
179
|
+
elsif not @buffer_config.chunk_keys.include? "tag" and
|
180
|
+
not @buffer_config.chunk_keys.include? "_index"
|
181
|
+
raise Fluent::ConfigError, "'tag' or '_index' in chunk_keys is required."
|
182
|
+
end
|
178
183
|
@time_parser = create_time_parser
|
179
184
|
@backend_options = backend_options
|
180
185
|
|
@@ -209,11 +214,15 @@ EOC
|
|
209
214
|
@alias_indexes = []
|
210
215
|
if !dry_run?
|
211
216
|
if @template_name && @template_file
|
212
|
-
if @rollover_index
|
213
|
-
raise Fluent::ConfigError, "'deflector_alias' must be provided if 'rollover_index' is set true ." if not @deflector_alias
|
214
|
-
end
|
215
217
|
if @enable_ilm
|
216
|
-
raise Fluent::ConfigError, "
|
218
|
+
raise Fluent::ConfigError, "deflector_alias is prohibited to use with 'logstash_format at same time." if @logstash_format and @deflector_alias
|
219
|
+
end
|
220
|
+
if @logstash_format || placeholder_substitution_needed_for_template?
|
221
|
+
class << self
|
222
|
+
alias_method :template_installation, :template_installation_actual
|
223
|
+
end
|
224
|
+
else
|
225
|
+
template_installation_actual(@deflector_alias ? @deflector_alias : @index_name, @application_name, @index_name)
|
217
226
|
end
|
218
227
|
verify_ilm_working if @enable_ilm
|
219
228
|
elsif @templates
|
@@ -298,10 +307,6 @@ EOC
|
|
298
307
|
end
|
299
308
|
end
|
300
309
|
|
301
|
-
if @buffer_config.flush_thread_count < 2
|
302
|
-
log.warn "To prevent events traffic jam, you should specify 2 or more 'flush_thread_count'."
|
303
|
-
end
|
304
|
-
|
305
310
|
# Consider missing the prefix of "$." in nested key specifiers.
|
306
311
|
@id_key = convert_compat_id_key(@id_key) if @id_key
|
307
312
|
@parent_key = convert_compat_id_key(@parent_key) if @parent_key
|
@@ -356,7 +361,8 @@ EOC
|
|
356
361
|
begin
|
357
362
|
placeholder_validate!(name, param)
|
358
363
|
true
|
359
|
-
rescue Fluent::ConfigError
|
364
|
+
rescue Fluent::ConfigError => e
|
365
|
+
log.debug("'#{name} #{param}' is tested built-in placeholder(s) but there is no valid placeholder(s). error: #{e}")
|
360
366
|
false
|
361
367
|
end
|
362
368
|
end
|
@@ -651,7 +657,12 @@ EOC
|
|
651
657
|
else
|
652
658
|
application_name = nil
|
653
659
|
end
|
654
|
-
|
660
|
+
if @pipeline
|
661
|
+
pipeline = extract_placeholders(@pipeline, chunk)
|
662
|
+
else
|
663
|
+
pipeline = nil
|
664
|
+
end
|
665
|
+
return logstash_prefix, index_name, type_name, deflector_alias, application_name, pipeline
|
655
666
|
end
|
656
667
|
|
657
668
|
def multi_workers_ready?
|
@@ -677,9 +688,9 @@ EOC
|
|
677
688
|
begin
|
678
689
|
meta, header, record = process_message(tag, meta, header, time, record, extracted_values)
|
679
690
|
info = if @include_index_in_url
|
680
|
-
RequestInfo.new(host, meta.delete("_index".freeze))
|
691
|
+
RequestInfo.new(host, meta.delete("_index".freeze), meta["_index".freeze])
|
681
692
|
else
|
682
|
-
RequestInfo.new(host, nil)
|
693
|
+
RequestInfo.new(host, nil, meta["_index".freeze])
|
683
694
|
end
|
684
695
|
|
685
696
|
if split_request?(bulk_message, info)
|
@@ -725,7 +736,7 @@ EOC
|
|
725
736
|
end
|
726
737
|
|
727
738
|
def process_message(tag, meta, header, time, record, extracted_values)
|
728
|
-
logstash_prefix, index_name, type_name,
|
739
|
+
logstash_prefix, index_name, type_name, _deflector_alias, _application_name, pipeline = extracted_values
|
729
740
|
|
730
741
|
if @flatten_hashes
|
731
742
|
record = flatten_record(record)
|
@@ -793,7 +804,7 @@ EOC
|
|
793
804
|
meta["_type".freeze] = target_type unless @last_seen_major_version >= 8
|
794
805
|
|
795
806
|
if @pipeline
|
796
|
-
meta["pipeline".freeze] =
|
807
|
+
meta["pipeline".freeze] = pipeline
|
797
808
|
end
|
798
809
|
|
799
810
|
@meta_config_map.each do |record_accessor, meta_key|
|
@@ -825,25 +836,45 @@ EOC
|
|
825
836
|
wio.string
|
826
837
|
end
|
827
838
|
|
828
|
-
|
829
|
-
|
830
|
-
|
831
|
-
|
839
|
+
def placeholder_substitution_needed_for_template?
|
840
|
+
placeholder?(:host, @host.to_s) ||
|
841
|
+
placeholder?(:index_name, @index_name.to_s) ||
|
842
|
+
placeholder?(:logstash_prefix, @logstash_prefix.to_s) ||
|
843
|
+
placeholder?(:deflector_alias, @deflector_alias.to_s) ||
|
844
|
+
placeholder?(:application_name, @application_name.to_s)
|
845
|
+
end
|
846
|
+
|
847
|
+
def template_installation(deflector_alias, application_name, target_index, host)
|
848
|
+
# for safety.
|
849
|
+
end
|
850
|
+
|
851
|
+
def template_installation_actual(deflector_alias, application_name, target_index, host=nil)
|
832
852
|
if @template_name && @template_file
|
833
853
|
if @alias_indexes.include? deflector_alias
|
834
854
|
log.debug("Index alias #{deflector_alias} already exists (cached)")
|
835
855
|
else
|
836
856
|
retry_operate(@max_retry_putting_template, @fail_on_putting_template_retry_exceed) do
|
837
857
|
if @customize_template
|
838
|
-
template_custom_install(@template_name, @template_file, @template_overwrite, @customize_template, @enable_ilm, deflector_alias, @ilm_policy_id,
|
858
|
+
template_custom_install(@template_name, @template_file, @template_overwrite, @customize_template, @enable_ilm, deflector_alias, @ilm_policy_id, host)
|
839
859
|
else
|
840
|
-
template_install(@template_name, @template_file, @template_overwrite, @enable_ilm, deflector_alias, @ilm_policy_id,
|
860
|
+
template_install(@template_name, @template_file, @template_overwrite, @enable_ilm, deflector_alias, @ilm_policy_id, host)
|
841
861
|
end
|
842
|
-
create_rollover_alias(
|
862
|
+
create_rollover_alias(target_index, @rollover_index, deflector_alias, application_name, @index_date_pattern, @index_separator, @enable_ilm, @ilm_policy_id, @ilm_policy, host)
|
843
863
|
end
|
844
864
|
@alias_indexes << deflector_alias unless deflector_alias.nil?
|
845
865
|
end
|
846
866
|
end
|
867
|
+
end
|
868
|
+
|
869
|
+
# send_bulk given a specific bulk request, the original tag,
|
870
|
+
# chunk, and bulk_message_count
|
871
|
+
def send_bulk(data, tag, chunk, bulk_message_count, extracted_values, info)
|
872
|
+
logstash_prefix, index_name, _type_name, deflector_alias, application_name, _pipeline = extracted_values
|
873
|
+
if deflector_alias
|
874
|
+
template_installation(deflector_alias, application_name, index_name, info.host)
|
875
|
+
else
|
876
|
+
template_installation(info.ilm_index, application_name, @logstash_format ? logstash_prefix : index_name, info.host)
|
877
|
+
end
|
847
878
|
|
848
879
|
begin
|
849
880
|
|
@@ -246,7 +246,7 @@ module Fluent::Plugin
|
|
246
246
|
# check for '${ ... }'
|
247
247
|
# yes => `eval`
|
248
248
|
# no => return param
|
249
|
-
return param if (param =~ /\${.+}/).nil?
|
249
|
+
return param if (param.to_s =~ /\${.+}/).nil?
|
250
250
|
|
251
251
|
# check for 'tag_parts[]'
|
252
252
|
# separated by a delimiter (default '.')
|
@@ -307,7 +307,7 @@ class ElasticsearchOutput < Test::Unit::TestCase
|
|
307
307
|
}
|
308
308
|
end
|
309
309
|
|
310
|
-
test '
|
310
|
+
test 'valid configuration of index lifecycle management' do
|
311
311
|
cwd = File.dirname(__FILE__)
|
312
312
|
template_file = File.join(cwd, 'test_template.json')
|
313
313
|
|
@@ -316,7 +316,25 @@ class ElasticsearchOutput < Test::Unit::TestCase
|
|
316
316
|
template_name logstash
|
317
317
|
template_file #{template_file}
|
318
318
|
}
|
319
|
-
|
319
|
+
stub_request(:get, "http://localhost:9200/_template/fluentd").
|
320
|
+
to_return(status: 200, body: "", headers: {})
|
321
|
+
stub_request(:head, "http://localhost:9200/_alias/fluentd").
|
322
|
+
to_return(status: 404, body: "", headers: {})
|
323
|
+
stub_request(:put, "http://localhost:9200/%3Cfluentd-default-%7Bnow%2Fd%7D-000001%3E/_alias/fluentd").
|
324
|
+
with(body: "{\"aliases\":{\"fluentd\":{\"is_write_index\":true}}}").
|
325
|
+
to_return(status: 200, body: "", headers: {})
|
326
|
+
stub_request(:put, "http://localhost:9200/%3Cfluentd-default-%7Bnow%2Fd%7D-000001%3E").
|
327
|
+
to_return(status: 200, body: "", headers: {})
|
328
|
+
stub_request(:get, "http://localhost:9200/_xpack").
|
329
|
+
to_return(:status => 200, :body => '{"features":{"ilm":{"available":true,"enabled":true}}}',
|
330
|
+
:headers => {"Content-Type"=> "application/json"})
|
331
|
+
stub_request(:get, "http://localhost:9200/_ilm/policy/logstash-policy").
|
332
|
+
to_return(status: 404, body: "", headers: {})
|
333
|
+
stub_request(:put, "http://localhost:9200/_ilm/policy/logstash-policy").
|
334
|
+
with(body: "{\"policy\":{\"phases\":{\"hot\":{\"actions\":{\"rollover\":{\"max_size\":\"50gb\",\"max_age\":\"30d\"}}}}}}").
|
335
|
+
to_return(status: 200, body: "", headers: {})
|
336
|
+
|
337
|
+
assert_nothing_raised {
|
320
338
|
driver(config)
|
321
339
|
}
|
322
340
|
end
|
@@ -379,6 +397,71 @@ class ElasticsearchOutput < Test::Unit::TestCase
|
|
379
397
|
end
|
380
398
|
end
|
381
399
|
|
400
|
+
sub_test_case "placeholder substitution needed?" do
|
401
|
+
data("host placeholder" => ["host", "host-${tag}.google.com"],
|
402
|
+
"logstash_prefix_placeholder" => ["logstash_prefix", "fluentd-${tag}"],
|
403
|
+
"deflector_alias_placeholder" => ["deflector_alias", "fluentd-${tag}"],
|
404
|
+
"application_name_placeholder" => ["application_name", "fluentd-${tag}"],
|
405
|
+
)
|
406
|
+
test 'tag placeholder' do |data|
|
407
|
+
param, value = data
|
408
|
+
config = Fluent::Config::Element.new(
|
409
|
+
'ROOT', '', {
|
410
|
+
'@type' => 'elasticsearch',
|
411
|
+
param => value
|
412
|
+
}, [
|
413
|
+
Fluent::Config::Element.new('buffer', 'tag', {}, [])
|
414
|
+
])
|
415
|
+
driver(config)
|
416
|
+
|
417
|
+
assert_true driver.instance.placeholder_substitution_needed_for_template?
|
418
|
+
end
|
419
|
+
|
420
|
+
|
421
|
+
data("host placeholder" => ["host", "host-%Y%m%d.google.com"],
|
422
|
+
"logstash_prefix_placeholder" => ["logstash_prefix", "fluentd-%Y%m%d"],
|
423
|
+
"deflector_alias_placeholder" => ["deflector_alias", "fluentd-%Y%m%d"],
|
424
|
+
"application_name_placeholder" => ["application_name", "fluentd-%Y%m%d"],
|
425
|
+
)
|
426
|
+
test 'time placeholder' do |data|
|
427
|
+
param, value = data
|
428
|
+
config = Fluent::Config::Element.new(
|
429
|
+
'ROOT', '', {
|
430
|
+
'@type' => 'elasticsearch',
|
431
|
+
param => value
|
432
|
+
}, [
|
433
|
+
Fluent::Config::Element.new('buffer', 'time', {
|
434
|
+
'timekey' => '1d'
|
435
|
+
}, [])
|
436
|
+
])
|
437
|
+
driver(config)
|
438
|
+
|
439
|
+
assert_true driver.instance.placeholder_substitution_needed_for_template?
|
440
|
+
end
|
441
|
+
|
442
|
+
data("host placeholder" => ["host", "host-${mykey}.google.com"],
|
443
|
+
"logstash_prefix_placeholder" => ["logstash_prefix", "fluentd-${mykey}"],
|
444
|
+
"deflector_alias_placeholder" => ["deflector_alias", "fluentd-${mykey}"],
|
445
|
+
"application_name_placeholder" => ["application_name", "fluentd-${mykey}"],
|
446
|
+
)
|
447
|
+
test 'custom placeholder' do |data|
|
448
|
+
param, value = data
|
449
|
+
config = Fluent::Config::Element.new(
|
450
|
+
'ROOT', '', {
|
451
|
+
'@type' => 'elasticsearch',
|
452
|
+
param => value
|
453
|
+
}, [
|
454
|
+
Fluent::Config::Element.new('buffer', 'mykey', {
|
455
|
+
'chunk_keys' => 'mykey',
|
456
|
+
'timekey' => '1d',
|
457
|
+
}, [])
|
458
|
+
])
|
459
|
+
driver(config)
|
460
|
+
|
461
|
+
assert_true driver.instance.placeholder_substitution_needed_for_template?
|
462
|
+
end
|
463
|
+
end
|
464
|
+
|
382
465
|
sub_test_case 'chunk_keys requirement' do
|
383
466
|
test 'tag in chunk_keys' do
|
384
467
|
assert_nothing_raised do
|
@@ -462,27 +545,6 @@ class ElasticsearchOutput < Test::Unit::TestCase
|
|
462
545
|
end
|
463
546
|
end
|
464
547
|
|
465
|
-
sub_test_case 'connection exceptions' do
|
466
|
-
test 'default connection exception' do
|
467
|
-
driver(Fluent::Config::Element.new(
|
468
|
-
'ROOT', '', {
|
469
|
-
'@type' => 'elasticsearch',
|
470
|
-
'host' => 'log.google.com',
|
471
|
-
'port' => 777,
|
472
|
-
'scheme' => 'https',
|
473
|
-
'path' => '/es/',
|
474
|
-
'user' => 'john',
|
475
|
-
'password' => 'doe',
|
476
|
-
}, [
|
477
|
-
Fluent::Config::Element.new('buffer', 'tag', {
|
478
|
-
}, [])
|
479
|
-
]
|
480
|
-
))
|
481
|
-
logs = driver.logs
|
482
|
-
assert_logs_include(logs, /you should specify 2 or more 'flush_thread_count'/, 1)
|
483
|
-
end
|
484
|
-
end
|
485
|
-
|
486
548
|
class GetElasticsearchVersionTest < self
|
487
549
|
def create_driver(conf='', client_version="\"5.0\"")
|
488
550
|
# For request stub to detect compatibility.
|
@@ -584,10 +646,7 @@ class ElasticsearchOutput < Test::Unit::TestCase
|
|
584
646
|
to_return(:status => 200, :body => "", :headers => {})
|
585
647
|
|
586
648
|
driver(config)
|
587
|
-
|
588
|
-
driver.run(default_tag: 'test') do
|
589
|
-
driver.feed(sample_record)
|
590
|
-
end
|
649
|
+
|
591
650
|
assert_requested(:put, "https://logs.google.com:777/es//_template/logstash", times: 1)
|
592
651
|
end
|
593
652
|
|
@@ -600,7 +659,6 @@ class ElasticsearchOutput < Test::Unit::TestCase
|
|
600
659
|
end
|
601
660
|
end
|
602
661
|
|
603
|
-
|
604
662
|
def test_template_create_with_rollover_index_and_default_ilm
|
605
663
|
cwd = File.dirname(__FILE__)
|
606
664
|
template_file = File.join(cwd, 'test_template.json')
|
@@ -614,9 +672,74 @@ class ElasticsearchOutput < Test::Unit::TestCase
|
|
614
672
|
password doe
|
615
673
|
template_name logstash
|
616
674
|
template_file #{template_file}
|
617
|
-
|
675
|
+
index_date_pattern now/w{xxxx.ww}
|
676
|
+
index_name logstash
|
677
|
+
enable_ilm true
|
678
|
+
}
|
679
|
+
|
680
|
+
# connection start
|
681
|
+
stub_request(:head, "https://logs.google.com:777/es//").
|
682
|
+
with(basic_auth: ['john', 'doe']).
|
683
|
+
to_return(:status => 200, :body => "", :headers => {})
|
684
|
+
# check if template exists
|
685
|
+
stub_request(:get, "https://logs.google.com:777/es//_template/logstash").
|
686
|
+
with(basic_auth: ['john', 'doe']).
|
687
|
+
to_return(:status => 404, :body => "", :headers => {})
|
688
|
+
# creation
|
689
|
+
stub_request(:put, "https://logs.google.com:777/es//_template/logstash").
|
690
|
+
with(basic_auth: ['john', 'doe']).
|
691
|
+
to_return(:status => 200, :body => "", :headers => {})
|
692
|
+
# check if alias exists
|
693
|
+
stub_request(:head, "https://logs.google.com:777/es//_alias/logstash").
|
694
|
+
with(basic_auth: ['john', 'doe']).
|
695
|
+
to_return(:status => 404, :body => "", :headers => {})
|
696
|
+
stub_request(:get, "https://logs.google.com:777/es//_template/logstash").
|
697
|
+
with(basic_auth: ['john', 'doe']).
|
698
|
+
to_return(status: 404, body: "", headers: {})
|
699
|
+
stub_request(:put, "https://logs.google.com:777/es//_template/logstash").
|
700
|
+
with(basic_auth: ['john', 'doe'],
|
701
|
+
body: "{\"settings\":{\"number_of_shards\":1,\"index.lifecycle.name\":\"logstash-policy\",\"index.lifecycle.rollover_alias\":\"logstash\"},\"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-*\",\"order\":51}").
|
702
|
+
to_return(status: 200, body: "", headers: {})
|
703
|
+
# put the alias for the index
|
704
|
+
stub_request(:put, "https://logs.google.com:777/es//%3Clogstash-default-%7Bnow%2Fw%7Bxxxx.ww%7D%7D-000001%3E").
|
705
|
+
with(basic_auth: ['john', 'doe']).
|
706
|
+
to_return(:status => 200, :body => "", :headers => {})
|
707
|
+
stub_request(:put, "https://logs.google.com:777/es//%3Clogstash-default-%7Bnow%2Fw%7Bxxxx.ww%7D%7D-000001%3E/_alias/logstash").
|
708
|
+
with(basic_auth: ['john', 'doe'],
|
709
|
+
:body => "{\"aliases\":{\"logstash\":{\"is_write_index\":true}}}").
|
710
|
+
to_return(:status => 200, :body => "", :headers => {})
|
711
|
+
stub_request(:get, "https://logs.google.com:777/es//_xpack").
|
712
|
+
with(basic_auth: ['john', 'doe']).
|
713
|
+
to_return(:status => 200, :body => '{"features":{"ilm":{"available":true,"enabled":true}}}', :headers => {"Content-Type"=> "application/json"})
|
714
|
+
stub_request(:get, "https://logs.google.com:777/es//_ilm/policy/logstash-policy").
|
715
|
+
with(basic_auth: ['john', 'doe']).
|
716
|
+
to_return(:status => 404, :body => "", :headers => {})
|
717
|
+
stub_request(:put, "https://logs.google.com:777/es//_ilm/policy/logstash-policy").
|
718
|
+
with(basic_auth: ['john', 'doe'],
|
719
|
+
:body => "{\"policy\":{\"phases\":{\"hot\":{\"actions\":{\"rollover\":{\"max_size\":\"50gb\",\"max_age\":\"30d\"}}}}}}").
|
720
|
+
to_return(:status => 200, :body => "", :headers => {})
|
721
|
+
|
722
|
+
driver(config)
|
723
|
+
|
724
|
+
assert_requested(:put, "https://logs.google.com:777/es//_template/logstash", times: 1)
|
725
|
+
end
|
726
|
+
|
727
|
+
def test_template_create_with_rollover_index_and_default_ilm_with_deflector_alias
|
728
|
+
cwd = File.dirname(__FILE__)
|
729
|
+
template_file = File.join(cwd, 'test_template.json')
|
730
|
+
|
731
|
+
config = %{
|
732
|
+
host logs.google.com
|
733
|
+
port 777
|
734
|
+
scheme https
|
735
|
+
path /es/
|
736
|
+
user john
|
737
|
+
password doe
|
738
|
+
template_name logstash
|
739
|
+
template_file #{template_file}
|
618
740
|
index_date_pattern now/w{xxxx.ww}
|
619
741
|
deflector_alias myapp_deflector
|
742
|
+
index_name logstash
|
620
743
|
enable_ilm true
|
621
744
|
}
|
622
745
|
|
@@ -664,12 +787,7 @@ class ElasticsearchOutput < Test::Unit::TestCase
|
|
664
787
|
|
665
788
|
driver(config)
|
666
789
|
|
667
|
-
|
668
|
-
driver.run(default_tag: 'test') do
|
669
|
-
driver.feed(sample_record)
|
670
|
-
end
|
671
|
-
|
672
|
-
assert_requested(elastic_request)
|
790
|
+
assert_requested(:put, "https://logs.google.com:777/es//_template/myapp_deflector", times: 1)
|
673
791
|
end
|
674
792
|
|
675
793
|
def test_template_create_with_rollover_index_and_default_ilm_with_empty_index_date_pattern
|
@@ -685,9 +803,8 @@ class ElasticsearchOutput < Test::Unit::TestCase
|
|
685
803
|
password doe
|
686
804
|
template_name logstash
|
687
805
|
template_file #{template_file}
|
688
|
-
rollover_index true
|
689
806
|
index_date_pattern ""
|
690
|
-
|
807
|
+
index_name logstash
|
691
808
|
enable_ilm true
|
692
809
|
}
|
693
810
|
|
@@ -704,23 +821,23 @@ class ElasticsearchOutput < Test::Unit::TestCase
|
|
704
821
|
with(basic_auth: ['john', 'doe']).
|
705
822
|
to_return(:status => 200, :body => "", :headers => {})
|
706
823
|
# check if alias exists
|
707
|
-
stub_request(:head, "https://logs.google.com:777/es//_alias/
|
824
|
+
stub_request(:head, "https://logs.google.com:777/es//_alias/logstash").
|
708
825
|
with(basic_auth: ['john', 'doe']).
|
709
826
|
to_return(:status => 404, :body => "", :headers => {})
|
710
|
-
stub_request(:get, "https://logs.google.com:777/es//_template/
|
827
|
+
stub_request(:get, "https://logs.google.com:777/es//_template/logstash").
|
711
828
|
with(basic_auth: ['john', 'doe']).
|
712
829
|
to_return(status: 404, body: "", headers: {})
|
713
830
|
stub_request(:put, "https://logs.google.com:777/es//_template/myapp_deflector").
|
714
831
|
with(basic_auth: ['john', 'doe'],
|
715
|
-
body: "{\"settings\":{\"number_of_shards\":1,\"index.lifecycle.name\":\"logstash-policy\",\"index.lifecycle.rollover_alias\":\"
|
832
|
+
body: "{\"settings\":{\"number_of_shards\":1,\"index.lifecycle.name\":\"logstash-policy\",\"index.lifecycle.rollover_alias\":\"logstash\"},\"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-*\",\"order\":51}").
|
716
833
|
to_return(status: 200, body: "", headers: {})
|
717
834
|
# put the alias for the index
|
718
835
|
stub_request(:put, "https://logs.google.com:777/es//%3Clogstash-default-000001%3E").
|
719
836
|
with(basic_auth: ['john', 'doe']).
|
720
837
|
to_return(:status => 200, :body => "", :headers => {})
|
721
|
-
stub_request(:put, "https://logs.google.com:777/es//%3Clogstash-default-000001%3E/_alias/
|
838
|
+
stub_request(:put, "https://logs.google.com:777/es//%3Clogstash-default-000001%3E/_alias/logstash").
|
722
839
|
with(basic_auth: ['john', 'doe'],
|
723
|
-
:body => "{\"aliases\":{\"
|
840
|
+
:body => "{\"aliases\":{\"logstash\":{\"is_write_index\":true}}}").
|
724
841
|
to_return(:status => 200, :body => "", :headers => {})
|
725
842
|
stub_request(:get, "https://logs.google.com:777/es//_xpack").
|
726
843
|
with(basic_auth: ['john', 'doe']).
|
@@ -735,12 +852,7 @@ class ElasticsearchOutput < Test::Unit::TestCase
|
|
735
852
|
|
736
853
|
driver(config)
|
737
854
|
|
738
|
-
|
739
|
-
driver.run(default_tag: 'test') do
|
740
|
-
driver.feed(sample_record)
|
741
|
-
end
|
742
|
-
|
743
|
-
assert_requested(elastic_request)
|
855
|
+
assert_requested(:put, "https://logs.google.com:777/es//_template/logstash", times: 1)
|
744
856
|
end
|
745
857
|
|
746
858
|
def test_template_create_with_rollover_index_and_custom_ilm
|
@@ -756,11 +868,10 @@ class ElasticsearchOutput < Test::Unit::TestCase
|
|
756
868
|
password doe
|
757
869
|
template_name logstash
|
758
870
|
template_file #{template_file}
|
759
|
-
rollover_index true
|
760
871
|
index_date_pattern now/w{xxxx.ww}
|
761
|
-
deflector_alias myapp_deflector
|
762
872
|
ilm_policy_id fluentd-policy
|
763
873
|
enable_ilm true
|
874
|
+
index_name logstash
|
764
875
|
ilm_policy {"policy":{"phases":{"hot":{"actions":{"rollover":{"max_size":"70gb", "max_age":"30d"}}}}}}
|
765
876
|
}
|
766
877
|
|
@@ -777,24 +888,23 @@ class ElasticsearchOutput < Test::Unit::TestCase
|
|
777
888
|
with(basic_auth: ['john', 'doe']).
|
778
889
|
to_return(:status => 200, :body => "", :headers => {})
|
779
890
|
# check if alias exists
|
780
|
-
stub_request(:head, "https://logs.google.com:777/es//_alias/
|
891
|
+
stub_request(:head, "https://logs.google.com:777/es//_alias/logstash").
|
781
892
|
with(basic_auth: ['john', 'doe']).
|
782
893
|
to_return(:status => 404, :body => "", :headers => {})
|
783
|
-
stub_request(:get, "https://logs.google.com:777/es//_template/
|
894
|
+
stub_request(:get, "https://logs.google.com:777/es//_template/logstash").
|
784
895
|
with(basic_auth: ['john', 'doe']).
|
785
896
|
to_return(status: 404, body: "", headers: {})
|
786
|
-
stub_request(:put, "https://logs.google.com:777/es//_template/
|
897
|
+
stub_request(:put, "https://logs.google.com:777/es//_template/logstash").
|
787
898
|
with(basic_auth: ['john', 'doe'],
|
788
|
-
body: "{\"settings\":{\"number_of_shards\":1,\"index.lifecycle.name\":\"fluentd-policy\",\"index.lifecycle.rollover_alias\":\"
|
899
|
+
body: "{\"settings\":{\"number_of_shards\":1,\"index.lifecycle.name\":\"fluentd-policy\",\"index.lifecycle.rollover_alias\":\"myalogs\"},\"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\":\"mylogs-*\",\"order\":51}").
|
789
900
|
to_return(status: 200, body: "", headers: {})
|
790
901
|
# put the alias for the index
|
791
902
|
stub_request(:put, "https://logs.google.com:777/es//%3Clogstash-default-%7Bnow%2Fw%7Bxxxx.ww%7D%7D-000001%3E").
|
792
903
|
with(basic_auth: ['john', 'doe']).
|
793
904
|
to_return(:status => 200, :body => "", :headers => {})
|
794
|
-
stub_request(:put, "https://logs.google.com:777/es//%3Clogstash-default-%7Bnow%2Fw%7Bxxxx.ww%7D%7D-000001%3E/_alias/
|
795
|
-
with(
|
796
|
-
|
797
|
-
to_return(:status => 200, :body => "", :headers => {})
|
905
|
+
stub_request(:put, "https://logs.google.com:777/es//%3Clogstash-default-%7Bnow%2Fw%7Bxxxx.ww%7D%7D-000001%3E/_alias/logstash").
|
906
|
+
with(body: "{\"aliases\":{\"logstash\":{\"is_write_index\":true}}}").
|
907
|
+
to_return(status: 200, body: "", headers: {})
|
798
908
|
stub_request(:get, "https://logs.google.com:777/es//_xpack").
|
799
909
|
with(basic_auth: ['john', 'doe']).
|
800
910
|
to_return(:status => 200, :body => '{"features":{"ilm":{"available":true,"enabled":true}}}', :headers => {"Content-Type"=> "application/json"})
|
@@ -808,12 +918,7 @@ class ElasticsearchOutput < Test::Unit::TestCase
|
|
808
918
|
|
809
919
|
driver(config)
|
810
920
|
|
811
|
-
|
812
|
-
driver.run(default_tag: 'test') do
|
813
|
-
driver.feed(sample_record)
|
814
|
-
end
|
815
|
-
|
816
|
-
assert_requested(elastic_request)
|
921
|
+
assert_requested(:put, "https://logs.google.com:777/es//_template/logstash", times: 1)
|
817
922
|
end
|
818
923
|
|
819
924
|
def test_template_create_with_rollover_index_and_default_ilm_and_placeholders
|
@@ -829,10 +934,8 @@ class ElasticsearchOutput < Test::Unit::TestCase
|
|
829
934
|
password doe
|
830
935
|
template_name logstash
|
831
936
|
template_file #{template_file}
|
832
|
-
rollover_index true
|
833
937
|
index_date_pattern now/w{xxxx.ww}
|
834
|
-
index_name
|
835
|
-
deflector_alias myapp_deflector-${tag}
|
938
|
+
index_name logstash-${tag}
|
836
939
|
enable_ilm true
|
837
940
|
}
|
838
941
|
|
@@ -849,23 +952,23 @@ class ElasticsearchOutput < Test::Unit::TestCase
|
|
849
952
|
with(basic_auth: ['john', 'doe']).
|
850
953
|
to_return(:status => 200, :body => "", :headers => {})
|
851
954
|
# check if alias exists
|
852
|
-
stub_request(:head, "https://logs.google.com:777/es//_alias/
|
955
|
+
stub_request(:head, "https://logs.google.com:777/es//_alias/logstash-test").
|
853
956
|
with(basic_auth: ['john', 'doe']).
|
854
957
|
to_return(:status => 404, :body => "", :headers => {})
|
855
|
-
stub_request(:get, "https://logs.google.com:777/es//_template/
|
958
|
+
stub_request(:get, "https://logs.google.com:777/es//_template/logstash-test").
|
856
959
|
with(basic_auth: ['john', 'doe']).
|
857
960
|
to_return(status: 404, body: "", headers: {})
|
858
|
-
stub_request(:put, "https://logs.google.com:777/es//_template/
|
961
|
+
stub_request(:put, "https://logs.google.com:777/es//_template/logstash-test").
|
859
962
|
with(basic_auth: ['john', 'doe'],
|
860
|
-
body: "{\"settings\":{\"number_of_shards\":1,\"index.lifecycle.name\":\"logstash-policy\",\"index.lifecycle.rollover_alias\":\"
|
963
|
+
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}").
|
861
964
|
to_return(status: 200, body: "", headers: {})
|
862
965
|
# put the alias for the index
|
863
|
-
stub_request(:put, "https://logs.google.com:777/es//%3Clogstash-default-%7Bnow%2Fw%7Bxxxx.ww%7D%7D-000001%3E").
|
966
|
+
stub_request(:put, "https://logs.google.com:777/es//%3Clogstash-test-default-%7Bnow%2Fw%7Bxxxx.ww%7D%7D-000001%3E").
|
864
967
|
with(basic_auth: ['john', 'doe']).
|
865
968
|
to_return(:status => 200, :body => "", :headers => {})
|
866
|
-
stub_request(:put, "https://logs.google.com:777/es//%3Clogstash-default-%7Bnow%2Fw%7Bxxxx.ww%7D%7D-000001%3E/_alias/
|
969
|
+
stub_request(:put, "https://logs.google.com:777/es//%3Clogstash-test-default-%7Bnow%2Fw%7Bxxxx.ww%7D%7D-000001%3E/_alias/logstash-test").
|
867
970
|
with(basic_auth: ['john', 'doe'],
|
868
|
-
:body => "{\"aliases\":{\"
|
971
|
+
:body => "{\"aliases\":{\"logstash-test\":{\"is_write_index\":true}}}").
|
869
972
|
to_return(:status => 200, :body => "", :headers => {})
|
870
973
|
stub_request(:get, "https://logs.google.com:777/es//_xpack").
|
871
974
|
with(basic_auth: ['john', 'doe']).
|
@@ -884,9 +987,9 @@ class ElasticsearchOutput < Test::Unit::TestCase
|
|
884
987
|
driver.run(default_tag: 'test') do
|
885
988
|
driver.feed(sample_record)
|
886
989
|
end
|
887
|
-
assert_equal('
|
990
|
+
assert_equal('logstash-test', index_cmds.first['index']['_index'])
|
888
991
|
|
889
|
-
assert_equal ["
|
992
|
+
assert_equal ["logstash-test"], driver.instance.alias_indexes
|
890
993
|
|
891
994
|
assert_requested(elastic_request)
|
892
995
|
end
|
@@ -923,11 +1026,6 @@ class ElasticsearchOutput < Test::Unit::TestCase
|
|
923
1026
|
|
924
1027
|
driver(config)
|
925
1028
|
|
926
|
-
stub_elastic("https://logs.google.com:777/es//_bulk")
|
927
|
-
driver.run(default_tag: 'test') do
|
928
|
-
driver.feed(sample_record)
|
929
|
-
end
|
930
|
-
|
931
1029
|
assert_requested(:put, "https://logs.google.com:777/es//_template/myapp_alias_template", times: 1)
|
932
1030
|
end
|
933
1031
|
|
@@ -973,6 +1071,56 @@ class ElasticsearchOutput < Test::Unit::TestCase
|
|
973
1071
|
cwd = File.dirname(__FILE__)
|
974
1072
|
template_file = File.join(cwd, 'test_alias_template.json')
|
975
1073
|
|
1074
|
+
config = %{
|
1075
|
+
host logs.google.com
|
1076
|
+
port 777
|
1077
|
+
scheme https
|
1078
|
+
path /es/
|
1079
|
+
user john
|
1080
|
+
password doe
|
1081
|
+
template_name myapp_alias_template
|
1082
|
+
template_file #{template_file}
|
1083
|
+
customize_template {"--appid--": "myapp-logs","--index_prefix--":"mylogs"}
|
1084
|
+
rollover_index true
|
1085
|
+
index_date_pattern now/w{xxxx.ww}
|
1086
|
+
index_name mylogs
|
1087
|
+
application_name myapp
|
1088
|
+
}
|
1089
|
+
|
1090
|
+
# connection start
|
1091
|
+
stub_request(:head, "https://logs.google.com:777/es//").
|
1092
|
+
with(basic_auth: ['john', 'doe']).
|
1093
|
+
to_return(:status => 200, :body => "", :headers => {})
|
1094
|
+
# check if template exists
|
1095
|
+
stub_request(:get, "https://logs.google.com:777/es//_template/myapp_alias_template").
|
1096
|
+
with(basic_auth: ['john', 'doe']).
|
1097
|
+
to_return(:status => 404, :body => "", :headers => {})
|
1098
|
+
# creation
|
1099
|
+
stub_request(:put, "https://logs.google.com:777/es//_template/myapp_alias_template").
|
1100
|
+
with(basic_auth: ['john', 'doe']).
|
1101
|
+
to_return(:status => 200, :body => "", :headers => {})
|
1102
|
+
# creation of index which can rollover
|
1103
|
+
stub_request(:put, "https://logs.google.com:777/es//%3Cmylogs-myapp-%7Bnow%2Fw%7Bxxxx.ww%7D%7D-000001%3E").
|
1104
|
+
with(basic_auth: ['john', 'doe']).
|
1105
|
+
to_return(:status => 200, :body => "", :headers => {})
|
1106
|
+
# check if alias exists
|
1107
|
+
stub_request(:head, "https://logs.google.com:777/es//_alias/mylogs").
|
1108
|
+
with(basic_auth: ['john', 'doe']).
|
1109
|
+
to_return(:status => 404, :body => "", :headers => {})
|
1110
|
+
# put the alias for the index
|
1111
|
+
stub_request(:put, "https://logs.google.com:777/es//%3Cmylogs-myapp-%7Bnow%2Fw%7Bxxxx.ww%7D%7D-000001%3E/_alias/mylogs").
|
1112
|
+
with(basic_auth: ['john', 'doe']).
|
1113
|
+
to_return(:status => 200, :body => "", :headers => {})
|
1114
|
+
|
1115
|
+
driver(config)
|
1116
|
+
|
1117
|
+
assert_requested(:put, "https://logs.google.com:777/es//_template/myapp_alias_template", times: 1)
|
1118
|
+
end
|
1119
|
+
|
1120
|
+
def test_custom_template_with_rollover_index_create_and_deflector_alias
|
1121
|
+
cwd = File.dirname(__FILE__)
|
1122
|
+
template_file = File.join(cwd, 'test_alias_template.json')
|
1123
|
+
|
976
1124
|
config = %{
|
977
1125
|
host logs.google.com
|
978
1126
|
port 777
|
@@ -986,7 +1134,7 @@ class ElasticsearchOutput < Test::Unit::TestCase
|
|
986
1134
|
rollover_index true
|
987
1135
|
index_date_pattern now/w{xxxx.ww}
|
988
1136
|
deflector_alias myapp_deflector
|
989
|
-
|
1137
|
+
index_name mylogs
|
990
1138
|
application_name myapp
|
991
1139
|
}
|
992
1140
|
|
@@ -1017,12 +1165,63 @@ class ElasticsearchOutput < Test::Unit::TestCase
|
|
1017
1165
|
|
1018
1166
|
driver(config)
|
1019
1167
|
|
1020
|
-
|
1021
|
-
|
1168
|
+
assert_requested(:put, "https://logs.google.com:777/es//_template/myapp_alias_template", times: 1)
|
1169
|
+
end
|
1170
|
+
|
1171
|
+
def test_custom_template_with_rollover_index_create_with_logstash_format
|
1172
|
+
cwd = File.dirname(__FILE__)
|
1173
|
+
template_file = File.join(cwd, 'test_alias_template.json')
|
1174
|
+
|
1175
|
+
config = %{
|
1176
|
+
host logs.google.com
|
1177
|
+
port 777
|
1178
|
+
scheme https
|
1179
|
+
path /es/
|
1180
|
+
user john
|
1181
|
+
password doe
|
1182
|
+
template_name myapp_alias_template
|
1183
|
+
template_file #{template_file}
|
1184
|
+
customize_template {"--appid--": "myapp-logs","--index_prefix--":"mylogs"}
|
1185
|
+
rollover_index true
|
1186
|
+
index_date_pattern now/w{xxxx.ww}
|
1187
|
+
logstash_format true
|
1188
|
+
logstash_prefix mylogs
|
1189
|
+
application_name myapp
|
1190
|
+
}
|
1191
|
+
|
1192
|
+
# connection start
|
1193
|
+
stub_request(:head, "https://logs.google.com:777/es//").
|
1194
|
+
with(basic_auth: ['john', 'doe']).
|
1195
|
+
to_return(:status => 200, :body => "", :headers => {})
|
1196
|
+
# check if template exists
|
1197
|
+
stub_request(:get, "https://logs.google.com:777/es//_template/myapp_alias_template").
|
1198
|
+
with(basic_auth: ['john', 'doe']).
|
1199
|
+
to_return(:status => 404, :body => "", :headers => {})
|
1200
|
+
# creation
|
1201
|
+
stub_request(:put, "https://logs.google.com:777/es//_template/myapp_alias_template").
|
1202
|
+
with(basic_auth: ['john', 'doe']).
|
1203
|
+
to_return(:status => 200, :body => "", :headers => {})
|
1204
|
+
# creation of index which can rollover
|
1205
|
+
stub_request(:put, "https://logs.google.com:777/es//%3Cmylogs-myapp-%7Bnow%2Fw%7Bxxxx.ww%7D%7D-000001%3E").
|
1206
|
+
with(basic_auth: ['john', 'doe']).
|
1207
|
+
to_return(:status => 200, :body => "", :headers => {})
|
1208
|
+
# check if alias exists
|
1209
|
+
timestr = Time.now.strftime("%Y.%m.%d")
|
1210
|
+
stub_request(:head, "https://logs.google.com:777/es//_alias/mylogs-#{timestr}").
|
1211
|
+
with(basic_auth: ['john', 'doe']).
|
1212
|
+
to_return(:status => 404, :body => "", :headers => {})
|
1213
|
+
# put the alias for the index
|
1214
|
+
stub_request(:put, "https://logs.google.com:777/es//%3Cmylogs-myapp-%7Bnow%2Fw%7Bxxxx.ww%7D%7D-000001%3E/_alias/mylogs-#{timestr}").
|
1215
|
+
with(basic_auth: ['john', 'doe']).
|
1216
|
+
to_return(:status => 200, :body => "", :headers => {})
|
1217
|
+
|
1218
|
+
driver(config)
|
1219
|
+
|
1220
|
+
elastic_request = stub_elastic("https://logs.google.com:777/es//_bulk")
|
1221
|
+
driver.run(default_tag: 'custom-test') do
|
1022
1222
|
driver.feed(sample_record)
|
1023
1223
|
end
|
1024
|
-
|
1025
|
-
assert_requested(:put, "https://logs.google.com:777/es//_template/myapp_alias_template", times: 1)
|
1224
|
+
assert_requested(elastic_request)
|
1026
1225
|
end
|
1027
1226
|
|
1028
1227
|
class CustomTemplateIndexLifecycleManagementTest < self
|
@@ -1048,10 +1247,78 @@ class ElasticsearchOutput < Test::Unit::TestCase
|
|
1048
1247
|
template_name myapp_alias_template
|
1049
1248
|
template_file #{template_file}
|
1050
1249
|
customize_template {"--appid--": "myapp-logs","--index_prefix--":"mylogs"}
|
1051
|
-
|
1250
|
+
index_date_pattern now/w{xxxx.ww}
|
1251
|
+
index_name mylogs
|
1252
|
+
application_name myapp
|
1253
|
+
ilm_policy_id fluentd-policy
|
1254
|
+
enable_ilm true
|
1255
|
+
}
|
1256
|
+
|
1257
|
+
# connection start
|
1258
|
+
stub_request(:head, "https://logs.google.com:777/es//").
|
1259
|
+
with(basic_auth: ['john', 'doe']).
|
1260
|
+
to_return(:status => 200, :body => "", :headers => {})
|
1261
|
+
# check if template exists
|
1262
|
+
stub_request(:get, "https://logs.google.com:777/es//_template/myapp_alias_template").
|
1263
|
+
with(basic_auth: ['john', 'doe']).
|
1264
|
+
to_return(:status => 404, :body => "", :headers => {})
|
1265
|
+
# creation
|
1266
|
+
stub_request(:put, "https://logs.google.com:777/es//_template/myapp_alias_template").
|
1267
|
+
with(basic_auth: ['john', 'doe']).
|
1268
|
+
to_return(:status => 200, :body => "", :headers => {})
|
1269
|
+
# creation of index which can rollover
|
1270
|
+
stub_request(:put, "https://logs.google.com:777/es//%3Cmylogs-myapp-%7Bnow%2Fw%7Bxxxx.ww%7D%7D-000001%3E").
|
1271
|
+
with(basic_auth: ['john', 'doe']).
|
1272
|
+
to_return(:status => 200, :body => "", :headers => {})
|
1273
|
+
# check if alias exists
|
1274
|
+
stub_request(:head, "https://logs.google.com:777/es//_alias/mylogs").
|
1275
|
+
with(basic_auth: ['john', 'doe']).
|
1276
|
+
to_return(:status => 404, :body => "", :headers => {})
|
1277
|
+
stub_request(:get, "https://logs.google.com:777/es//_template/mylogs").
|
1278
|
+
with(basic_auth: ['john', 'doe']).
|
1279
|
+
to_return(status: 404, body: "", headers: {})
|
1280
|
+
stub_request(:put, "https://logs.google.com:777/es//_template/mylogs").
|
1281
|
+
with(basic_auth: ['john', 'doe'],
|
1282
|
+
body: "{\"order\":6,\"settings\":{\"index.lifecycle.name\":\"fluentd-policy\",\"index.lifecycle.rollover_alias\":\"mylogs\"},\"mappings\":{},\"aliases\":{\"myapp-logs-alias\":{}},\"index_patterns\":\"mylogs-*\"}").
|
1283
|
+
to_return(status: 200, body: "", headers: {})
|
1284
|
+
# put the alias for the index
|
1285
|
+
stub_request(:put, "https://logs.google.com:777/es//%3Cmylogs-myapp-%7Bnow%2Fw%7Bxxxx.ww%7D%7D-000001%3E/_alias/mylogs").
|
1286
|
+
with(basic_auth: ['john', 'doe'],
|
1287
|
+
:body => "{\"aliases\":{\"mylogs\":{\"is_write_index\":true}}}").
|
1288
|
+
to_return(:status => 200, :body => "", :headers => {})
|
1289
|
+
stub_request(:get, "https://logs.google.com:777/es//_xpack").
|
1290
|
+
with(basic_auth: ['john', 'doe']).
|
1291
|
+
to_return(:status => 200, :body => '{"features":{"ilm":{"available":true,"enabled":true}}}', :headers => {"Content-Type"=> "application/json"})
|
1292
|
+
stub_request(:get, "https://logs.google.com:777/es//_ilm/policy/fluentd-policy").
|
1293
|
+
with(basic_auth: ['john', 'doe']).
|
1294
|
+
to_return(:status => 404, :body => "", :headers => {})
|
1295
|
+
stub_request(:put, "https://logs.google.com:777/es//_ilm/policy/fluentd-policy").
|
1296
|
+
with(basic_auth: ['john', 'doe'],
|
1297
|
+
:body => "{\"policy\":{\"phases\":{\"hot\":{\"actions\":{\"rollover\":{\"max_size\":\"50gb\",\"max_age\":\"30d\"}}}}}}").
|
1298
|
+
to_return(:status => 200, :body => "", :headers => {})
|
1299
|
+
|
1300
|
+
driver(config)
|
1301
|
+
|
1302
|
+
assert_requested(:put, "https://logs.google.com:777/es//_template/mylogs", times: 1)
|
1303
|
+
end
|
1304
|
+
|
1305
|
+
def test_custom_template_with_rollover_index_create_and_default_ilm_with_deflector_alias
|
1306
|
+
cwd = File.dirname(__FILE__)
|
1307
|
+
template_file = File.join(cwd, 'test_alias_template.json')
|
1308
|
+
|
1309
|
+
config = %{
|
1310
|
+
host logs.google.com
|
1311
|
+
port 777
|
1312
|
+
scheme https
|
1313
|
+
path /es/
|
1314
|
+
user john
|
1315
|
+
password doe
|
1316
|
+
template_name myapp_alias_template
|
1317
|
+
template_file #{template_file}
|
1318
|
+
customize_template {"--appid--": "myapp-logs","--index_prefix--":"mylogs"}
|
1052
1319
|
index_date_pattern now/w{xxxx.ww}
|
1053
1320
|
deflector_alias myapp_deflector
|
1054
|
-
|
1321
|
+
index_name mylogs
|
1055
1322
|
application_name myapp
|
1056
1323
|
ilm_policy_id fluentd-policy
|
1057
1324
|
enable_ilm true
|
@@ -1102,12 +1369,7 @@ class ElasticsearchOutput < Test::Unit::TestCase
|
|
1102
1369
|
|
1103
1370
|
driver(config)
|
1104
1371
|
|
1105
|
-
|
1106
|
-
driver.run(default_tag: 'test') do
|
1107
|
-
driver.feed(sample_record)
|
1108
|
-
end
|
1109
|
-
|
1110
|
-
assert_requested(elastic_request)
|
1372
|
+
assert_requested(:put, "https://logs.google.com:777/es//_template/myapp_deflector", times: 1)
|
1111
1373
|
end
|
1112
1374
|
|
1113
1375
|
def test_custom_template_with_rollover_index_create_and_default_ilm_and_placeholders
|
@@ -1124,11 +1386,8 @@ class ElasticsearchOutput < Test::Unit::TestCase
|
|
1124
1386
|
template_name myapp_alias_template
|
1125
1387
|
template_file #{template_file}
|
1126
1388
|
customize_template {"--appid--": "myapp-logs","--index_prefix--":"mylogs"}
|
1127
|
-
rollover_index true
|
1128
1389
|
index_date_pattern now/w{xxxx.ww}
|
1129
|
-
index_name
|
1130
|
-
deflector_alias myapp_deflector-${tag}
|
1131
|
-
index_prefix mylogs
|
1390
|
+
index_name mylogs-${tag}
|
1132
1391
|
application_name myapp
|
1133
1392
|
ilm_policy_id fluentd-policy
|
1134
1393
|
enable_ilm true
|
@@ -1147,24 +1406,24 @@ class ElasticsearchOutput < Test::Unit::TestCase
|
|
1147
1406
|
with(basic_auth: ['john', 'doe']).
|
1148
1407
|
to_return(:status => 200, :body => "", :headers => {})
|
1149
1408
|
# creation of index which can rollover
|
1150
|
-
stub_request(:put, "https://logs.google.com:777/es//%3Cmylogs-myapp-%7Bnow%2Fw%7Bxxxx.ww%7D%7D-000001%3E").
|
1409
|
+
stub_request(:put, "https://logs.google.com:777/es//%3Cmylogs-custom-test-myapp-%7Bnow%2Fw%7Bxxxx.ww%7D%7D-000001%3E").
|
1151
1410
|
with(basic_auth: ['john', 'doe']).
|
1152
1411
|
to_return(:status => 200, :body => "", :headers => {})
|
1153
1412
|
# check if alias exists
|
1154
|
-
stub_request(:head, "https://logs.google.com:777/es//_alias/
|
1413
|
+
stub_request(:head, "https://logs.google.com:777/es//_alias/mylogs-custom-test").
|
1155
1414
|
with(basic_auth: ['john', 'doe']).
|
1156
1415
|
to_return(:status => 404, :body => "", :headers => {})
|
1157
|
-
stub_request(:get, "https://logs.google.com:777/es//_template/
|
1416
|
+
stub_request(:get, "https://logs.google.com:777/es//_template/mylogs-custom-test").
|
1158
1417
|
with(basic_auth: ['john', 'doe']).
|
1159
1418
|
to_return(status: 404, body: "", headers: {})
|
1160
|
-
stub_request(:put, "https://logs.google.com:777/es//_template/
|
1419
|
+
stub_request(:put, "https://logs.google.com:777/es//_template/mylogs-custom-test").
|
1161
1420
|
with(basic_auth: ['john', 'doe'],
|
1162
|
-
body: "{\"order\":8,\"settings\":{\"index.lifecycle.name\":\"fluentd-policy\",\"index.lifecycle.rollover_alias\":\"
|
1421
|
+
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-*\"}").
|
1163
1422
|
to_return(status: 200, body: "", headers: {})
|
1164
1423
|
# put the alias for the index
|
1165
|
-
stub_request(:put, "https://logs.google.com:777/es//%3Cmylogs-myapp-%7Bnow%2Fw%7Bxxxx.ww%7D%7D-000001%3E/_alias/
|
1424
|
+
stub_request(:put, "https://logs.google.com:777/es//%3Cmylogs-custom-test-myapp-%7Bnow%2Fw%7Bxxxx.ww%7D%7D-000001%3E/_alias/mylogs-custom-test").
|
1166
1425
|
with(basic_auth: ['john', 'doe'],
|
1167
|
-
:body => "{\"aliases\":{\"
|
1426
|
+
:body => "{\"aliases\":{\"mylogs-custom-test\":{\"is_write_index\":true}}}").
|
1168
1427
|
to_return(:status => 200, :body => "", :headers => {})
|
1169
1428
|
stub_request(:get, "https://logs.google.com:777/es//_xpack").
|
1170
1429
|
with(basic_auth: ['john', 'doe']).
|
@@ -1183,9 +1442,9 @@ class ElasticsearchOutput < Test::Unit::TestCase
|
|
1183
1442
|
driver.run(default_tag: 'custom-test') do
|
1184
1443
|
driver.feed(sample_record)
|
1185
1444
|
end
|
1186
|
-
assert_equal('
|
1445
|
+
assert_equal('mylogs-custom-test', index_cmds.first['index']['_index'])
|
1187
1446
|
|
1188
|
-
assert_equal ["
|
1447
|
+
assert_equal ["mylogs-custom-test"], driver.instance.alias_indexes
|
1189
1448
|
|
1190
1449
|
assert_requested(elastic_request)
|
1191
1450
|
end
|
@@ -1204,10 +1463,8 @@ class ElasticsearchOutput < Test::Unit::TestCase
|
|
1204
1463
|
template_name myapp_alias_template
|
1205
1464
|
template_file #{template_file}
|
1206
1465
|
customize_template {"--appid--": "myapp-logs","--index_prefix--":"mylogs"}
|
1207
|
-
rollover_index true
|
1208
1466
|
index_date_pattern now/w{xxxx.ww}
|
1209
|
-
|
1210
|
-
index_prefix mylogs
|
1467
|
+
index_name mylogs
|
1211
1468
|
application_name myapp
|
1212
1469
|
ilm_policy_id fluentd-policy
|
1213
1470
|
enable_ilm true
|
@@ -1231,19 +1488,19 @@ class ElasticsearchOutput < Test::Unit::TestCase
|
|
1231
1488
|
with(basic_auth: ['john', 'doe']).
|
1232
1489
|
to_return(:status => 200, :body => "", :headers => {})
|
1233
1490
|
# check if alias exists
|
1234
|
-
stub_request(:head, "https://logs.google.com:777/es//_alias/
|
1491
|
+
stub_request(:head, "https://logs.google.com:777/es//_alias/mylogs").
|
1235
1492
|
with(basic_auth: ['john', 'doe']).
|
1236
1493
|
to_return(:status => 404, :body => "", :headers => {})
|
1237
|
-
stub_request(:get, "https://logs.google.com:777/es//_template/
|
1494
|
+
stub_request(:get, "https://logs.google.com:777/es//_template/mylogs").
|
1238
1495
|
with(basic_auth: ['john', 'doe']).
|
1239
1496
|
to_return(status: 404, body: "", headers: {})
|
1240
|
-
stub_request(:put, "https://logs.google.com:777/es//_template/
|
1497
|
+
stub_request(:put, "https://logs.google.com:777/es//_template/mylogs").
|
1241
1498
|
with(basic_auth: ['john', 'doe']).
|
1242
1499
|
to_return(status: 200, body: "", headers: {})
|
1243
1500
|
# put the alias for the index
|
1244
|
-
stub_request(:put, "https://logs.google.com:777/es//%3Cmylogs-myapp-%7Bnow%2Fw%7Bxxxx.ww%7D%7D-000001%3E/_alias/
|
1501
|
+
stub_request(:put, "https://logs.google.com:777/es//%3Cmylogs-myapp-%7Bnow%2Fw%7Bxxxx.ww%7D%7D-000001%3E/_alias/mylogs").
|
1245
1502
|
with(basic_auth: ['john', 'doe'],
|
1246
|
-
:body => "{\"aliases\":{\"
|
1503
|
+
:body => "{\"aliases\":{\"mylogs\":{\"is_write_index\":true}}}").
|
1247
1504
|
to_return(:status => 200, :body => "", :headers => {})
|
1248
1505
|
stub_request(:get, "https://logs.google.com:777/es//_xpack").
|
1249
1506
|
with(basic_auth: ['john', 'doe']).
|
@@ -1258,12 +1515,7 @@ class ElasticsearchOutput < Test::Unit::TestCase
|
|
1258
1515
|
|
1259
1516
|
driver(config)
|
1260
1517
|
|
1261
|
-
|
1262
|
-
driver.run(default_tag: 'test') do
|
1263
|
-
driver.feed(sample_record)
|
1264
|
-
end
|
1265
|
-
|
1266
|
-
assert_requested(elastic_request)
|
1518
|
+
assert_requested(:put, "https://logs.google.com:777/es//_template/mylogs", times: 1)
|
1267
1519
|
end
|
1268
1520
|
end
|
1269
1521
|
|
@@ -1298,11 +1550,6 @@ class ElasticsearchOutput < Test::Unit::TestCase
|
|
1298
1550
|
|
1299
1551
|
driver(config)
|
1300
1552
|
|
1301
|
-
stub_elastic("https://logs.google.com:777/es//_bulk")
|
1302
|
-
driver.run(default_tag: 'test') do
|
1303
|
-
driver.feed(sample_record)
|
1304
|
-
end
|
1305
|
-
|
1306
1553
|
assert_requested(:put, "https://logs.google.com:777/es//_template/logstash", times: 1)
|
1307
1554
|
end
|
1308
1555
|
|
@@ -1338,11 +1585,6 @@ class ElasticsearchOutput < Test::Unit::TestCase
|
|
1338
1585
|
|
1339
1586
|
driver(config)
|
1340
1587
|
|
1341
|
-
stub_elastic("https://logs.google.com:777/es//_bulk")
|
1342
|
-
driver.run(default_tag: 'test') do
|
1343
|
-
driver.feed(sample_record)
|
1344
|
-
end
|
1345
|
-
|
1346
1588
|
assert_requested(:put, "https://logs.google.com:777/es//_template/myapp_alias_template", times: 1)
|
1347
1589
|
end
|
1348
1590
|
|
@@ -1363,7 +1605,7 @@ class ElasticsearchOutput < Test::Unit::TestCase
|
|
1363
1605
|
customize_template {"--appid--": "myapp-logs","--index_prefix--":"mylogs"}
|
1364
1606
|
deflector_alias myapp_deflector
|
1365
1607
|
rollover_index true
|
1366
|
-
|
1608
|
+
index_name mylogs
|
1367
1609
|
application_name myapp
|
1368
1610
|
}
|
1369
1611
|
|
@@ -1394,11 +1636,6 @@ class ElasticsearchOutput < Test::Unit::TestCase
|
|
1394
1636
|
|
1395
1637
|
driver(config)
|
1396
1638
|
|
1397
|
-
stub_elastic("https://logs.google.com:777/es//_bulk")
|
1398
|
-
driver.run(default_tag: 'test') do
|
1399
|
-
driver.feed(sample_record)
|
1400
|
-
end
|
1401
|
-
|
1402
1639
|
assert_requested(:put, "https://logs.google.com:777/es//_template/myapp_alias_template", times: 1)
|
1403
1640
|
end
|
1404
1641
|
|
@@ -1423,13 +1660,9 @@ class ElasticsearchOutput < Test::Unit::TestCase
|
|
1423
1660
|
with(basic_auth: ['john', 'doe']).
|
1424
1661
|
to_return(:status => 404, :body => "", :headers => {})
|
1425
1662
|
|
1426
|
-
driver(config)
|
1427
1663
|
|
1428
|
-
stub_elastic("https://logs.google.com:777/es//_bulk")
|
1429
1664
|
assert_raise(RuntimeError) {
|
1430
|
-
driver
|
1431
|
-
driver.feed(sample_record)
|
1432
|
-
end
|
1665
|
+
driver(config)
|
1433
1666
|
}
|
1434
1667
|
end
|
1435
1668
|
|
@@ -1497,11 +1730,8 @@ class ElasticsearchOutput < Test::Unit::TestCase
|
|
1497
1730
|
raise Faraday::ConnectionFailed, "Test message"
|
1498
1731
|
end
|
1499
1732
|
|
1500
|
-
|
1501
|
-
|
1502
|
-
stub_elastic("https://logs.google.com:777/es//_bulk")
|
1503
|
-
driver.run(default_tag: 'test') do
|
1504
|
-
driver.feed(sample_record)
|
1733
|
+
assert_raise(Fluent::Plugin::ElasticsearchError::RetryableOperationExhaustedFailure) do
|
1734
|
+
driver(config)
|
1505
1735
|
end
|
1506
1736
|
|
1507
1737
|
assert_equal(4, connection_resets)
|
@@ -1534,11 +1764,6 @@ class ElasticsearchOutput < Test::Unit::TestCase
|
|
1534
1764
|
|
1535
1765
|
driver(config)
|
1536
1766
|
|
1537
|
-
stub_elastic("https://logs.google.com:778/es//_bulk")
|
1538
|
-
driver.run(default_tag: 'test') do
|
1539
|
-
driver.feed(sample_record)
|
1540
|
-
end
|
1541
|
-
|
1542
1767
|
assert_equal(4, connection_resets)
|
1543
1768
|
end
|
1544
1769
|
|
@@ -1674,11 +1899,6 @@ class ElasticsearchOutput < Test::Unit::TestCase
|
|
1674
1899
|
|
1675
1900
|
driver(config)
|
1676
1901
|
|
1677
|
-
stub_elastic("https://logs.google.com:777/es//_bulk")
|
1678
|
-
driver.run(default_tag: 'test') do
|
1679
|
-
driver.feed(sample_record)
|
1680
|
-
end
|
1681
|
-
|
1682
1902
|
assert_requested(:put, "https://logs.google.com:777/es//_template/logstash", times: 1)
|
1683
1903
|
|
1684
1904
|
assert_not_requested(:put, "https://logs.google.com:777/es//_template/logstash1")
|
@@ -2123,6 +2343,58 @@ class ElasticsearchOutput < Test::Unit::TestCase
|
|
2123
2343
|
assert_equal(pipeline, index_cmds.first['index']['pipeline'])
|
2124
2344
|
end
|
2125
2345
|
|
2346
|
+
class PipelinePlaceholdersTest < self
|
2347
|
+
def test_writes_to_default_index_with_pipeline_tag_placeholder
|
2348
|
+
pipeline = "fluentd-${tag}"
|
2349
|
+
driver.configure("pipeline #{pipeline}")
|
2350
|
+
stub_elastic
|
2351
|
+
driver.run(default_tag: 'test.builtin.placeholder') do
|
2352
|
+
driver.feed(sample_record)
|
2353
|
+
end
|
2354
|
+
assert_equal("fluentd-test.builtin.placeholder", index_cmds.first['index']['pipeline'])
|
2355
|
+
end
|
2356
|
+
|
2357
|
+
def test_writes_to_default_index_with_pipeline_time_placeholder
|
2358
|
+
driver.configure(Fluent::Config::Element.new(
|
2359
|
+
'ROOT', '', {
|
2360
|
+
'@type' => 'elasticsearch',
|
2361
|
+
'pipeline' => 'fluentd-%Y%m%d',
|
2362
|
+
}, [
|
2363
|
+
Fluent::Config::Element.new('buffer', 'tag,time', {
|
2364
|
+
'chunk_keys' => ['tag', 'time'],
|
2365
|
+
'timekey' => 3600,
|
2366
|
+
}, [])
|
2367
|
+
]
|
2368
|
+
))
|
2369
|
+
time = Time.parse Date.today.iso8601
|
2370
|
+
pipeline = "fluentd-#{time.getutc.strftime("%Y%m%d")}"
|
2371
|
+
stub_elastic
|
2372
|
+
driver.run(default_tag: 'test') do
|
2373
|
+
driver.feed(time.to_i, sample_record)
|
2374
|
+
end
|
2375
|
+
assert_equal(pipeline, index_cmds.first['index']['pipeline'])
|
2376
|
+
end
|
2377
|
+
|
2378
|
+
def test_writes_to_default_index_with_pipeline_custom_key_placeholder
|
2379
|
+
driver.configure(Fluent::Config::Element.new(
|
2380
|
+
'ROOT', '', {
|
2381
|
+
'@type' => 'elasticsearch',
|
2382
|
+
'pipeline' => 'fluentd-${pipeline_id}',
|
2383
|
+
}, [
|
2384
|
+
Fluent::Config::Element.new('buffer', 'tag,pipeline_id', {}, [])
|
2385
|
+
]
|
2386
|
+
))
|
2387
|
+
time = Time.parse Date.today.iso8601
|
2388
|
+
pipeline_id = "mypipeline"
|
2389
|
+
logstash_index = "fluentd-#{pipeline_id}"
|
2390
|
+
stub_elastic
|
2391
|
+
driver.run(default_tag: 'test') do
|
2392
|
+
driver.feed(time.to_i, sample_record.merge({"pipeline_id" => pipeline_id}))
|
2393
|
+
end
|
2394
|
+
assert_equal(logstash_index, index_cmds.first['index']['pipeline'])
|
2395
|
+
end
|
2396
|
+
end
|
2397
|
+
|
2126
2398
|
def test_writes_to_target_index_key_fallack
|
2127
2399
|
driver.configure("target_index_key @target_index\n")
|
2128
2400
|
stub_elastic
|