logstash-output-elasticsearch 11.12.3-java → 11.13.0-java

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a71925d993ccbf151c0cb88f41641e76926df0a2a398914dbe5d4ce54224c8f5
4
- data.tar.gz: 97b17aad17959c0319ce94916570ce12f9ef67b7a22d583221ac26688e7cbe76
3
+ metadata.gz: 2e8764e50f36193ca77db2e6abe008e64732e52fd102554d6325d53180041ca6
4
+ data.tar.gz: 8e2525721fdf4a3e82c5983ea815125c407b91ab7e57e18d11256346c54d02c6
5
5
  SHA512:
6
- metadata.gz: '0817002e4b468d47ea5540e8a9ed63efbee2506350da2f08a3171d0e26037a4e99d5bff613f6f6fca91ea441c88ae08602b211a656e10f13f5b9a91895838bab'
7
- data.tar.gz: 60312f326a381d28b895c8f1f7f8fae611d7fdb1ccf4f1782da15949eb84c2fb93411e998f727ba91a922052cfe785bb9a3227aa798c7e1434eeca8369024471
6
+ metadata.gz: ef4c7059810d99d9aaa5d36a06a87eaf771ab1472056f8ed4bc7b05dfaf9280b6cc1a02a623bd1f5d25b7bb2f6458310450ebef91d8301757f8759512d1da625
7
+ data.tar.gz: e0970b2d8fc1413bcc7ab25bb02393f8be1ffe12fa0bf6c2349ad6ba3790ee844cfcf42136b0c10ea1b46e2c3bd2238da7a285869255076da28ba47ab6d84f9d
data/CHANGELOG.md CHANGED
@@ -1,3 +1,10 @@
1
+ ## 11.13.0
2
+ - add technology preview support for allowing events to individually encode a default pipeline with `[@metadata][target_ingest_pipeline]` (as part of a technology preview, this feature may change without notice) [#1113](https://github.com/logstash-plugins/logstash-output-elasticsearch/pull/1113)
3
+
4
+ ## 11.12.4
5
+ - Changed the `manage_template` default value to `false` when data streams is enabled [#1111](https://github.com/logstash-plugins/logstash-output-elasticsearch/pull/1111)
6
+ - Added the `manage_template => false` as a valid data stream option
7
+
1
8
  ## 11.12.3
2
9
  - Changed the log messages for data stream checks [#1109](https://github.com/logstash-plugins/logstash-output-elasticsearch/pull/1109)
3
10
  - Added more details about incompatible data streams supplied configurations
data/docs/index.asciidoc CHANGED
@@ -790,7 +790,7 @@ Set the keystore password
790
790
  ===== `manage_template`
791
791
 
792
792
  * Value type is <<boolean,boolean>>
793
- * Default value is `true`
793
+ * Default value is `true` for non-time series data, and `false` for data streams.
794
794
 
795
795
  From Logstash 1.3 onwards, a template is applied to Elasticsearch during
796
796
  Logstash's startup if one with the name <<plugins-{type}s-{plugin}-template_name>>
@@ -849,12 +849,11 @@ not also set this field. That will raise an error at startup
849
849
  ===== `pipeline`
850
850
 
851
851
  * Value type is <<string,string>>
852
- * Default value is `nil`
852
+ * There is no default value.
853
853
 
854
854
  Set which ingest pipeline you wish to execute for an event. You can also use
855
- event dependent configuration here like `pipeline =>
856
- "%{[@metadata][pipeline]}"`. The pipeline parameter won't be set if the value
857
- resolves to empty string ("").
855
+ event dependent configuration here like `pipeline => "%{[@metadata][pipeline]}"`.
856
+ The pipeline parameter won't be set if the value resolves to empty string ("").
858
857
 
859
858
  [id="plugins-{type}s-{plugin}-pool_max"]
860
859
  ===== `pool_max`
@@ -118,7 +118,6 @@ module LogStash module Outputs class ElasticSearch
118
118
  params.reject do |name, value|
119
119
  # NOTE: intentionally do not support explicit DS configuration like:
120
120
  # - `index => ...` identifier provided by data_stream_xxx settings
121
- # - `manage_template => false` implied by not setting the parameter
122
121
  case name
123
122
  when 'action'
124
123
  value == 'create'
@@ -126,6 +125,8 @@ module LogStash module Outputs class ElasticSearch
126
125
  true
127
126
  when 'data_stream'
128
127
  value.to_s == 'true'
128
+ when 'manage_template'
129
+ value.to_s == 'false'
129
130
  when 'ecs_compatibility' then true # required for LS <= 6.x
130
131
  else
131
132
  name.start_with?('data_stream_') ||
@@ -158,6 +158,8 @@ class LogStash::Outputs::ElasticSearch < LogStash::Outputs::Base
158
158
  # control over template creation, (e.g. creating indices dynamically based on
159
159
  # field names) you should set `manage_template` to false and use the REST
160
160
  # API to apply your templates manually.
161
+ #
162
+ # Default value is `true` unless data streams is enabled
161
163
  config :manage_template, :validate => :boolean, :default => true
162
164
 
163
165
  # This configuration option defines how the template is named inside Elasticsearch.
@@ -304,6 +306,8 @@ class LogStash::Outputs::ElasticSearch < LogStash::Outputs::Base
304
306
  # It's being concurrently invoked by this register method and by the finish_register on the @after_successful_connection_thread
305
307
  data_stream_enabled = data_stream_config?
306
308
 
309
+ setup_template_manager_defaults(data_stream_enabled)
310
+
307
311
  @after_successful_connection_thread = after_successful_connection do
308
312
  begin
309
313
  finish_register
@@ -520,19 +524,22 @@ class LogStash::Outputs::ElasticSearch < LogStash::Outputs::Base
520
524
  routing_field_name => @routing ? event.sprintf(@routing) : nil
521
525
  }
522
526
 
523
- if @pipeline
524
- value = event.sprintf(@pipeline)
525
- # convention: empty string equates to not using a pipeline
526
- # this is useful when using a field reference in the pipeline setting, e.g.
527
- # elasticsearch {
528
- # pipeline => "%{[@metadata][pipeline]}"
529
- # }
530
- params[:pipeline] = value unless value.empty?
531
- end
527
+ target_pipeline = resolve_pipeline(event)
528
+ # convention: empty string equates to not using a pipeline
529
+ # this is useful when using a field reference in the pipeline setting, e.g.
530
+ # elasticsearch {
531
+ # pipeline => "%{[@metadata][pipeline]}"
532
+ # }
533
+ params[:pipeline] = target_pipeline unless (target_pipeline.nil? || target_pipeline.empty?)
532
534
 
533
535
  params
534
536
  end
535
537
 
538
+ def resolve_pipeline(event)
539
+ pipeline_template = @pipeline || event.get("[@metadata][target_ingest_pipeline]")&.to_s
540
+ pipeline_template && event.sprintf(pipeline_template)
541
+ end
542
+
536
543
  @@plugins = Gem::Specification.find_all{|spec| spec.name =~ /logstash-output-elasticsearch-/ }
537
544
 
538
545
  @@plugins.each do |plugin|
@@ -608,6 +615,13 @@ class LogStash::Outputs::ElasticSearch < LogStash::Outputs::Base
608
615
  @template_name ||= default_template_name
609
616
  end
610
617
 
618
+ def setup_template_manager_defaults(data_stream_enabled)
619
+ if original_params["manage_template"].nil? && data_stream_enabled
620
+ logger.debug("Disabling template management since data streams are enabled")
621
+ @manage_template = false
622
+ end
623
+ end
624
+
611
625
  # To be overidden by the -java version
612
626
  VALID_HTTP_ACTIONS = ["index", "delete", "create", "update"]
613
627
  def valid_actions
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = 'logstash-output-elasticsearch'
3
- s.version = '11.12.3'
3
+ s.version = '11.13.0'
4
4
  s.licenses = ['apache-2.0']
5
5
  s.summary = "Stores logs in Elasticsearch"
6
6
  s.description = "This gem is a Logstash plugin required to be installed on top of the Logstash core pipeline using $LS_HOME/bin/logstash-plugin install gemname. This gem is not a stand-alone program"
@@ -152,6 +152,39 @@ describe LogStash::Outputs::ElasticSearch::DataStreamSupport do
152
152
 
153
153
  end
154
154
 
155
+ context 'ds value-dependent configuration' do
156
+ context 'with valid values' do
157
+ let(:options) { super().merge(
158
+ 'action' => 'create',
159
+ 'routing' => 'any',
160
+ 'pipeline' => 'any',
161
+ 'manage_template' => 'false',
162
+ 'data_stream' => 'true',
163
+ 'data_stream_type' => 'logs',
164
+ 'data_stream_dataset' => 'any',
165
+ 'data_stream_namespace' => 'any',
166
+ 'data_stream_sync_fields' => true,
167
+ 'data_stream_auto_routing' => true)
168
+ }
169
+
170
+ it 'should enable data-streams by default' do
171
+ expect( subject.data_stream_config? ).to be_truthy
172
+ end
173
+ end
174
+
175
+ context 'with invalid values' do
176
+ let(:options) { super().merge(
177
+ 'data_stream' => 'true',
178
+ 'action' => 'index',
179
+ 'manage_template' => 'true')
180
+ }
181
+
182
+ it 'should raise a configuration error' do
183
+ expect { subject.data_stream_config? }.to raise_error(LogStash::ConfigurationError, 'Invalid data stream configuration: ["action", "manage_template"]')
184
+ end
185
+ end
186
+ end
187
+
155
188
  context "default (non data-stream) configuration (on 7.x)" do
156
189
 
157
190
  let(:options) do
@@ -590,7 +590,7 @@ describe LogStash::Outputs::ElasticSearch do
590
590
 
591
591
  let(:event) { LogStash::Event.new("pipeline" => "my-ingest-pipeline") }
592
592
 
593
- it "should interpolate the pipeline value and set it" do
593
+ it "interpolate the pipeline value and set it" do
594
594
  expect(subject.send(:event_action_tuple, event)[1]).to include(:pipeline => "my-ingest-pipeline")
595
595
  end
596
596
  end
@@ -600,10 +600,89 @@ describe LogStash::Outputs::ElasticSearch do
600
600
 
601
601
  let(:event) { LogStash::Event.new("pipeline" => "") }
602
602
 
603
- it "should interpolate the pipeline value but not set it because it is empty" do
603
+ it "interpolates the pipeline value but not set it because it is empty" do
604
604
  expect(subject.send(:event_action_tuple, event)[1]).not_to include(:pipeline)
605
605
  end
606
606
  end
607
+
608
+ context "with both pipeline and target_ingest_pipeline" do
609
+ let(:options) { {"pipeline" => "%{pipeline}" } }
610
+ let(:event) { LogStash::Event.new({"pipeline" => "my-ingest-pipeline", "[@metadata][target_ingest_pipeline]" => "meta-ingest-pipeline"}) }
611
+
612
+ it "interpolates the plugin's pipeline value" do
613
+ expect(subject.send(:event_action_tuple, event)[1]).to include(:pipeline => "my-ingest-pipeline")
614
+ end
615
+
616
+ context "when the plugin's `pipeline` is constant" do
617
+ let(:options) { super().merge("pipeline" => "my-constant-pipeline") }
618
+ it "uses plugin's pipeline value" do
619
+ expect(subject.send(:event_action_tuple, event)[1]).to include(:pipeline => "my-constant-pipeline")
620
+ end
621
+ end
622
+
623
+ context "when the plugin's `pipeline` includes an unresolvable sprintf placeholder" do
624
+ let(:options) { super().merge("pipeline" => "reference-%{unset}-field") }
625
+ it "does not use the target_ingest_pipeline" do
626
+ # when sprintf doesn't resolve a placeholder, the behaviour of our `pipeline` is UNSPECIFIED.
627
+ # here we only validate that the presence of the magic field does not
628
+ # override an explicitly-configured pipeline.
629
+ expect(subject.send(:event_action_tuple, event)[1]).to_not include(:pipeline => "my-ingest-pipeline")
630
+ end
631
+ end
632
+ end
633
+
634
+ context "with empty pipeline and target_ingest_pipeline" do
635
+ let(:options) { {"pipeline" => "%{pipeline}" } }
636
+ let(:event) { LogStash::Event.new({"pipeline" => "", "[@metadata][target_ingest_pipeline]" => "meta-ingest-pipeline"}) }
637
+
638
+ it "interpolates the pipeline value but not set it because pipeline is empty" do
639
+ expect(subject.send(:event_action_tuple, event)[1]).not_to include(:pipeline)
640
+ end
641
+ end
642
+
643
+ context "with target_ingest_pipeline" do
644
+ let(:event) { LogStash::Event.new({"pipeline" => "", "@metadata" => {"target_ingest_pipeline" => "meta-ingest-pipeline"}}) }
645
+
646
+ it "interpolates the target_ingest_pipeline value and set it" do
647
+ expect(subject.send(:event_action_tuple, event)[1]).to include(:pipeline => "meta-ingest-pipeline")
648
+ end
649
+ end
650
+
651
+ context "with empty target_ingest_pipeline" do
652
+ let(:event) { LogStash::Event.new({"pipeline" => "", "@metadata" => {"host" => "elastic"}}) }
653
+
654
+ it "does not set pipeline" do
655
+ expect(subject.send(:event_action_tuple, event)[1]).not_to include(:pipeline)
656
+ end
657
+ end
658
+
659
+ context "with empty pipeline and empty target_ingest_pipeline" do
660
+ let(:event) { LogStash::Event.new }
661
+
662
+ it "does not set pipeline" do
663
+ expect(subject.send(:event_action_tuple, event)[1]).not_to include(:pipeline)
664
+ end
665
+ end
666
+ end
667
+
668
+ describe "the manage_template option" do
669
+ context "with data stream enabled" do
670
+ let(:options) { {"data_stream" => "true", "data_stream_type" => "logs" } }
671
+ let(:do_register) { true }
672
+
673
+ it "should default to false" do
674
+ expect(subject).to have_attributes(manage_template: false)
675
+ end
676
+ end
677
+
678
+ context "with data stream disabled" do
679
+ let(:options) { {"data_stream" => "false", "index" => "logs" } }
680
+ let(:do_register) { true }
681
+
682
+ it "should default to true" do
683
+ expect(subject).to have_attributes(manage_template: true)
684
+ end
685
+ end
607
686
  end
608
687
 
609
688
  describe "SSL end to end" do
@@ -870,7 +949,7 @@ describe LogStash::Outputs::ElasticSearch do
870
949
  end if LOGSTASH_VERSION > '6.0'
871
950
 
872
951
  context 'handling elasticsearch document-level status meant for the DLQ' do
873
- let(:options) { { "manage_template" => false } }
952
+ let(:options) { { "manage_template" => false, "data_stream" => 'false' } }
874
953
  let(:action) { LogStash::Outputs::ElasticSearch::EventActionTuple.new(:action, :params, LogStash::Event.new("foo" => "bar")) }
875
954
 
876
955
  context 'when @dlq_writer is nil' do
@@ -1140,7 +1219,7 @@ describe LogStash::Outputs::ElasticSearch do
1140
1219
  describe "post-register ES setup" do
1141
1220
  let(:do_register) { false }
1142
1221
  let(:es_version) { '7.10.0' } # DS default on LS 8.x
1143
- let(:options) { { 'hosts' => '127.0.0.1:9999' } }
1222
+ let(:options) { { 'hosts' => '127.0.0.1:9999', 'data_stream' => 'false' } }
1144
1223
  let(:logger) { subject.logger }
1145
1224
 
1146
1225
  before do
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: logstash-output-elasticsearch
3
3
  version: !ruby/object:Gem::Version
4
- version: 11.12.3
4
+ version: 11.13.0
5
5
  platform: java
6
6
  authors:
7
7
  - Elastic
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-01-24 00:00:00.000000000 Z
11
+ date: 2023-02-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  requirement: !ruby/object:Gem::Requirement