logstash-output-elasticsearch 10.5.0-java → 10.7.0-java

Sign up to get free protection for your applications and to get access to all the features.
Files changed (21) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +16 -0
  3. data/docs/index.asciidoc +80 -50
  4. data/lib/logstash/outputs/elasticsearch.rb +33 -0
  5. data/lib/logstash/outputs/elasticsearch/common.rb +21 -8
  6. data/lib/logstash/outputs/elasticsearch/common_configs.rb +3 -3
  7. data/lib/logstash/outputs/elasticsearch/ilm.rb +1 -1
  8. data/lib/logstash/outputs/elasticsearch/template_manager.rb +12 -9
  9. data/lib/logstash/outputs/elasticsearch/{elasticsearch-template-es2x.json → templates/ecs-disabled/elasticsearch-2x.json} +0 -0
  10. data/lib/logstash/outputs/elasticsearch/{elasticsearch-template-es5x.json → templates/ecs-disabled/elasticsearch-5x.json} +0 -0
  11. data/lib/logstash/outputs/elasticsearch/{elasticsearch-template-es6x.json → templates/ecs-disabled/elasticsearch-6x.json} +0 -0
  12. data/lib/logstash/outputs/elasticsearch/{elasticsearch-template-es7x.json → templates/ecs-disabled/elasticsearch-7x.json} +0 -0
  13. data/lib/logstash/outputs/elasticsearch/{elasticsearch-template-es8x.json → templates/ecs-disabled/elasticsearch-8x.json} +0 -0
  14. data/lib/logstash/outputs/elasticsearch/templates/ecs-v1/elasticsearch-6x.json +2950 -0
  15. data/lib/logstash/outputs/elasticsearch/templates/ecs-v1/elasticsearch-7x.json +2948 -0
  16. data/logstash-output-elasticsearch.gemspec +2 -1
  17. data/spec/integration/outputs/ilm_spec.rb +2 -2
  18. data/spec/unit/outputs/elasticsearch/template_manager_spec.rb +9 -3
  19. data/spec/unit/outputs/elasticsearch_spec.rb +23 -1
  20. data/spec/unit/outputs/error_whitelist_spec.rb +1 -1
  21. metadata +23 -7
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 71b5bb8d2a918b37ee594c9bcbe11ec872dbfb2ee30094a6b2ede8ea4550fb46
4
- data.tar.gz: fc4c5cba1d3cc99cfbdf17f3658723d97889e7d0c824dc430986f5f64ea652e0
3
+ metadata.gz: 311303e9bfc0369329af5ec4da290d92e428bddee2e022fb1f22967fb1f1d6d9
4
+ data.tar.gz: c88b0816b49bd5f5ab232156340f946b674e70a62b86f8a1c4c25ed985840c6e
5
5
  SHA512:
