logstash-output-elasticsearch 11.22.15-java → 11.22.16-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: a0b7ec8d5dbede6389a4e59f97d8e98c812091e9f9a1f49ed11a443c4c7b4a6b
4
- data.tar.gz: e0a1b09ca555fed7cd9340ce843e837b3abb0ceb0d21a577d43a3b89462042cc
3
+ metadata.gz: 879ff0b99e2d13691ade229384790bc4372e083396cbb777587b2463d8fa05c1
4
+ data.tar.gz: c2cc01a0602371c908857832bbf712d2297d0383ffb45e893af2c44e97cd4121
5
5
  SHA512:
6
- metadata.gz: 14dd08f7aa74dee3c9cadb7ff96a86a0e65e4fcb425b1292749005faac2e7153a580ab6212dabb7664f1d83997404993ec1a2f0f9efdabd834aecd5447b728f8
7
- data.tar.gz: 1c21dd49841e4f05ddaca95e7a3f91bb9d7e9c3ee9887249ef2b365c3066db666645b3b508a173c2c9fa55256c906fa202068b2942646cac8e2cc1e3ab444b65
6
+ metadata.gz: b3411e69c6aa2798b92cde0d242b8952a79b438c9e4875a40aaf39017c5120978c24378fff986f0d65f6a2b7dad7be6c69b65760b096bae443307448e7be6a59
7
+ data.tar.gz: cbbbcb50f322e298a05e1d381344555137431cb45e34de65e26d2318c3db28ecb3945921fec036f2fb30ffedd6313ce5b9256160a9d8a4025f69243cfddd80ab
data/CHANGELOG.md CHANGED
@@ -1,3 +1,6 @@
1
+ ## 11.22.16
2
+ - Fix serverless compatibility: guard against nil params in pool requests and strip unsupported template settings (number_of_shards, number_of_replicas) on serverless
3
+
1
4
  ## 11.22.15
