logstash-output-elasticsearch 11.22.12-java → 12.0.0-java
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +11 -4
- data/docs/index.asciidoc +19 -106
- data/lib/logstash/outputs/elasticsearch/http_client/manticore_adapter.rb +4 -1
- data/lib/logstash/outputs/elasticsearch/http_client/pool.rb +22 -11
- data/lib/logstash/outputs/elasticsearch/http_client.rb +24 -25
- data/lib/logstash/outputs/elasticsearch.rb +0 -47
- data/lib/logstash/plugin_mixins/elasticsearch/api_configs.rb +12 -28
- data/logstash-output-elasticsearch.gemspec +1 -1
- data/spec/unit/outputs/elasticsearch_spec.rb +1 -81
- data/spec/unit/outputs/elasticsearch_ssl_spec.rb +22 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 983d99de3a0dcd5e58fb123e01ad8ee4c2396ce15fd565dda439e43c182b32e6
|
4
|
+
data.tar.gz: 8733e1a9b256b36e9f08a9be0803ca667817d7fe9f1e4cd1e090fe95882eb245
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f9626da6b7d428b17a16b2874a8758e260e84af265636fabea8e35dec0777ecdeae1b662910d2e065eccc4742ef706765d87b6cf475a141544a78347c69953de
|
7
|
+
data.tar.gz: 7997cfb3b851130a0504c0907761aba37ea31ec35deb7fc4de19eaf7f1ae00cee9df7b2575d59ace2b08c19ad7710460c534467bb79f7019c3a125478d0de5e2
|
data/CHANGELOG.md
CHANGED
@@ -1,7 +1,14 @@
|
|
1
|
-
##
|
2
|
-
|
3
|
-
|
4
|
-
|
1
|
+
## 12.0.0
|
2
|
+
- SSL settings that were marked deprecated in version `11.14.0` are now marked obsolete, and will prevent the plugin from starting.
|
3
|
+
- These settings are:
|
4
|
+
- `cacert`, which should be replaced by `ssl_certificate_authorities`
|
5
|
+
- `keystore`, which should be replaced by `ssl_keystore_path`
|
6
|
+
- `keystore_password`, which should be replaced by `ssl_keystore_password`
|
7
|
+
- `ssl`, which should be replaced by `ssl_enabled`
|
8
|
+
- `ssl_certificate_verification`, which should be replaced by `ssl_verification_mode`
|
9
|
+
- `truststore`, which should be replaced by `ssl_truststore_path`
|
10
|
+
- `truststore_password`, which should be replaced by `ssl_truststore_password`
|
11
|
+
- [#1197](https://github.com/logstash-plugins/logstash-output-elasticsearch/pull/1197)
|
5
12
|
|
6
13
|
## 11.22.10
|
7
14
|
- Add `x-elastic-product-origin` header to Elasticsearch requests [#1195](https://github.com/logstash-plugins/logstash-output-elasticsearch/pull/1195)
|
data/docs/index.asciidoc
CHANGED
@@ -196,22 +196,7 @@ This plugin uses the Elasticsearch bulk API to optimize its imports into Elastic
|
|
196
196
|
either partial or total failures. The bulk API sends batches of requests to an HTTP endpoint. Error codes for the HTTP
|
197
197
|
request are handled differently than error codes for individual documents.
|
198
198
|
|
199
|
-
|
200
|
-
HTTP requests to the bulk API are expected to return a 200 response code. All other response codes are retried indefinitely,
|
201
|
-
including 413 (Payload Too Large) responses.
|
202
|
-
|
203
|
-
If you want to handle large payloads differently, you can configure 413 responses to go to the Dead Letter Queue instead:
|
204
|
-
|
205
|
-
[source,ruby]
|
206
|
-
-----
|
207
|
-
output {
|
208
|
-
elasticsearch {
|
209
|
-
hosts => ["localhost:9200"]
|
210
|
-
dlq_custom_codes => [413] # Send 413 errors to DLQ instead of retrying
|
211
|
-
}
|
212
|
-
-----
|
213
|
-
|
214
|
-
This will capture oversized payloads in the DLQ for analysis rather than retrying them.
|
199
|
+
HTTP requests to the bulk API are expected to return a 200 response code. All other response codes are retried indefinitely.
|
215
200
|
|
216
201
|
The following document errors are handled as follows:
|
217
202
|
|
@@ -340,8 +325,10 @@ When a string value on an event contains one or more byte sequences that are not
|
|
340
325
|
[id="plugins-{type}s-{plugin}-options"]
|
341
326
|
==== Elasticsearch Output Configuration Options
|
342
327
|
|
343
|
-
This plugin supports
|
344
|
-
|
328
|
+
This plugin supports these configuration options plus the <<plugins-{type}s-{plugin}-common-options>> described later.
|
329
|
+
|
330
|
+
NOTE: As of version 12.0.0 of this plugin, a number of previously deprecated SSL settings have been removed.
|
331
|
+
Please check out <<plugins-{type}s-{plugin}-obsolete-options>> for details.
|
345
332
|
|
346
333
|
[cols="<,<,<",options="header",]
|
347
334
|
|=======================================================================
|
@@ -456,7 +443,7 @@ For more details on actions, check out the {ref}/docs-bulk.html[Elasticsearch bu
|
|
456
443
|
* There is no default value for this setting.
|
457
444
|
|
458
445
|
Authenticate using Elasticsearch API key.
|
459
|
-
Note that this option also requires SSL/TLS, which can be enabled by supplying a <<plugins-{type}s-{plugin}-cloud_id>>, a list of HTTPS <<plugins-{type}s-{plugin}-hosts>>, or by setting <<plugins-{type}s-{plugin}-
|
446
|
+
Note that this option also requires SSL/TLS, which can be enabled by supplying a <<plugins-{type}s-{plugin}-cloud_id>>, a list of HTTPS <<plugins-{type}s-{plugin}-hosts>>, or by setting <<plugins-{type}s-{plugin}-ssl_enabled,`ssl_enabled => true`>>.
|
460
447
|
|
461
448
|
Format is `id:api_key` where `id` and `api_key` are as returned by the
|
462
449
|
Elasticsearch {ref}/security-api-create-api-key.html[Create API key API].
|
@@ -1339,98 +1326,24 @@ https://www.elastic.co/blog/elasticsearch-versioning-support[versioning support
|
|
1339
1326
|
blog] and {ref}/docs-index_.html#_version_types[Version types] in the
|
1340
1327
|
Elasticsearch documentation.
|
1341
1328
|
|
1342
|
-
[id="plugins-{type}s-{plugin}-
|
1343
|
-
==== Elasticsearch Output
|
1344
|
-
|
1345
|
-
This plugin supports the following deprecated configurations.
|
1329
|
+
[id="plugins-{type}s-{plugin}-obsolete-options"]
|
1330
|
+
==== Elasticsearch Output Obsolete Configuration Options
|
1346
1331
|
|
1347
|
-
WARNING:
|
1332
|
+
WARNING: As of version `12.0.0` of this plugin, some configuration options have been replaced.
|
1333
|
+
The plugin will fail to start if it contains any of these obsolete options.
|
1348
1334
|
|
1349
|
-
[cols="
|
1335
|
+
[cols="<,<",options="header",]
|
1350
1336
|
|=======================================================================
|
1351
|
-
|Setting|
|
1352
|
-
|
|
1353
|
-
|
|
1354
|
-
|
|
1355
|
-
|
|
1356
|
-
|
|
1357
|
-
|
|
1358
|
-
|
|
1337
|
+
|Setting|Replaced by
|
1338
|
+
| cacert | <<plugins-{type}s-{plugin}-ssl_certificate_authorities>>
|
1339
|
+
| keystore | <<plugins-{type}s-{plugin}-ssl_keystore_path>>
|
1340
|
+
| keystore_password | <<plugins-{type}s-{plugin}-ssl_keystore_password>>
|
1341
|
+
| ssl | <<plugins-{type}s-{plugin}-ssl_enabled>>
|
1342
|
+
| ssl_certificate_verification | <<plugins-{type}s-{plugin}-ssl_verification_mode>>
|
1343
|
+
| truststore | <<plugins-{type}s-{plugin}-ssl_truststore_path>>
|
1344
|
+
| truststore_password | <<plugins-{type}s-{plugin}-ssl_truststore_password>>
|
1359
1345
|
|=======================================================================
|
1360
1346
|
|
1361
|
-
|
1362
|
-
[id="plugins-{type}s-{plugin}-cacert"]
|
1363
|
-
===== `cacert`
|
1364
|
-
deprecated[11.14.0, Replaced by <<plugins-{type}s-{plugin}-ssl_certificate_authorities>>]
|
1365
|
-
|
1366
|
-
* Value type is a list of <<path,path>>
|
1367
|
-
* There is no default value for this setting.
|
1368
|
-
|
1369
|
-
The .cer or .pem file to validate the server's certificate.
|
1370
|
-
|
1371
|
-
[id="plugins-{type}s-{plugin}-keystore"]
|
1372
|
-
===== `keystore`
|
1373
|
-
deprecated[11.14.0, Replaced by <<plugins-{type}s-{plugin}-ssl_keystore_path>>]
|
1374
|
-
|
1375
|
-
* Value type is <<path,path>>
|
1376
|
-
* There is no default value for this setting.
|
1377
|
-
|
1378
|
-
The keystore used to present a certificate to the server.
|
1379
|
-
It can be either .jks or .p12
|
1380
|
-
|
1381
|
-
NOTE: You cannot use this setting and <<plugins-{type}s-{plugin}-ssl_certificate>> at the same time.
|
1382
|
-
|
1383
|
-
[id="plugins-{type}s-{plugin}-keystore_password"]
|
1384
|
-
===== `keystore_password`
|
1385
|
-
deprecated[11.14.0, Replaced by <<plugins-{type}s-{plugin}-ssl_keystore_password>>]
|
1386
|
-
|
1387
|
-
* Value type is <<password,password>>
|
1388
|
-
* There is no default value for this setting.
|
1389
|
-
|
1390
|
-
Set the keystore password
|
1391
|
-
|
1392
|
-
[id="plugins-{type}s-{plugin}-ssl"]
|
1393
|
-
===== `ssl`
|
1394
|
-
deprecated[11.14.0, Replaced by <<plugins-{type}s-{plugin}-ssl_enabled>>]
|
1395
|
-
|
1396
|
-
* Value type is <<boolean,boolean>>
|
1397
|
-
* There is no default value for this setting.
|
1398
|
-
|
1399
|
-
Enable SSL/TLS secured communication to Elasticsearch cluster.
|
1400
|
-
Leaving this unspecified will use whatever scheme is specified in the URLs listed in <<plugins-{type}s-{plugin}-hosts>> or extracted from the <<plugins-{type}s-{plugin}-cloud_id>>.
|
1401
|
-
If no explicit protocol is specified plain HTTP will be used.
|
1402
|
-
|
1403
|
-
[id="plugins-{type}s-{plugin}-ssl_certificate_verification"]
|
1404
|
-
===== `ssl_certificate_verification`
|
1405
|
-
deprecated[11.14.0, Replaced by <<plugins-{type}s-{plugin}-ssl_verification_mode>>]
|
1406
|
-
|
1407
|
-
* Value type is <<boolean,boolean>>
|
1408
|
-
* Default value is `true`
|
1409
|
-
|
1410
|
-
Option to validate the server's certificate. Disabling this severely compromises security.
|
1411
|
-
For more information on disabling certificate verification please read
|
1412
|
-
https://www.cs.utexas.edu/~shmat/shmat_ccs12.pdf
|
1413
|
-
|
1414
|
-
[id="plugins-{type}s-{plugin}-truststore"]
|
1415
|
-
===== `truststore`
|
1416
|
-
deprecated[11.14.0, Replaced by <<plugins-{type}s-{plugin}-ssl_truststore_path>>]
|
1417
|
-
|
1418
|
-
* Value type is <<path,path>>
|
1419
|
-
* There is no default value for this setting.
|
1420
|
-
|
1421
|
-
The truststore to validate the server's certificate.
|
1422
|
-
It can be either `.jks` or `.p12`.
|
1423
|
-
Use either `:truststore` or `:cacert`.
|
1424
|
-
|
1425
|
-
[id="plugins-{type}s-{plugin}-truststore_password"]
|
1426
|
-
===== `truststore_password`
|
1427
|
-
deprecated[11.14.0, Replaced by <<plugins-{type}s-{plugin}-ssl_truststore_password>>]
|
1428
|
-
|
1429
|
-
* Value type is <<password,password>>
|
1430
|
-
* There is no default value for this setting.
|
1431
|
-
|
1432
|
-
Set the truststore password
|
1433
|
-
|
1434
1347
|
[id="plugins-{type}s-{plugin}-common-options"]
|
1435
1348
|
include::{include_path}/{type}.asciidoc[]
|
1436
1349
|
|
@@ -76,8 +76,11 @@ module LogStash; module Outputs; class ElasticSearch; class HttpClient;
|
|
76
76
|
raise ::LogStash::Outputs::ElasticSearch::HttpClient::Pool::HostUnreachableError.new(e, request_uri_as_string)
|
77
77
|
end
|
78
78
|
|
79
|
+
# 404s are excluded because they are valid codes in the case of
|
80
|
+
# template installation. We might need a better story around this later
|
81
|
+
# but for our current purposes this is correct
|
79
82
|
code = resp.code
|
80
|
-
if code < 200 || code > 299
|
83
|
+
if code < 200 || code > 299 && code != 404
|
81
84
|
raise ::LogStash::Outputs::ElasticSearch::HttpClient::Pool::BadResponseCodeError.new(code, request_uri, body, resp.body)
|
82
85
|
end
|
83
86
|
|
@@ -253,11 +253,13 @@ module LogStash; module Outputs; class ElasticSearch; class HttpClient;
|
|
253
253
|
def health_check_request(url)
|
254
254
|
logger.debug("Running health check to see if an Elasticsearch connection is working",
|
255
255
|
:healthcheck_url => url.sanitized.to_s, :path => @healthcheck_path)
|
256
|
-
|
257
|
-
|
258
|
-
|
259
|
-
|
260
|
-
|
256
|
+
begin
|
257
|
+
response = perform_request_to_url(url, :head, @healthcheck_path)
|
258
|
+
return response, nil
|
259
|
+
rescue ::LogStash::Outputs::ElasticSearch::HttpClient::Pool::BadResponseCodeError => e
|
260
|
+
logger.warn("Health check failed", code: e.response_code, url: e.url, message: e.message)
|
261
|
+
return nil, e
|
262
|
+
end
|
261
263
|
end
|
262
264
|
|
263
265
|
def healthcheck!(register_phase = true)
|
@@ -310,11 +312,13 @@ module LogStash; module Outputs; class ElasticSearch; class HttpClient;
|
|
310
312
|
end
|
311
313
|
|
312
314
|
def get_root_path(url, params={})
|
313
|
-
|
314
|
-
|
315
|
-
|
316
|
-
|
317
|
-
|
315
|
+
begin
|
316
|
+
resp = perform_request_to_url(url, :get, ROOT_URI_PATH, params)
|
317
|
+
return resp, nil
|
318
|
+
rescue ::LogStash::Outputs::ElasticSearch::HttpClient::Pool::BadResponseCodeError => e
|
319
|
+
logger.warn("Elasticsearch main endpoint returns #{e.response_code}", message: e.message, body: e.response_body)
|
320
|
+
return nil, e
|
321
|
+
end
|
318
322
|
end
|
319
323
|
|
320
324
|
def test_serverless_connection(url, root_response)
|
@@ -511,13 +515,20 @@ module LogStash; module Outputs; class ElasticSearch; class HttpClient;
|
|
511
515
|
major = major_version(version)
|
512
516
|
if @maximum_seen_major_version.nil?
|
513
517
|
@logger.info("Elasticsearch version determined (#{version})", es_version: major)
|
514
|
-
|
518
|
+
set_maximum_seen_major_version(major)
|
515
519
|
elsif major > @maximum_seen_major_version
|
516
520
|
warn_on_higher_major_version(major, url)
|
517
521
|
@maximum_seen_major_version = major
|
518
522
|
end
|
519
523
|
end
|
520
524
|
|
525
|
+
def set_maximum_seen_major_version(major)
|
526
|
+
if major >= 6
|
527
|
+
@logger.warn("Detected a 6.x and above cluster: the `type` event field won't be used to determine the document _type", es_version: major)
|
528
|
+
end
|
529
|
+
@maximum_seen_major_version = major
|
530
|
+
end
|
531
|
+
|
521
532
|
def warn_on_higher_major_version(major, url)
|
522
533
|
@logger.warn("Detected a node with a higher major version than previously observed, " +
|
523
534
|
"this could be the result of an Elasticsearch cluster upgrade",
|
@@ -182,20 +182,22 @@ module LogStash; module Outputs; class ElasticSearch;
|
|
182
182
|
def bulk_send(body_stream, batch_actions)
|
183
183
|
params = compression_level? ? {:headers => {"Content-Encoding" => "gzip"}} : {}
|
184
184
|
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
185
|
+
response = @pool.post(@bulk_path, params, body_stream.string)
|
186
|
+
|
187
|
+
@bulk_response_metrics.increment(response.code.to_s)
|
188
|
+
|
189
|
+
case response.code
|
190
|
+
when 200 # OK
|
191
|
+
LogStash::Json.load(response.body)
|
192
|
+
when 413 # Payload Too Large
|
192
193
|
logger.warn("Bulk request rejected: `413 Payload Too Large`", :action_count => batch_actions.size, :content_length => body_stream.size)
|
193
|
-
|
194
|
-
|
195
|
-
|
194
|
+
emulate_batch_error_response(batch_actions, response.code, 'payload_too_large')
|
195
|
+
else
|
196
|
+
url = ::LogStash::Util::SafeURI.new(response.final_url)
|
197
|
+
raise ::LogStash::Outputs::ElasticSearch::HttpClient::Pool::BadResponseCodeError.new(
|
198
|
+
response.code, url, body_stream.to_s, response.body
|
199
|
+
)
|
196
200
|
end
|
197
|
-
|
198
|
-
LogStash::Json.load(response.body)
|
199
201
|
end
|
200
202
|
|
201
203
|
def emulate_batch_error_response(actions, http_code, reason)
|
@@ -409,9 +411,6 @@ module LogStash; module Outputs; class ElasticSearch;
|
|
409
411
|
def exists?(path, use_get=false)
|
410
412
|
response = use_get ? @pool.get(path) : @pool.head(path)
|
411
413
|
response.code >= 200 && response.code <= 299
|
412
|
-
rescue ::LogStash::Outputs::ElasticSearch::HttpClient::Pool::BadResponseCodeError => e
|
413
|
-
return false if e.response_code == 404
|
414
|
-
raise e
|
415
414
|
end
|
416
415
|
|
417
416
|
def template_exists?(template_endpoint, name)
|
@@ -422,8 +421,6 @@ module LogStash; module Outputs; class ElasticSearch;
|
|
422
421
|
path = "#{template_endpoint}/#{name}"
|
423
422
|
logger.info("Installing Elasticsearch template", name: name)
|
424
423
|
@pool.put(path, nil, LogStash::Json.dump(template))
|
425
|
-
rescue ::LogStash::Outputs::ElasticSearch::HttpClient::Pool::BadResponseCodeError => e
|
426
|
-
raise e unless e.response_code == 404
|
427
424
|
end
|
428
425
|
|
429
426
|
# ILM methods
|
@@ -435,15 +432,17 @@ module LogStash; module Outputs; class ElasticSearch;
|
|
435
432
|
|
436
433
|
# Create a new rollover alias
|
437
434
|
def rollover_alias_put(alias_name, alias_definition)
|
438
|
-
|
439
|
-
|
440
|
-
|
441
|
-
|
442
|
-
|
443
|
-
|
444
|
-
|
435
|
+
begin
|
436
|
+
@pool.put(CGI::escape(alias_name), nil, LogStash::Json.dump(alias_definition))
|
437
|
+
logger.info("Created rollover alias", name: alias_name)
|
438
|
+
# If the rollover alias already exists, ignore the error that comes back from Elasticsearch
|
439
|
+
rescue ::LogStash::Outputs::ElasticSearch::HttpClient::Pool::BadResponseCodeError => e
|
440
|
+
if e.response_code == 400
|
441
|
+
logger.info("Rollover alias already exists, skipping", name: alias_name)
|
442
|
+
return
|
443
|
+
end
|
444
|
+
raise e
|
445
445
|
end
|
446
|
-
raise e
|
447
446
|
end
|
448
447
|
|
449
448
|
def get_xpack_info
|
@@ -275,7 +275,6 @@ class LogStash::Outputs::ElasticSearch < LogStash::Outputs::Base
|
|
275
275
|
def initialize(*params)
|
276
276
|
super
|
277
277
|
setup_ecs_compatibility_related_defaults
|
278
|
-
setup_ssl_params!
|
279
278
|
setup_compression_level!
|
280
279
|
end
|
281
280
|
|
@@ -694,52 +693,6 @@ class LogStash::Outputs::ElasticSearch < LogStash::Outputs::Base
|
|
694
693
|
end
|
695
694
|
end
|
696
695
|
|
697
|
-
def setup_ssl_params!
|
698
|
-
@ssl_enabled = normalize_config(:ssl_enabled) do |normalize|
|
699
|
-
normalize.with_deprecated_alias(:ssl)
|
700
|
-
end
|
701
|
-
|
702
|
-
@ssl_certificate_authorities = normalize_config(:ssl_certificate_authorities) do |normalize|
|
703
|
-
normalize.with_deprecated_mapping(:cacert) do |cacert|
|
704
|
-
[cacert]
|
705
|
-
end
|
706
|
-
end
|
707
|
-
|
708
|
-
@ssl_keystore_path = normalize_config(:ssl_keystore_path) do |normalize|
|
709
|
-
normalize.with_deprecated_alias(:keystore)
|
710
|
-
end
|
711
|
-
|
712
|
-
@ssl_keystore_password = normalize_config(:ssl_keystore_password) do |normalize|
|
713
|
-
normalize.with_deprecated_alias(:keystore_password)
|
714
|
-
end
|
715
|
-
|
716
|
-
@ssl_truststore_path = normalize_config(:ssl_truststore_path) do |normalize|
|
717
|
-
normalize.with_deprecated_alias(:truststore)
|
718
|
-
end
|
719
|
-
|
720
|
-
@ssl_truststore_password = normalize_config(:ssl_truststore_password) do |normalize|
|
721
|
-
normalize.with_deprecated_alias(:truststore_password)
|
722
|
-
end
|
723
|
-
|
724
|
-
@ssl_verification_mode = normalize_config(:ssl_verification_mode) do |normalize|
|
725
|
-
normalize.with_deprecated_mapping(:ssl_certificate_verification) do |ssl_certificate_verification|
|
726
|
-
if ssl_certificate_verification == true
|
727
|
-
"full"
|
728
|
-
else
|
729
|
-
"none"
|
730
|
-
end
|
731
|
-
end
|
732
|
-
end
|
733
|
-
|
734
|
-
params['ssl_enabled'] = @ssl_enabled unless @ssl_enabled.nil?
|
735
|
-
params['ssl_certificate_authorities'] = @ssl_certificate_authorities unless @ssl_certificate_authorities.nil?
|
736
|
-
params['ssl_keystore_path'] = @ssl_keystore_path unless @ssl_keystore_path.nil?
|
737
|
-
params['ssl_keystore_password'] = @ssl_keystore_password unless @ssl_keystore_password.nil?
|
738
|
-
params['ssl_truststore_path'] = @ssl_truststore_path unless @ssl_truststore_path.nil?
|
739
|
-
params['ssl_truststore_password'] = @ssl_truststore_password unless @ssl_truststore_password.nil?
|
740
|
-
params['ssl_verification_mode'] = @ssl_verification_mode unless @ssl_verification_mode.nil?
|
741
|
-
end
|
742
|
-
|
743
696
|
def setup_compression_level!
|
744
697
|
@compression_level = normalize_config(:compression_level) do |normalize|
|
745
698
|
normalize.with_deprecated_mapping(:http_compression) do |http_compression|
|
@@ -43,40 +43,23 @@ module LogStash; module PluginMixins; module ElasticSearch
|
|
43
43
|
# urls that already have query strings, the one specified here will be appended.
|
44
44
|
:parameters => { :validate => :hash },
|
45
45
|
|
46
|
-
# Enable SSL/TLS secured communication to Elasticsearch cluster. Leaving this unspecified will use whatever scheme
|
47
|
-
# is specified in the URLs listed in 'hosts'. If no explicit protocol is specified plain HTTP will be used.
|
48
|
-
# If SSL is explicitly disabled here the plugin will refuse to start if an HTTPS URL is given in 'hosts'
|
49
|
-
:ssl => { :validate => :boolean, :deprecated => "Set 'ssl_enabled' instead." },
|
50
|
-
|
51
46
|
# Enable SSL/TLS secured communication to Elasticsearch cluster. Leaving this unspecified will use whatever scheme
|
52
47
|
# is specified in the URLs listed in 'hosts'. If no explicit protocol is specified plain HTTP will be used.
|
53
48
|
# If SSL is explicitly disabled here the plugin will refuse to start if an HTTPS URL is given in 'hosts'
|
54
49
|
:ssl_enabled => { :validate => :boolean },
|
55
50
|
|
56
|
-
# Option to validate the server's certificate. Disabling this severely compromises security.
|
57
|
-
# For more information on disabling certificate verification please read
|
58
|
-
# https://www.cs.utexas.edu/~shmat/shmat_ccs12.pdf
|
59
|
-
:ssl_certificate_verification => { :validate => :boolean, :default => true, :deprecated => "Set 'ssl_verification_mode' instead." },
|
60
|
-
|
61
51
|
# Options to verify the server's certificate.
|
62
52
|
# "full": validates that the provided certificate has an issue date that’s within the not_before and not_after dates;
|
63
53
|
# chains to a trusted Certificate Authority (CA); has a hostname or IP address that matches the names within the certificate.
|
64
54
|
# "none": performs no certificate validation. Disabling this severely compromises security (https://www.cs.utexas.edu/~shmat/shmat_ccs12.pdf)
|
65
55
|
:ssl_verification_mode => { :validate => %w[full none], :default => 'full' },
|
66
56
|
|
67
|
-
# The .cer or .pem file to validate the server's certificate
|
68
|
-
:cacert => { :validate => :path, :deprecated => "Set 'ssl_certificate_authorities' instead." },
|
69
|
-
|
70
57
|
# The .cer or .pem files to validate the server's certificate
|
71
58
|
:ssl_certificate_authorities => { :validate => :path, :list => true },
|
72
59
|
|
73
60
|
# One or more hex-encoded SHA256 fingerprints to trust as Certificate Authorities
|
74
61
|
:ca_trusted_fingerprint => LogStash::PluginMixins::CATrustedFingerprintSupport,
|
75
62
|
|
76
|
-
# The JKS truststore to validate the server's certificate.
|
77
|
-
# Use either `:truststore` or `:cacert`
|
78
|
-
:truststore => { :validate => :path, :deprecated => "Set 'ssl_truststore_path' instead." },
|
79
|
-
|
80
63
|
# The JKS truststore to validate the server's certificate.
|
81
64
|
# Use either `:ssl_truststore_path` or `:ssl_certificate_authorities`
|
82
65
|
:ssl_truststore_path => { :validate => :path },
|
@@ -84,16 +67,9 @@ module LogStash; module PluginMixins; module ElasticSearch
|
|
84
67
|
# The format of the truststore file. It must be either jks or pkcs12
|
85
68
|
:ssl_truststore_type => { :validate => %w[pkcs12 jks] },
|
86
69
|
|
87
|
-
# Set the truststore password
|
88
|
-
:truststore_password => { :validate => :password, :deprecated => "Use 'ssl_truststore_password' instead." },
|
89
|
-
|
90
70
|
# Set the truststore password
|
91
71
|
:ssl_truststore_password => { :validate => :password },
|
92
72
|
|
93
|
-
# The keystore used to present a certificate to the server.
|
94
|
-
# It can be either .jks or .p12
|
95
|
-
:keystore => { :validate => :path, :deprecated => "Set 'ssl_keystore_path' instead." },
|
96
|
-
|
97
73
|
# The keystore used to present a certificate to the server.
|
98
74
|
# It can be either .jks or .p12
|
99
75
|
:ssl_keystore_path => { :validate => :path },
|
@@ -101,9 +77,6 @@ module LogStash; module PluginMixins; module ElasticSearch
|
|
101
77
|
# The format of the keystore file. It must be either jks or pkcs12
|
102
78
|
:ssl_keystore_type => { :validate => %w[pkcs12 jks] },
|
103
79
|
|
104
|
-
# Set the keystore password
|
105
|
-
:keystore_password => { :validate => :password, :deprecated => "Set 'ssl_keystore_password' instead." },
|
106
|
-
|
107
80
|
# Set the keystore password
|
108
81
|
:ssl_keystore_password => { :validate => :password },
|
109
82
|
|
@@ -229,7 +202,17 @@ module LogStash; module PluginMixins; module ElasticSearch
|
|
229
202
|
:dlq_custom_codes => { :validate => :number, :list => true, :default => [] },
|
230
203
|
|
231
204
|
# if enabled, failed index name interpolation events go into dead letter queue.
|
232
|
-
:dlq_on_failed_indexname_interpolation => { :validate => :boolean, :default => true }
|
205
|
+
:dlq_on_failed_indexname_interpolation => { :validate => :boolean, :default => true },
|
206
|
+
|
207
|
+
# Obsolete Settings
|
208
|
+
:ssl => { :obsolete => "Set 'ssl_enabled' instead." },
|
209
|
+
:ssl_certificate_verification => { :obsolete => "Set 'ssl_verification_mode' instead." },
|
210
|
+
:cacert => { :obsolete => "Set 'ssl_certificate_authorities' instead." },
|
211
|
+
:truststore => { :obsolete => "Set 'ssl_truststore_path' instead." },
|
212
|
+
:keystore => { :obsolete => "Set 'ssl_keystore_path' instead." },
|
213
|
+
# Leave :validate to ensure obfuscation of sensitive setting for passwords
|
214
|
+
:truststore_password => { :validate => :password, :obsolete => "Use 'ssl_truststore_password' instead." },
|
215
|
+
:keystore_password => { :validate => :password, :obsolete => "Set 'ssl_keystore_password' instead." }
|
233
216
|
}.freeze
|
234
217
|
|
235
218
|
def self.included(base)
|
@@ -243,3 +226,4 @@ module LogStash; module PluginMixins; module ElasticSearch
|
|
243
226
|
end
|
244
227
|
end
|
245
228
|
end; end; end
|
229
|
+
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Gem::Specification.new do |s|
|
2
2
|
s.name = 'logstash-output-elasticsearch'
|
3
|
-
s.version = '
|
3
|
+
s.version = '12.0.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"
|
@@ -915,12 +915,7 @@ describe LogStash::Outputs::ElasticSearch do
|
|
915
915
|
allow(elasticsearch_output_instance.client.pool).to receive(:post) do |path, params, body|
|
916
916
|
if body.length > max_bytes
|
917
917
|
max_bytes *= 2 # ensure a successful retry
|
918
|
-
|
919
|
-
413,
|
920
|
-
"test-url",
|
921
|
-
body,
|
922
|
-
""
|
923
|
-
)
|
918
|
+
double("Response", :code => 413, :body => "")
|
924
919
|
else
|
925
920
|
double("Response", :code => 200, :body => '{"errors":false,"items":[{"index":{"status":200,"result":"created"}}]}')
|
926
921
|
end
|
@@ -1130,81 +1125,6 @@ describe LogStash::Outputs::ElasticSearch do
|
|
1130
1125
|
end
|
1131
1126
|
end
|
1132
1127
|
|
1133
|
-
describe "SSL deprecated settings" do
|
1134
|
-
let(:base_options) { {"ssl" => "true"} }
|
1135
|
-
|
1136
|
-
context "with client certificate" do
|
1137
|
-
let(:do_register) { true }
|
1138
|
-
let(:cacert) { Stud::Temporary.file.path }
|
1139
|
-
let(:options) { base_options.merge(
|
1140
|
-
"cacert" => cacert,
|
1141
|
-
"ssl_certificate_verification" => false
|
1142
|
-
) }
|
1143
|
-
|
1144
|
-
after :each do
|
1145
|
-
File.delete(cacert)
|
1146
|
-
end
|
1147
|
-
|
1148
|
-
it "should map new configs into params" do
|
1149
|
-
expect(subject.params).to match hash_including(
|
1150
|
-
"ssl_enabled" => true,
|
1151
|
-
"ssl_verification_mode" => "none",
|
1152
|
-
"ssl_certificate_authorities" => [cacert]
|
1153
|
-
)
|
1154
|
-
end
|
1155
|
-
|
1156
|
-
it "should set new configs variables" do
|
1157
|
-
expect(subject.instance_variable_get(:@ssl_enabled)).to eql(true)
|
1158
|
-
expect(subject.instance_variable_get(:@ssl_verification_mode)).to eql("none")
|
1159
|
-
expect(subject.instance_variable_get(:@ssl_certificate_authorities)).to eql([cacert])
|
1160
|
-
end
|
1161
|
-
end
|
1162
|
-
|
1163
|
-
context "with java stores" do
|
1164
|
-
let(:do_register) { true }
|
1165
|
-
let(:keystore) { Stud::Temporary.file.path }
|
1166
|
-
let(:truststore) { Stud::Temporary.file.path }
|
1167
|
-
let(:options) { base_options.merge(
|
1168
|
-
"keystore" => keystore,
|
1169
|
-
"keystore_password" => "keystore",
|
1170
|
-
"truststore" => truststore,
|
1171
|
-
"truststore_password" => "truststore",
|
1172
|
-
"ssl_certificate_verification" => true
|
1173
|
-
) }
|
1174
|
-
|
1175
|
-
let(:spy_http_client_builder!) do
|
1176
|
-
allow(described_class::HttpClientBuilder).to receive(:build).with(any_args).and_call_original
|
1177
|
-
allow(described_class::HttpClientBuilder).to receive(:setup_ssl).with(any_args).and_return({})
|
1178
|
-
end
|
1179
|
-
|
1180
|
-
after :each do
|
1181
|
-
File.delete(keystore)
|
1182
|
-
File.delete(truststore)
|
1183
|
-
end
|
1184
|
-
|
1185
|
-
it "should map new configs into params" do
|
1186
|
-
expect(subject.params).to match hash_including(
|
1187
|
-
"ssl_enabled" => true,
|
1188
|
-
"ssl_keystore_path" => keystore,
|
1189
|
-
"ssl_truststore_path" => truststore,
|
1190
|
-
"ssl_verification_mode" => "full"
|
1191
|
-
)
|
1192
|
-
|
1193
|
-
expect(subject.params["ssl_keystore_password"].value).to eql("keystore")
|
1194
|
-
expect(subject.params["ssl_truststore_password"].value).to eql("truststore")
|
1195
|
-
end
|
1196
|
-
|
1197
|
-
it "should set new configs variables" do
|
1198
|
-
expect(subject.instance_variable_get(:@ssl_enabled)).to eql(true)
|
1199
|
-
expect(subject.instance_variable_get(:@ssl_keystore_path)).to eql(keystore)
|
1200
|
-
expect(subject.instance_variable_get(:@ssl_keystore_password).value).to eql("keystore")
|
1201
|
-
expect(subject.instance_variable_get(:@ssl_truststore_path)).to eql(truststore)
|
1202
|
-
expect(subject.instance_variable_get(:@ssl_truststore_password).value).to eql("truststore")
|
1203
|
-
expect(subject.instance_variable_get(:@ssl_verification_mode)).to eql("full")
|
1204
|
-
end
|
1205
|
-
end
|
1206
|
-
end
|
1207
|
-
|
1208
1128
|
describe "retry_on_conflict" do
|
1209
1129
|
let(:num_retries) { 123 }
|
1210
1130
|
let(:event) { LogStash::Event.new("myactionfield" => "update", "message" => "blah") }
|
@@ -195,3 +195,25 @@ describe "SSL options" do
|
|
195
195
|
end
|
196
196
|
end
|
197
197
|
|
198
|
+
# Move outside the SSL options describe block that has the after hook
|
199
|
+
describe "SSL obsolete settings" do
|
200
|
+
let(:base_settings) { { "hosts" => "localhost", "pool_max" => 1, "pool_max_per_route" => 1 } }
|
201
|
+
[
|
202
|
+
{name: 'ssl', replacement: 'ssl_enabled'},
|
203
|
+
{name: 'ssl_certificate_verification', replacement: 'ssl_verification_mode'},
|
204
|
+
{name: 'cacert', replacement: 'ssl_certificate_authorities'},
|
205
|
+
{name: 'truststore', replacement: 'ssl_truststore_path'},
|
206
|
+
{name: 'keystore', replacement: 'ssl_keystore_path'},
|
207
|
+
{name: 'truststore_password', replacement: 'ssl_truststore_password'},
|
208
|
+
{name: 'keystore_password', replacement: 'ssl_keystore_password'}
|
209
|
+
].each do |obsolete_setting|
|
210
|
+
context "with option #{obsolete_setting[:name]}" do
|
211
|
+
let(:settings) { base_settings.merge(obsolete_setting[:name] => "value") }
|
212
|
+
|
213
|
+
it "emits an error about the setting being obsolete" do
|
214
|
+
error_text = /The setting `#{obsolete_setting[:name]}` in plugin `elasticsearch` is obsolete and is no longer available. (Use|Set) '#{obsolete_setting[:replacement]}' instead/i
|
215
|
+
expect { LogStash::Outputs::ElasticSearch.new(settings) }.to raise_error LogStash::ConfigurationError, error_text
|
216
|
+
end
|
217
|
+
end
|
218
|
+
end
|
219
|
+
end
|
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:
|
4
|
+
version: 12.0.0
|
5
5
|
platform: java
|
6
6
|
authors:
|
7
7
|
- Elastic
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2024-12-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
requirement: !ruby/object:Gem::Requirement
|