6
- metadata.gz: 036130a59c31c2634db172b37a918fdcb29ca93d608f1cfb80a54a5f0e3620b0766acec221f0c2ef0c65e7f764085ac67f16d5263fea9b72d5b5256f8ac7be98
7
- data.tar.gz: 0b27c6975420f0390d945bc7bdabd9fd5afabe12d8a5a20a4ccb6cc2d2ea5da2946942c76b8fc67de5bee97063b5771770a74e89a7f40f846df1979c798e9499
6
+ metadata.gz: 7d9910d4f28a864ac45450cd2be179268d8b83c91f8dab57328e6c772b06a39d7d8aa3fa7c34cddcd45a185bc994da2f2b46ee3b29bf2dc219a3189b6e995b30
7
+ data.tar.gz: de41059508b3f06466446d3a183d4959cdaaacffb00492d917acc57824b4864a694c5834c8e210d8d277ae186c146d6bf3c6b9ab0c0cd1ab73bc7f95a6f4e871
@@ -1,3 +1,19 @@
1
+ ## 10.7.0
2
+ - Changed: don't set the pipeline parameter if the value resolves to an empty string [#962](https://github.com/logstash-plugins/logstash-output-elasticsearch/pull/962)
3
+
4
+ ## 10.6.2
5
+ - [DOC] Added clarifying info on http compression settings and behaviors [#943](https://github.com/logstash-plugins/logstash-output-elasticsearch/pull/943)
6
+ - [DOC] Fixed entry for ilm_policy default value[#956](https://github.com/logstash-plugins/logstash-output-elasticsearch/pull/956)
7
+
8
+ ## 10.6.1
9
+ - Fixed an issue introduced in 10.6.0 that broke Logstash Core's monitoring feature when this plugin is run in Logstash 7.7-7.8. [#953](https://github.com/logstash-plugins/logstash-output-elasticsearch/pull/953)
10
+
11
+ ## 10.6.0
12
+ - Added `ecs_compatiblity` mode, for managing ECS-compatable templates [#952](https://github.com/logstash-plugins/logstash-output-elasticsearch/pull/952)
13
+
14
+ ## 10.5.1
15
+ - [DOC] Removed outdated compatibility notices, reworked cloud notice, and fixed formatting for `hosts` examples [#938](https://github.com/logstash-plugins/logstash-output-elasticsearch/pull/938)
16
+
1
17
  ## 10.5.0
2
18
  - Added api_key support [#934](https://github.com/logstash-plugins/logstash-output-elasticsearch/pull/934)
3
19
 
@@ -21,6 +21,21 @@ include::{include_path}/plugin_header.asciidoc[]
21
21
 
22
22
  ==== Description
23
23
 
24
+ If you plan to use the Kibana web interface to analyze data transformed by
25
+ Logstash, use the Elasticsearch output plugin to get your data into
26
+ Elasticsearch.
27
+
28
+ This output only speaks the HTTP protocol as it is the preferred protocol for
29
+ interacting with Elasticsearch. In previous versions it was possible to
30
+ communicate with Elasticsearch through the transport protocol, which is now
31
+ reserved for internal cluster communication between nodes
32
+ https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-transport.html[communication between nodes].
33
+ Using the https://www.elastic.co/guide/en/elasticsearch/reference/current/java-clients.html[transport protocol]
34
+ to communicate with the cluster has been deprecated in Elasticsearch 7.0.0 and
35
+ will be removed in 8.0.0
36
+
37
+ You can learn more about Elasticsearch at <https://www.elastic.co/products/elasticsearch>
38
+
24
39
  .Compatibility Note
25
40
  [NOTE]
26
41
  ================================================================================
@@ -36,47 +51,26 @@ ensure your template uses the `_doc` document-type before
36
51
  connecting to Elasticsearch 7.x.
37
52
  ================================================================================
38
53
 
39
- .Compatibility Note
40
- [NOTE]
41
- ================================================================================
42
- Starting with Elasticsearch 5.3, there's an {ref}/modules-http.html[HTTP setting]
43
- called `http.content_type.required`. If this option is set to `true`, and you
44
- are using Logstash 2.4 through 5.2, you need to update the Elasticsearch output
45
- plugin to version 6.2.5 or higher.
46
-
47
- ================================================================================
54
+ ===== Hosted {es} Service on Elastic Cloud
48
55
 
49
- If you plan to use the Kibana web
50
- interface, use the Elasticsearch output plugin to get your log data into
51
- Elasticsearch.
52
-
53
- TIP: You can run Elasticsearch on your own hardware, or use our
56
+ You can run Elasticsearch on your own hardware, or use our
54
57
  https://www.elastic.co/cloud/elasticsearch-service[hosted {es} Service] on
55
- Elastic Cloud. The Elasticsearch Service is available on both AWS and GCP.
56
- {ess-trial}[Try the {es} Service for free].
57
-
58
- This output only speaks the HTTP protocol. HTTP is the preferred protocol for interacting with Elasticsearch as of Logstash 2.0.
59
- We strongly encourage the use of HTTP over the node protocol for a number of reasons. HTTP is only marginally slower,
60
- yet far easier to administer and work with. When using the HTTP protocol one may upgrade Elasticsearch versions without having
61
- to upgrade Logstash in lock-step.
58
+ Elastic Cloud. The Elasticsearch Service is available on AWS, Google Cloud
59
+ Platform, and Microsoft Azure. {ess-trial}[Try the {es} Service for free].
62
60
 
63
- You can learn more about Elasticsearch at <https://www.elastic.co/products/elasticsearch>
61
+ ==== Compatibility with the Elastic Common Schema (ECS)
64
62
 
65
- ==== Template management for Elasticsearch 5.x
63
+ This plugin will persist events to Elasticsearch in the shape produced by
64
+ your pipeline, and _cannot_ be used to re-shape the event structure into a
65
+ shape that complies with ECS. To produce events that fully comply with ECS,
66
+ you will need to populate ECS-defined fields throughout your pipeline
67
+ definition.
66
68
 
67
- Index template for this version (Logstash 5.0) has been changed to reflect Elasticsearch's mapping changes in version 5.0.
68
- Most importantly, the subfield for string multi-fields has changed from `.raw` to `.keyword` to match ES default
69
- behavior.
70
-
71
- **Users installing ES 5.x and LS 5.x**
72
-
73
- This change will not affect you and you will continue to use the ES defaults.
74
-
75
- **Users upgrading from LS 2.x to LS 5.x with ES 5.x**
76
-
77
- LS will not force upgrade the template, if `logstash` template already exists. This means you will still use
78
- `.raw` for sub-fields coming from 2.x. If you choose to use the new template, you will have to reindex your data after
79
- the new template is installed.
69
+ However, the Elasticsearch Index Templates it manages can be configured to
70
+ be ECS-compatible by setting <<plugins-{type}s-{plugin}-ecs_compatibility>>.
71
+ By having an ECS-compatible template in place, we can ensure that Elasticsearch
72
+ is prepared to create and index fields in a way that is compatible with ECS,
73
+ and will correctly reject events with fields that conflict and cannot be coerced.
80
74
 
81
75
  ==== Writing to different indices: best practices
82
76
 
@@ -87,7 +81,7 @@ when using `ilm_rollover_alias`.
87
81
 
88
82
  ================================================================================
89
83
 
90
- If you're sending events to the same Elasticsearch cluster but you're targeting different indices you can:
84
+ If you're sending events to the same Elasticsearch cluster, but you're targeting different indices you can:
91
85
 
92
86
  * use different Elasticsearch outputs, each one with a different value for the `index` parameter
93
87
  * use one Elasticsearch output and use the dynamic variable substitution for the `index` parameter
@@ -224,13 +218,17 @@ not reevaluate its DNS value while the keepalive is in effect.
224
218
 
225
219
  ==== HTTP Compression
226
220
 
227
- This plugin supports request and response compression. Response compression is enabled by default and
228
- for Elasticsearch versions 5.0 and later, the user doesn't have to set any configs in Elasticsearch for
229
- it to send back compressed response. For versions before 5.0, `http.compression` must be set to `true` https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-http.html#modules-http[in
230
- Elasticsearch] to take advantage of response compression when using this plugin
221
+ This plugin supports request and response compression. Response compression is
222
+ enabled by default for HTTP and for Elasticsearch versions 5.0 and later.
231
223
 
232
- For requests compression, regardless of the Elasticsearch version, users have to enable `http_compression`
233
- setting in their Logstash config file.
224
+ You don't have to set any configs in Elasticsearch for it to send back a
225
+ compressed response. For versions before 5.0, or if HTTPS is enabled,
226
+ `http.compression` must be set to `true`
227
+ https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-http.html#modules-http[in
228
+ Elasticsearch] to take advantage of response compression when using this plugin.
229
+
230
+ For requests compression, regardless of the Elasticsearch version, enable the
231
+ `http_compression` setting in the Logstash config file.
234
232
 
235
233
  ==== Authentication
236
234
 
@@ -254,6 +252,7 @@ This plugin supports the following configuration options plus the <<plugins-{typ
254
252
  | <<plugins-{type}s-{plugin}-doc_as_upsert>> |<<boolean,boolean>>|No
255
253
  | <<plugins-{type}s-{plugin}-document_id>> |<<string,string>>|No
256
254
  | <<plugins-{type}s-{plugin}-document_type>> |<<string,string>>|No
255
+ | <<plugins-{type}s-{plugin}-ecs_compatibility>> | <<string,string>>|No
257
256
  | <<plugins-{type}s-{plugin}-failure_type_logging_whitelist>> |<<array,array>>|No
258
257
  | <<plugins-{type}s-{plugin}-healthcheck_path>> |<<string,string>>|No
259
258
  | <<plugins-{type}s-{plugin}-hosts>> |<<uri,uri>>|No
@@ -413,6 +412,25 @@ If you don't set a value for this option:
413
412
  - for elasticsearch clusters 6.x: the value of 'doc' will be used;
414
413
  - for elasticsearch clusters 5.x and below: the event's 'type' field will be used, if the field is not present the value of 'doc' will be used.
415
414
 
415
+ [id="plugins-{type}s-{plugin}-ecs_compatibility"]
416
+ ===== `ecs_compatibility`
417
+
418
+ * Value type is <<string,string>>
419
+ * Supported values are:
420
+ ** `disabled`: does not provide ECS-compatible templates
421
+ ** `v1`: provides defaults that are compatible with v1 of the Elastic Common Schema
422
+ * Default value depends on which version of Logstash is running:
423
+ ** When Logstash provides a `pipeline.ecs_compatibility` setting, its value is used as the default
424
+ ** Otherwise, the default value is `disabled`.
425
+
426
+ Controls this plugin's compatibility with the https://www.elastic.co/guide/en/ecs/current/index.html[Elastic Common Schema (ECS)],
427
+ including the installation of ECS-compatible index templates.
428
+ The value of this setting affects the _default_ values of:
429
+
430
+ * <<plugins-{type}s-{plugin}-index>>
431
+ * <<plugins-{type}s-{plugin}-template_name>>
432
+ * <<plugins-{type}s-{plugin}-ilm_rollover_alias>>
433
+
416
434
  [id="plugins-{type}s-{plugin}-failure_type_logging_whitelist"]
417
435
  ===== `failure_type_logging_whitelist`
418
436
 
@@ -453,11 +471,15 @@ If you have custom firewall rules you may need to change this
453
471
 
454
472
  Sets the host(s) of the remote instance. If given an array it will load balance requests across the hosts specified in the `hosts` parameter.
455
473
  Remember the `http` protocol uses the http://www.elastic.co/guide/en/elasticsearch/reference/current/modules-http.html#modules-http[http] address (eg. 9200, not 9300).
474
+
475
+ Examples:
476
+
456
477
  `"127.0.0.1"`
457
478
  `["127.0.0.1:9200","127.0.0.2:9200"]`
458
479
  `["http://127.0.0.1"]`
459
480
  `["https://127.0.0.1:9200"]`
460
481
  `["https://127.0.0.1:9200/mypath"]` (If using a proxy on a subpath)
482
+
461
483
  It is important to exclude http://www.elastic.co/guide/en/elasticsearch/reference/current/modules-node.html[dedicated master nodes] from the `hosts` list
462
484
  to prevent LS from sending bulk requests to the master nodes. So this parameter should only reference either data or client nodes in Elasticsearch.
463
485
 
@@ -505,7 +527,7 @@ NOTE: The pattern must finish with a dash and a number that will be automaticall
505
527
  ===== `ilm_policy`
506
528
 
507
529
  * Value type is <<string,string>>
508
- * Default value is `logstash`
530
+ * Default value is `logstash-policy`
509
531
 
510
532
  Modify this setting to use a custom Index Lifecycle Management policy, rather than the default. If this value is not set, the default policy will
511
533
  be automatically installed into Elasticsearch
@@ -516,7 +538,9 @@ NOTE: If this setting is specified, the policy must already exist in Elasticsear
516
538
  ===== `ilm_rollover_alias`
517
539
 
518
540
  * Value type is <<string,string>>
519
- * Default value is `logstash`
541
+ * Default value depends on whether <<plugins-{type}s-{plugin}-ecs_compatibility>> is enabled:
542
+ ** ECS Compatibility disabled: `logstash`
543
+ ** ECS Compatibility enabled: `ecs-logstash`
520
544
 
521
545
  The rollover alias is the alias where indices managed using Index Lifecycle Management will be written to.
522
546
 
@@ -530,7 +554,9 @@ NOTE: `ilm_rollover_alias` does NOT support dynamic variable substitution as `in
530
554
  ===== `index`
531
555
 
532
556
  * Value type is <<string,string>>
533
- * Default value is `"logstash-%{+yyyy.MM.dd}"`
557
+ * Default value depends on whether <<plugins-{type}s-{plugin}-ecs_compatibility>> is enabled:
558
+ ** ECS Compatibility disabled: `"logstash-%{+yyyy.MM.dd}"`
559
+ ** ECS Compatibility enabled: `"ecs-logstash-%{+yyyy.MM.dd}"`
534
560
 
535
561
  The index to write events to. This can be dynamic using the `%{foo}` syntax.
536
562
  The default value will partition your indices by day so you can more easily
@@ -564,7 +590,8 @@ Set the keystore password
564
590
  * Default value is `true`
565
591
 
566
592
  From Logstash 1.3 onwards, a template is applied to Elasticsearch during
567
- Logstash's startup if one with the name `template_name` does not already exist.
593
+ Logstash's startup if one with the name <<plugins-{type}s-{plugin}-template_name>>
594
+ does not already exist.
568
595
  By default, the contents of this template is the default template for
569
596
  `logstash-%{+YYYY.MM.dd}` which always matches indices based on the pattern
570
597
  `logstash-*`. Should you require support for other index names, or would like
@@ -620,8 +647,8 @@ not also set this field. That will raise an error at startup
620
647
  * Value type is <<string,string>>
621
648
  * Default value is `nil`
622
649
 
623
- Set which ingest pipeline you wish to execute for an event. You can also use event dependent configuration
624
- here like `pipeline => "%{INGEST_PIPELINE}"`
650
+ Set which ingest pipeline you wish to execute for an event. You can also use event dependent configuration here
651
+ like `pipeline => "%{[@metadata][pipeline]}"`. The pipeline parameter won't be set if the value resolves to empty string ("").
625
652
 
626
653
  [id="plugins-{type}s-{plugin}-pool_max"]
627
654
  ===== `pool_max`
@@ -815,7 +842,10 @@ If not set, the included template will be used.
815
842
  ===== `template_name`
816
843
 
817
844
  * Value type is <<string,string>>
818
- * Default value is `"logstash"`
845
+ * Default value depends on whether <<plugins-{type}s-{plugin}-ecs_compatibility>> is enabled:
846
+ ** ECS Compatibility disabled: `logstash`
847
+ ** ECS Compatibility enabled: `ecs-logstash`
848
+
819
849
 
820
850
  This configuration option defines how the template is named inside Elasticsearch.
821
851
  Note that if you have used the template management features and subsequently
@@ -92,6 +92,8 @@ class LogStash::Outputs::ElasticSearch < LogStash::Outputs::Base
92
92
  require "logstash/outputs/elasticsearch/common"
93
93
  require "logstash/outputs/elasticsearch/ilm"
94
94
 
95
+ require 'logstash/plugin_mixins/ecs_compatibility_support'
96
+
95
97
  # Protocol agnostic (i.e. non-http, non-java specific) configs go here
96
98
  include(LogStash::Outputs::ElasticSearch::CommonConfigs)
97
99
 
@@ -101,6 +103,9 @@ class LogStash::Outputs::ElasticSearch < LogStash::Outputs::Base
101
103
  # Methods for ILM support
102
104
  include(LogStash::Outputs::ElasticSearch::Ilm)
103
105
 
106
+ # ecs_compatibility option, provided by Logstash core or the support adapter.
107
+ include(LogStash::PluginMixins::ECSCompatibilitySupport)
108
+
104
109
  config_name "elasticsearch"
105
110
 
106
111
  # The Elasticsearch action to perform. Valid actions are:
@@ -242,6 +247,34 @@ class LogStash::Outputs::ElasticSearch < LogStash::Outputs::Base
242
247
  # Custom Headers to send on each request to elasticsearch nodes
243
248
  config :custom_headers, :validate => :hash, :default => {}
244
249
 
250
+ def initialize(*params)
251
+ super
252
+ setup_ecs_compatibility_related_defaults
253
+ end
254
+
255
+ def setup_ecs_compatibility_related_defaults
256
+ case ecs_compatibility
257
+ when :disabled
258
+ @default_index = "logstash-%{+yyyy.MM.dd}"
259
+ @default_ilm_rollover_alias = "logstash"
260
+ @default_template_name = 'logstash'
261
+ when :v1
262
+ @default_index = "ecs-logstash-%{+yyyy.MM.dd}"
263
+ @default_ilm_rollover_alias = "ecs-logstash"
264
+ @default_template_name = 'ecs-logstash'
265
+ else
266
+ fail("unsupported ECS Compatibility `#{ecs_compatibility}`")
267
+ end
268
+
269
+ @index ||= default_index
270
+ @ilm_rollover_alias ||= default_ilm_rollover_alias
271
+ @template_name ||= default_template_name
272
+ end
273
+
274
+ attr_reader :default_index
275
+ attr_reader :default_ilm_rollover_alias
276
+ attr_reader :default_template_name
277
+
245
278
  # @override to handle proxy => '' as if none was set
246
279
  def config_init(params)
247
280
  proxy = params['proxy']
@@ -60,8 +60,15 @@ module LogStash; module Outputs; class ElasticSearch;
60
60
  !!maximum_seen_major_version
61
61
  end
62
62
 
63
- def use_event_type?(client)
64
- client.maximum_seen_major_version < 8
63
+ ##
64
+ # WARNING: This method is overridden in a subclass in Logstash Core 7.7-7.8's monitoring,
65
+ # where a `client` argument is both required and ignored. In later versions of
66
+ # Logstash Core it is optional and ignored, but to make it optional here would
67
+ # allow us to accidentally break compatibility with Logstashes where it was required.
68
+ # @param noop_required_client [nil]: required `nil` for legacy reasons.
69
+ # @return [Boolean]
70
+ def use_event_type?(noop_required_client)
71
+ maximum_seen_major_version < 8
65
72
  end
66
73
 
67
74
  # Convert the event into a 3-tuple of action, params, and event
@@ -74,10 +81,16 @@ module LogStash; module Outputs; class ElasticSearch;
74
81
  routing_field_name => @routing ? event.sprintf(@routing) : nil
75
82
  }
76
83
 
77
- params[:_type] = get_event_type(event) if use_event_type?(client)
84
+ params[:_type] = get_event_type(event) if use_event_type?(nil)
78
85
 
79
86
  if @pipeline
80
- params[:pipeline] = event.sprintf(@pipeline)
87
+ value = event.sprintf(@pipeline)
88
+ # convention: empty string equates to not using a pipeline
89
+ # this is useful when using a field reference in the pipeline setting, e.g.
90
+ # elasticsearch {
91
+ # pipeline => "%{[@metadata][pipeline]}"
92
+ # }
93
+ params[:pipeline] = value unless value.empty?
81
94
  end
82
95
 
83
96
  if @parent
@@ -347,11 +360,11 @@ module LogStash; module Outputs; class ElasticSearch;
347
360
  type = if @document_type
348
361
  event.sprintf(@document_type)
349
362
  else
350
- if client.maximum_seen_major_version < 6
363
+ if maximum_seen_major_version < 6
351
364
  event.get("type") || DEFAULT_EVENT_TYPE_ES6
352
- elsif client.maximum_seen_major_version == 6
365
+ elsif maximum_seen_major_version == 6
353
366
  DEFAULT_EVENT_TYPE_ES6
354
- elsif client.maximum_seen_major_version == 7
367
+ elsif maximum_seen_major_version == 7
355
368
  DEFAULT_EVENT_TYPE_ES7
356
369
  else
357
370
  nil
@@ -436,7 +449,7 @@ module LogStash; module Outputs; class ElasticSearch;
436
449
  end
437
450
 
438
451
  def default_index?(index)
439
- @index == LogStash::Outputs::ElasticSearch::CommonConfigs::DEFAULT_INDEX_NAME
452
+ @index == @default_index
440
453
  end
441
454
 
442
455
  def dlq_enabled?
@@ -17,7 +17,7 @@ module LogStash; module Outputs; class ElasticSearch
17
17
  # For weekly indexes ISO 8601 format is recommended, eg. logstash-%{+xxxx.ww}.
18
18
  # LS uses Joda to format the index pattern from event timestamp.
19
19
  # Joda formats are defined http://www.joda.org/joda-time/apidocs/org/joda/time/format/DateTimeFormat.html[here].
20
- mod.config :index, :validate => :string, :default => DEFAULT_INDEX_NAME
20
+ mod.config :index, :validate => :string
21
21
 
22
22
  mod.config :document_type,
23
23
  :validate => :string,
@@ -44,7 +44,7 @@ module LogStash; module Outputs; class ElasticSearch
44
44
  # `curl -XDELETE <http://localhost:9200/_template/OldTemplateName?pretty>`
45
45
  #
46
46
  # where `OldTemplateName` is whatever the former setting was.
47
- mod.config :template_name, :validate => :string, :default => "logstash"
47
+ mod.config :template_name, :validate => :string
48
48
 
49
49
  # You can set the path to your own template here, if you so desire.
50
50
  # If not set, the included template will be used.
@@ -153,7 +153,7 @@ module LogStash; module Outputs; class ElasticSearch
153
153
  mod.config :ilm_enabled, :validate => [true, false, 'true', 'false', 'auto'], :default => 'auto'
154
154
 
155
155
  # Rollover alias used for indexing data. If rollover alias doesn't exist, Logstash will create it and map it to the relevant index
156
- mod.config :ilm_rollover_alias, :validate => :string, :default => DEFAULT_ROLLOVER_ALIAS
156
+ mod.config :ilm_rollover_alias, :validate => :string
157
157
 
158
158
  # appends “{now/d}-000001” by default for new index creation, subsequent rollover indices will increment based on this pattern i.e. “000002”
159
159
  # {now/d} is date math, and will insert the appropriate value automatically.
@@ -12,7 +12,7 @@ module LogStash; module Outputs; class ElasticSearch
12
12
  end
13
13
 
14
14
  def default_rollover_alias?(rollover_alias)
15
- rollover_alias == LogStash::Outputs::ElasticSearch::DEFAULT_ROLLOVER_ALIAS
15
+ rollover_alias == default_ilm_rollover_alias
16
16
  end
17
17
 
18
18
  def ilm_alias_set?
@@ -3,14 +3,15 @@ module LogStash; module Outputs; class ElasticSearch
3
3
  # To be mixed into the elasticsearch plugin base
4
4
  def self.install_template(plugin)
5
5
  return unless plugin.manage_template
6
- if plugin.template.nil?
7
- plugin.logger.info("Using default mapping template")
8
- else
6
+ if plugin.template
9
7
  plugin.logger.info("Using mapping template from", :path => plugin.template)
8
+ template = read_template_file(plugin.template)
9
+ else
10
+ plugin.logger.info("Using a default mapping template", :es_version => plugin.maximum_seen_major_version,
11
+ :ecs_compatibility => plugin.ecs_compatibility)
12
+ template = load_default_template(plugin.maximum_seen_major_version, plugin.ecs_compatibility)
10
13
  end
11
14
 
12
-
13
- template = get_template(plugin.template, plugin.maximum_seen_major_version)
14
15
  add_ilm_settings_to_template(plugin, template) if plugin.ilm_in_use?
15
16
  plugin.logger.info("Attempting to install template", :manage_template => template)
16
17
  install(plugin.client, template_name(plugin), template, plugin.template_overwrite)
@@ -19,9 +20,11 @@ module LogStash; module Outputs; class ElasticSearch
19
20
  end
20
21
 
21
22
  private
22
- def self.get_template(path, es_major_version)
23
- template_path = path || default_template_path(es_major_version)
23
+ def self.load_default_template(es_major_version, ecs_compatibility)
24
+ template_path = default_template_path(es_major_version, ecs_compatibility)
24
25
  read_template_file(template_path)
26
+ rescue => e
27
+ fail "Failed to load default template for Elasticsearch v#{es_major_version} with ECS #{ecs_compatibility}; caused by: #{e.inspect}"
25
28
  end
26
29
 
27
30
  def self.install(client, template_name, template, template_overwrite)
@@ -46,9 +49,9 @@ module LogStash; module Outputs; class ElasticSearch
46
49
  plugin.ilm_in_use? && !plugin.original_params.key?('template_name') ? plugin.ilm_rollover_alias : plugin.template_name
47
50
  end
48
51
 
49
- def self.default_template_path(es_major_version)
52
+ def self.default_template_path(es_major_version, ecs_compatibility=:disabled)
50
53
  template_version = es_major_version == 1 ? 2 : es_major_version
51
- default_template_name = "elasticsearch-template-es#{template_version}x.json"
54
+ default_template_name = "templates/ecs-#{ecs_compatibility}/elasticsearch-#{template_version}x.json"
52
55
  ::File.expand_path(default_template_name, ::File.dirname(__FILE__))
53
56
  end
54
57