2
5
  - Improves the logging experience when DLQ used [#1258](https://github.com/logstash-plugins/logstash-output-elasticsearch/pull/1258)
3
6
 
data/README.md CHANGED
@@ -1,6 +1,8 @@
1
1
  # Logstash Plugin
2
2
 
3
- [![Travis Build Status](https://travis-ci.com/logstash-plugins/logstash-output-elasticsearch.svg)](https://travis-ci.com/logstash-plugins/logstash-output-elasticsearch)
3
+ [![Unit Tests](https://github.com/logstash-plugins/logstash-output-elasticsearch/actions/workflows/unit-tests.yml/badge.svg)](https://github.com/logstash-plugins/logstash-output-elasticsearch/actions/workflows/unit-tests.yml)
4
+ [![Integration Tests](https://github.com/logstash-plugins/logstash-output-elasticsearch/actions/workflows/integration-tests.yml/badge.svg)](https://github.com/logstash-plugins/logstash-output-elasticsearch/actions/workflows/integration-tests.yml)
5
+ [![Secure Integration Tests](https://github.com/logstash-plugins/logstash-output-elasticsearch/actions/workflows/secure-integration-tests.yml/badge.svg)](https://github.com/logstash-plugins/logstash-output-elasticsearch/actions/workflows/secure-integration-tests.yml)
4
6
 
5
7
  This is a plugin for [Logstash](https://github.com/elastic/logstash).
6
8
 
@@ -347,6 +347,7 @@ module LogStash; module Outputs; class ElasticSearch; class HttpClient;
347
347
  end
348
348
 
349
349
  def perform_request_to_url(url, method, path, params={}, body=nil)
350
+ params ||= {}
350
351
  params[:headers] = DEFAULT_EAV_HEADER.merge(params[:headers] || {}) if serverless?
351
352
  @adapter.perform_request(url, method, path, params, body)
352
353
  end
@@ -433,7 +433,7 @@ module LogStash; module Outputs; class ElasticSearch;
433
433
  def template_put(template_endpoint, name, template)
434
434
  path = "#{template_endpoint}/#{name}"
435
435
  logger.info("Installing Elasticsearch template", name: name)
436
- @pool.put(path, nil, LogStash::Json.dump(template))
436
+ @pool.put(path, {}, LogStash::Json.dump(template))
437
437
  rescue ::LogStash::Outputs::ElasticSearch::HttpClient::Pool::BadResponseCodeError => e
438
438
  raise e unless e.response_code == 404
439
439
  end
@@ -447,7 +447,7 @@ module LogStash; module Outputs; class ElasticSearch;
447
447
 
448
448
  # Create a new rollover alias
449
449
  def rollover_alias_put(alias_name, alias_definition)
450
- @pool.put(CGI::escape(alias_name), nil, LogStash::Json.dump(alias_definition))
450
+ @pool.put(CGI::escape(alias_name), {}, LogStash::Json.dump(alias_definition))
451
451
  logger.info("Created rollover alias", name: alias_name)
452
452
  # If the rollover alias already exists, ignore the error that comes back from Elasticsearch
453
453
  rescue ::LogStash::Outputs::ElasticSearch::HttpClient::Pool::BadResponseCodeError => e
@@ -473,7 +473,7 @@ module LogStash; module Outputs; class ElasticSearch;
473
473
  def ilm_policy_put(name, policy)
474
474
  path = "_ilm/policy/#{name}"
475
475
  logger.info("Installing ILM policy #{policy}", name: name)
476
- @pool.put(path, nil, LogStash::Json.dump(policy))
476
+ @pool.put(path, {}, LogStash::Json.dump(policy))
477
477
  end
478
478
 
479
479
 
@@ -28,6 +28,7 @@ module LogStash; module Outputs; class ElasticSearch
28
28
  end
29
29
 
30
30
  add_ilm_settings_to_template(plugin, template) if plugin.ilm_in_use?
31
+ strip_serverless_incompatible_settings(template) if plugin.serverless?
31
32
  plugin.logger.debug("Attempting to install template", template: template)
32
33
  install(plugin.client, template_endpoint(plugin), template_name(plugin), template, plugin.template_overwrite)
33
34
  end
@@ -129,5 +130,19 @@ module LogStash; module Outputs; class ElasticSearch
129
130
  end
130
131
  end
131
132
 
133
+ SERVERLESS_INCOMPATIBLE_SETTINGS = %w[
134
+ number_of_shards
135
+ index.number_of_shards
136
+ number_of_replicas
137
+ index.number_of_replicas
138
+ ].freeze
139
+
140
+ def self.strip_serverless_incompatible_settings(template)
141
+ settings = template.dig('template', 'settings') || template['settings']
142
+ return unless settings
143
+
144
+ SERVERLESS_INCOMPATIBLE_SETTINGS.each { |s| settings.delete(s) }
145
+ end
146
+
132
147
  end
133
148
  end end end
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = 'logstash-output-elasticsearch'
3
- s.version = '11.22.15'
3
+ s.version = ::File.read('version').split("\n").first
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"
@@ -12,7 +12,7 @@ Gem::Specification.new do |s|
12
12
  s.platform = RUBY_PLATFORM
13
13
 
14
14
  # Files
15
- s.files = Dir["lib/**/*","spec/**/*","*.gemspec","*.md","CONTRIBUTORS","Gemfile","LICENSE","NOTICE.TXT", "vendor/jar-dependencies/**/*.jar", "vendor/jar-dependencies/**/*.rb", "VERSION", "docs/**/*"]
15
+ s.files = Dir["lib/**/*","spec/**/*","*.gemspec","*.md","CONTRIBUTORS","Gemfile","LICENSE","NOTICE.TXT", "vendor/jar-dependencies/**/*.jar", "vendor/jar-dependencies/**/*.rb", "VERSION", "version", "docs/**/*"]
16
16
 
17
17
  # Tests
18
18
  s.test_files = s.files.grep(%r{^(test|spec|features)/})
@@ -186,4 +186,75 @@ describe LogStash::Outputs::ElasticSearch::TemplateManager do
186
186
 
187
187
  end
188
188
  end
189
+
190
+ describe ".strip_serverless_incompatible_settings" do
191
+ context "with composable template (template.settings)" do
192
+ let(:template) do
193
+ {
194
+ "template" => {
195
+ "settings" => {
196
+ "index.refresh_interval" => "5s",
197
+ "number_of_shards" => 1,
198
+ "number_of_replicas" => 0
199
+ }
200
+ }
201
+ }
202
+ end
203
+
204
+ it "removes number_of_shards and number_of_replicas" do
205
+ described_class.strip_serverless_incompatible_settings(template)
206
+ expect(template["template"]["settings"]).not_to have_key("number_of_shards")
207
+ expect(template["template"]["settings"]).not_to have_key("number_of_replicas")
208
+ end
209
+
210
+ it "preserves compatible settings" do
211
+ described_class.strip_serverless_incompatible_settings(template)
212
+ expect(template["template"]["settings"]["index.refresh_interval"]).to eq("5s")
213
+ end
214
+ end
215
+
216
+ context "with index-prefixed setting keys" do
217
+ let(:template) do
218
+ {
219
+ "template" => {
220
+ "settings" => {
221
+ "index.number_of_shards" => 1,
222
+ "index.number_of_replicas" => 0
223
+ }
224
+ }
225
+ }
226
+ end
227
+
228
+ it "removes index-prefixed variants" do
229
+ described_class.strip_serverless_incompatible_settings(template)
230
+ expect(template["template"]["settings"]).not_to have_key("index.number_of_shards")
231
+ expect(template["template"]["settings"]).not_to have_key("index.number_of_replicas")
232
+ end
233
+ end
234
+
235
+ context "with legacy template (top-level settings)" do
236
+ let(:template) do
237
+ {
238
+ "settings" => {
239
+ "index.refresh_interval" => "5s",
240
+ "number_of_shards" => 1
241
+ }
242
+ }
243
+ end
244
+
245
+ it "removes incompatible settings from top-level settings" do
246
+ described_class.strip_serverless_incompatible_settings(template)
247
+ expect(template["settings"]).not_to have_key("number_of_shards")
248
+ expect(template["settings"]["index.refresh_interval"]).to eq("5s")
249
+ end
250
+ end
251
+
252
+ context "with no settings" do
253
+ let(:template) { { "mappings" => {} } }
254
+
255
+ it "does not raise" do
256
+ expect { described_class.strip_serverless_incompatible_settings(template) }.not_to raise_error
257
+ end
258
+ end
259
+ end
189
260
  end
@@ -908,6 +908,9 @@ describe LogStash::Outputs::ElasticSearch do
908
908
 
909
909
  before(:each) do
910
910
  allow(elasticsearch_output_instance.client).to receive(:logger).and_return(logger_stub)
911
+ # Stub the output plugin's own @logger to prevent submit()/retrying_submit()
912
+ # from logging the full 15MB action payload on each retry, which floods stdout.
913
+ elasticsearch_output_instance.instance_variable_set(:@logger, logger_stub)
911
914
 
912
915
  allow(elasticsearch_output_instance.client).to receive(:bulk).and_call_original
913
916
 
data/version ADDED
@@ -0,0 +1 @@
1
+ 11.22.16
metadata CHANGED
@@ -1,16 +1,16 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: logstash-output-elasticsearch
3
3
  version: !ruby/object:Gem::Version
4
- version: 11.22.15
4
+ version: 11.22.16
5
5
  platform: java
6
6
  authors:
7
7
  - Elastic
8
- autorequire:
9
8
  bindir: bin
10
9
  cert_chain: []
11
- date: 2026-04-17 00:00:00.000000000 Z
10
+ date: 2026-07-06 00:00:00.000000000 Z
12
11
  dependencies:
13
12
  - !ruby/object:Gem::Dependency
13
+ name: manticore
14
14
  requirement: !ruby/object:Gem::Requirement
15
15
  requirements:
16
16
  - - ">="
@@ -19,7 +19,6 @@ dependencies:
19
19
  - - "<"
20
20
  - !ruby/object:Gem::Version
21
21
  version: 1.0.0
22
- name: manticore
23
22
  type: :runtime
24
23
  prerelease: false
25
24
  version_requirements: !ruby/object:Gem::Requirement
@@ -31,6 +30,7 @@ dependencies:
31
30
  - !ruby/object:Gem::Version
32
31
  version: 1.0.0
33
32
  - !ruby/object:Gem::Dependency
33
+ name: stud
34
34
  requirement: !ruby/object:Gem::Requirement
35
35
  requirements:
36
36
  - - ">="
@@ -39,7 +39,6 @@ dependencies:
39
39
  - - "~>"
40
40
  - !ruby/object:Gem::Version
41
41
  version: '0.0'
42
- name: stud
43
42
  type: :runtime
44
43
  prerelease: false
45
44
  version_requirements: !ruby/object:Gem::Requirement
@@ -51,6 +50,7 @@ dependencies:
51
50
  - !ruby/object:Gem::Version
52
51
  version: '0.0'
53
52
  - !ruby/object:Gem::Dependency
53
+ name: logstash-core-plugin-api
54
54
  requirement: !ruby/object:Gem::Requirement
55
55
  requirements:
56
56
  - - ">="
@@ -59,7 +59,6 @@ dependencies:
59
59
  - - "<="
60
60
  - !ruby/object:Gem::Version
61
61
  version: '2.99'
62
- name: logstash-core-plugin-api
63
62
  type: :runtime
64
63
  prerelease: false
65
64
  version_requirements: !ruby/object:Gem::Requirement
@@ -71,12 +70,12 @@ dependencies:
71
70
  - !ruby/object:Gem::Version
72
71
  version: '2.99'
73
72
  - !ruby/object:Gem::Dependency
73
+ name: logstash-mixin-ecs_compatibility_support
74
74
  requirement: !ruby/object:Gem::Requirement
75
75
  requirements:
76
76
  - - "~>"
77
77
  - !ruby/object:Gem::Version
78
78
  version: '1.0'
79
- name: logstash-mixin-ecs_compatibility_support
80
79
  type: :runtime
81
80
  prerelease: false
82
81
  version_requirements: !ruby/object:Gem::Requirement
@@ -85,12 +84,12 @@ dependencies:
85
84
  - !ruby/object:Gem::Version
86
85
  version: '1.0'
87
86
  - !ruby/object:Gem::Dependency
87
+ name: logstash-mixin-deprecation_logger_support
88
88
  requirement: !ruby/object:Gem::Requirement
89
89
  requirements:
90
90
  - - "~>"
91
91
  - !ruby/object:Gem::Version
92
92
  version: '1.0'
93
- name: logstash-mixin-deprecation_logger_support
94
93
  type: :runtime
95
94
  prerelease: false
96
95
  version_requirements: !ruby/object:Gem::Requirement
@@ -99,12 +98,12 @@ dependencies:
99
98
  - !ruby/object:Gem::Version
100
99
  version: '1.0'
101
100
  - !ruby/object:Gem::Dependency
101
+ name: logstash-mixin-ca_trusted_fingerprint_support
102
102
  requirement: !ruby/object:Gem::Requirement
103
103
  requirements:
104
104
  - - "~>"
105
105
  - !ruby/object:Gem::Version
106
106
  version: '1.0'
107
- name: logstash-mixin-ca_trusted_fingerprint_support
108
107
  type: :runtime
109
108
  prerelease: false
110
109
  version_requirements: !ruby/object:Gem::Requirement
@@ -113,12 +112,12 @@ dependencies:
113
112
  - !ruby/object:Gem::Version
114
113
  version: '1.0'
115
114
  - !ruby/object:Gem::Dependency
115
+ name: logstash-mixin-normalize_config_support
116
116
  requirement: !ruby/object:Gem::Requirement
117
117
  requirements:
118
118
  - - "~>"
119
119
  - !ruby/object:Gem::Version
120
120
  version: '1.0'
121
- name: logstash-mixin-normalize_config_support
122
121
  type: :runtime
123
122
  prerelease: false
124
123
  version_requirements: !ruby/object:Gem::Requirement
@@ -127,12 +126,12 @@ dependencies:
127
126
  - !ruby/object:Gem::Version
128
127
  version: '1.0'
129
128
  - !ruby/object:Gem::Dependency
129
+ name: logstash-codec-plain
130
130
  requirement: !ruby/object:Gem::Requirement
131
131
  requirements:
132
132
  - - ">="
133
133
  - !ruby/object:Gem::Version
134
134
  version: '0'
135
- name: logstash-codec-plain
136
135
  type: :development
137
136
  prerelease: false
138
137
  version_requirements: !ruby/object:Gem::Requirement
@@ -141,12 +140,12 @@ dependencies:
141
140
  - !ruby/object:Gem::Version
142
141
  version: '0'
143
142
  - !ruby/object:Gem::Dependency
143
+ name: logstash-devutils
144
144
  requirement: !ruby/object:Gem::Requirement
145
145
  requirements:
146
146
  - - ">="
147
147
  - !ruby/object:Gem::Version
148
148
  version: '0'
149
- name: logstash-devutils
150
149
  type: :development
151
150
  prerelease: false
152
151
  version_requirements: !ruby/object:Gem::Requirement
@@ -155,12 +154,12 @@ dependencies:
155
154
  - !ruby/object:Gem::Version
156
155
  version: '0'
157
156
  - !ruby/object:Gem::Dependency
157
+ name: flores
158
158
  requirement: !ruby/object:Gem::Requirement
159
159
  requirements:
160
160
  - - ">="
161
161
  - !ruby/object:Gem::Version
162
162
  version: '0'
163
- name: flores
164
163
  type: :development
165
164
  prerelease: false
166
165
  version_requirements: !ruby/object:Gem::Requirement
@@ -169,12 +168,12 @@ dependencies:
169
168
  - !ruby/object:Gem::Version
170
169
  version: '0'
171
170
  - !ruby/object:Gem::Dependency
171
+ name: cabin
172
172
  requirement: !ruby/object:Gem::Requirement
173
173
  requirements:
174
174
  - - "~>"
175
175
  - !ruby/object:Gem::Version
176
176
  version: '0.6'
177
- name: cabin
178
177
  type: :development
179
178
  prerelease: false
180
179
  version_requirements: !ruby/object:Gem::Requirement
@@ -183,12 +182,12 @@ dependencies:
183
182
  - !ruby/object:Gem::Version
184
183
  version: '0.6'
185
184
  - !ruby/object:Gem::Dependency
185
+ name: webrick
186
186
  requirement: !ruby/object:Gem::Requirement
187
187
  requirements:
188
188
  - - ">="
189
189
  - !ruby/object:Gem::Version
190
190
  version: '0'
191
- name: webrick
192
191
  type: :development
193
192
  prerelease: false
194
193
  version_requirements: !ruby/object:Gem::Requirement
@@ -197,12 +196,12 @@ dependencies:
197
196
  - !ruby/object:Gem::Version
198
197
  version: '0'
199
198
  - !ruby/object:Gem::Dependency
199
+ name: webmock
200
200
  requirement: !ruby/object:Gem::Requirement
201
201
  requirements:
202
202
  - - ">="
203
203
  - !ruby/object:Gem::Version
204
204
  version: '0'
205
- name: webmock
206
205
  type: :development
207
206
  prerelease: false
208
207
  version_requirements: !ruby/object:Gem::Requirement
@@ -211,12 +210,12 @@ dependencies:
211
210
  - !ruby/object:Gem::Version
212
211
  version: '0'
213
212
  - !ruby/object:Gem::Dependency
213
+ name: rspec-collection_matchers
214
214
  requirement: !ruby/object:Gem::Requirement
215
215
  requirements:
216
216
  - - ">="
217
217
  - !ruby/object:Gem::Version
218
218
  version: '0'
219
- name: rspec-collection_matchers
220
219
  type: :development
221
220
  prerelease: false
222
221
  version_requirements: !ruby/object:Gem::Requirement
@@ -225,12 +224,12 @@ dependencies:
225
224
  - !ruby/object:Gem::Version
226
225
  version: '0'
227
226
  - !ruby/object:Gem::Dependency
227
+ name: elasticsearch
228
228
  requirement: !ruby/object:Gem::Requirement
229
229
  requirements:
230
230
  - - ">="
231
231
  - !ruby/object:Gem::Version
232
232
  version: '0'
233
- name: elasticsearch
234
233
  type: :development
235
234
  prerelease: false
236
235
  version_requirements: !ruby/object:Gem::Requirement
@@ -339,13 +338,13 @@ files:
339
338
  - spec/unit/outputs/elasticsearch_ssl_spec.rb
340
339
  - spec/unit/outputs/error_whitelist_spec.rb
341
340
  - spec/unit/outputs/license_check_spec.rb
341
+ - version
342
342
  homepage: https://www.elastic.co/guide/en/logstash/current/index.html
343
343
  licenses:
344
344
  - apache-2.0
345
345
  metadata:
346
346
  logstash_plugin: 'true'
347
347
  logstash_group: output
348
- post_install_message:
349
348
  rdoc_options: []
350
349
  require_paths:
351
350
  - lib
@@ -360,8 +359,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
360
359
  - !ruby/object:Gem::Version
361
360
  version: '0'
362
361
  requirements: []
363
- rubygems_version: 3.3.26
364
- signing_key:
362
+ rubygems_version: 3.6.3
365
363
  specification_version: 4
366
364
  summary: Stores logs in Elasticsearch
367
365
  test_files: