logstash-output-elasticsearch 11.4.1-java → 11.5.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 +4 -4
- data/CHANGELOG.md +6 -0
- data/docs/index.asciidoc +21 -3
- data/lib/logstash/outputs/elasticsearch/http_client.rb +2 -2
- data/lib/logstash/outputs/elasticsearch/http_client_builder.rb +5 -0
- data/lib/logstash/outputs/elasticsearch/templates/ecs-v8/elasticsearch-7x.json +1 -1
- data/lib/logstash/outputs/elasticsearch/templates/ecs-v8/elasticsearch-8x.json +1 -1
- data/lib/logstash/plugin_mixins/elasticsearch/api_configs.rb +2 -0
- data/logstash-output-elasticsearch.gemspec +1 -2
- data/spec/integration/outputs/index_spec.rb +59 -8
- data/spec/unit/outputs/elasticsearch_ssl_spec.rb +1 -1
- 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: 7eab2dc342c636e2d5df4e2f9bbd776b446cf110a0803c11fc919fcbbd2f2d83
|
4
|
+
data.tar.gz: 565ed3031b685f8541853043d486bda0cff8aa7da2c6f2733e0e2b43345de099
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1fbb452170d276531d9b202538d9cf0a23b834053309c818aaaff6f75dd41ecd3d787394234c295639d95d2fe763d1063424cff56b598d1ba16e2fe92374df44
|
7
|
+
data.tar.gz: 6b7f17fa679306e65ec94a048ef2205ec9f884cbd11fe1adf861dbb1eccaea752105c3bf149a4fe08f1cdb3c6189200d612dc4cece52ac937eb78d599b188926
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,9 @@
|
|
1
|
+
## 11.5.0
|
2
|
+
- Feat: add ssl_supported_protocols option [#1055](https://github.com/logstash-plugins/logstash-output-elasticsearch/pull/1055)
|
3
|
+
|
4
|
+
## 11.4.2
|
5
|
+
- [DOC] Add `v8` to supported values for ecs_compatiblity defaults [#1059](https://github.com/logstash-plugins/logstash-output-elasticsearch/pull/1059)
|
6
|
+
|
1
7
|
## 11.4.1
|
2
8
|
- Feat: upgrade manticore (http-client) library [#1063](https://github.com/logstash-plugins/logstash-output-elasticsearch/pull/1063)
|
3
9
|
- the underlying changes include latest HttpClient (4.5.13)
|
data/docs/index.asciidoc
CHANGED
@@ -355,6 +355,7 @@ This plugin supports the following configuration options plus the
|
|
355
355
|
| <<plugins-{type}s-{plugin}-sniffing_path>> |<<string,string>>|No
|
356
356
|
| <<plugins-{type}s-{plugin}-ssl>> |<<boolean,boolean>>|No
|
357
357
|
| <<plugins-{type}s-{plugin}-ssl_certificate_verification>> |<<boolean,boolean>>|No
|
358
|
+
| <<plugins-{type}s-{plugin}-ssl_supported_protocols>> |<<string,string>>|No
|
358
359
|
| <<plugins-{type}s-{plugin}-template>> |a valid filesystem path|No
|
359
360
|
| <<plugins-{type}s-{plugin}-template_name>> |<<string,string>>|No
|
360
361
|
| <<plugins-{type}s-{plugin}-template_overwrite>> |<<boolean,boolean>>|No
|
@@ -554,7 +555,7 @@ If you don't set a value for this option:
|
|
554
555
|
* Value type is <<string,string>>
|
555
556
|
* Supported values are:
|
556
557
|
** `disabled`: does not provide ECS-compatible templates
|
557
|
-
** `v1`:
|
558
|
+
** `v1`,`v8`: Elastic Common Schema-compliant behavior
|
558
559
|
* Default value depends on which version of Logstash is running:
|
559
560
|
** When Logstash provides a `pipeline.ecs_compatibility` setting, its value is used as the default
|
560
561
|
** Otherwise, the default value is `disabled`.
|
@@ -1004,6 +1005,23 @@ Option to validate the server's certificate. Disabling this severely compromises
|
|
1004
1005
|
For more information on disabling certificate verification please read
|
1005
1006
|
https://www.cs.utexas.edu/~shmat/shmat_ccs12.pdf
|
1006
1007
|
|
1008
|
+
[id="plugins-{type}s-{plugin}-ssl_supported_protocols"]
|
1009
|
+
===== `ssl_supported_protocols`
|
1010
|
+
|
1011
|
+
* Value type is <<string,string>>
|
1012
|
+
* Allowed values are: `'TLSv1.1'`, `'TLSv1.2'`, `'TLSv1.3'`
|
1013
|
+
* Default depends on the JDK being used. With up-to-date Logstash, the default is `['TLSv1.2', 'TLSv1.3']`.
|
1014
|
+
`'TLSv1.1'` is not considered secure and is only provided for legacy applications.
|
1015
|
+
|
1016
|
+
List of allowed SSL/TLS versions to use when establishing a connection to the Elasticsearch cluster.
|
1017
|
+
|
1018
|
+
For Java 8 `'TLSv1.3'` is supported only since **8u262** (AdoptOpenJDK), but requires that you set the
|
1019
|
+
`LS_JAVA_OPTS="-Djdk.tls.client.protocols=TLSv1.3"` system property in Logstash.
|
1020
|
+
|
1021
|
+
NOTE: If you configure the plugin to use `'TLSv1.1'` on any recent JVM, such as the one packaged with Logstash,
|
1022
|
+
the protocol is disabled by default and needs to be enabled manually by changing `jdk.tls.disabledAlgorithms` in
|
1023
|
+
the *$JDK_HOME/conf/security/java.security* configuration file. That is, `TLSv1.1` needs to be removed from the list.
|
1024
|
+
|
1007
1025
|
[id="plugins-{type}s-{plugin}-template"]
|
1008
1026
|
===== `template`
|
1009
1027
|
|
@@ -1018,8 +1036,8 @@ If not set, the included template will be used.
|
|
1018
1036
|
|
1019
1037
|
* Value type is <<string,string>>
|
1020
1038
|
* Default value depends on whether <<plugins-{type}s-{plugin}-ecs_compatibility>> is enabled:
|
1021
|
-
|
1022
|
-
|
1039
|
+
** ECS Compatibility disabled: `logstash`
|
1040
|
+
** ECS Compatibility enabled: `ecs-logstash`
|
1023
1041
|
|
1024
1042
|
|
1025
1043
|
This configuration option defines how the template is named inside Elasticsearch.
|
@@ -283,11 +283,11 @@ module LogStash; module Outputs; class ElasticSearch;
|
|
283
283
|
end
|
284
284
|
|
285
285
|
def client_settings
|
286
|
-
@options[:client_settings] || {}
|
286
|
+
@_client_settings ||= @options[:client_settings] || {}
|
287
287
|
end
|
288
288
|
|
289
289
|
def ssl_options
|
290
|
-
client_settings.fetch(:ssl, {})
|
290
|
+
@_ssl_options ||= client_settings.fetch(:ssl, {})
|
291
291
|
end
|
292
292
|
|
293
293
|
def http_compression
|
@@ -132,11 +132,16 @@ module LogStash; module Outputs; class ElasticSearch;
|
|
132
132
|
ssl_options[:keystore] = keystore
|
133
133
|
ssl_options[:keystore_password] = keystore_password.value if keystore_password
|
134
134
|
end
|
135
|
+
|
135
136
|
if !params["ssl_certificate_verification"]
|
136
137
|
logger.warn "You have enabled encryption but DISABLED certificate verification, " +
|
137
138
|
"to make sure your data is secure remove `ssl_certificate_verification => false`"
|
138
139
|
ssl_options[:verify] = :disable # false accepts self-signed but still validates hostname
|
139
140
|
end
|
141
|
+
|
142
|
+
protocols = params['ssl_supported_protocols']
|
143
|
+
ssl_options[:protocols] = protocols if protocols && protocols.any?
|
144
|
+
|
140
145
|
{ ssl: ssl_options }
|
141
146
|
end
|
142
147
|
|
@@ -66,6 +66,8 @@ module LogStash; module PluginMixins; module ElasticSearch
|
|
66
66
|
# Set the keystore password
|
67
67
|
:keystore_password => { :validate => :password },
|
68
68
|
|
69
|
+
:ssl_supported_protocols => { :validate => ['TLSv1.1', 'TLSv1.2', 'TLSv1.3'], :default => [], :list => true },
|
70
|
+
|
69
71
|
# This setting asks Elasticsearch for the list of all cluster nodes and adds them to the hosts list.
|
70
72
|
# Note: This will return ALL nodes with HTTP enabled (including master nodes!). If you use
|
71
73
|
# this with master nodes, you probably want to disable HTTP on them by setting
|
@@ -1,7 +1,6 @@
|
|
1
1
|
Gem::Specification.new do |s|
|
2
2
|
s.name = 'logstash-output-elasticsearch'
|
3
|
-
s.version = '11.
|
4
|
-
|
3
|
+
s.version = '11.5.0'
|
5
4
|
s.licenses = ['apache-2.0']
|
6
5
|
s.summary = "Stores logs in Elasticsearch"
|
7
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"
|
@@ -60,25 +60,48 @@ describe "indexing" do
|
|
60
60
|
|
61
61
|
let(:curl_opts) { nil }
|
62
62
|
|
63
|
+
let(:es_admin) { 'admin' } # default user added in ES -> 8.x requires auth credentials for /_refresh etc
|
64
|
+
let(:es_admin_pass) { 'elastic' }
|
65
|
+
|
63
66
|
def curl_and_get_json_response(url, method: :get); require 'open3'
|
67
|
+
cmd = "curl -s -v --show-error #{curl_opts} -X #{method.to_s.upcase} -k #{url}"
|
64
68
|
begin
|
65
|
-
|
69
|
+
out, err, status = Open3.capture3(cmd)
|
66
70
|
rescue Errno::ENOENT
|
67
71
|
fail "curl not available, make sure curl binary is installed and available on $PATH"
|
68
72
|
end
|
69
73
|
|
70
74
|
if status.success?
|
71
|
-
|
75
|
+
http_status = err.match(/< HTTP\/1.1 (\d+)/)[1] || '0' # < HTTP/1.1 200 OK\r\n
|
76
|
+
|
77
|
+
if http_status.strip[0].to_i > 2
|
78
|
+
error = (LogStash::Json.load(out)['error']) rescue nil
|
79
|
+
if error
|
80
|
+
fail "#{cmd.inspect} received an error: #{http_status}\n\n#{error.inspect}"
|
81
|
+
else
|
82
|
+
warn out
|
83
|
+
fail "#{cmd.inspect} unexpected response: #{http_status}\n\n#{err}"
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
LogStash::Json.load(out)
|
72
88
|
else
|
73
|
-
|
89
|
+
warn out
|
90
|
+
fail "#{cmd.inspect} process failed: #{status}\n\n#{err}"
|
74
91
|
end
|
75
92
|
end
|
76
93
|
|
94
|
+
let(:initial_events) { [] }
|
95
|
+
|
77
96
|
before do
|
78
97
|
subject.register
|
79
|
-
subject.multi_receive(
|
98
|
+
subject.multi_receive(initial_events) if initial_events
|
80
99
|
end
|
81
|
-
|
100
|
+
|
101
|
+
after do
|
102
|
+
subject.do_close
|
103
|
+
end
|
104
|
+
|
82
105
|
shared_examples "an indexer" do |secure|
|
83
106
|
it "ships events" do
|
84
107
|
subject.multi_receive(events)
|
@@ -146,17 +169,17 @@ describe "indexing" do
|
|
146
169
|
let(:user) { "simpleuser" }
|
147
170
|
let(:password) { "abc123" }
|
148
171
|
let(:cacert) { "spec/fixtures/test_certs/ca.crt" }
|
149
|
-
let(:es_url) {"https
|
172
|
+
let(:es_url) { "https://#{get_host_port}" }
|
150
173
|
let(:config) do
|
151
174
|
{
|
152
|
-
"hosts" => [
|
175
|
+
"hosts" => [ get_host_port ],
|
153
176
|
"user" => user,
|
154
177
|
"password" => password,
|
155
178
|
"ssl" => true,
|
156
179
|
"cacert" => cacert,
|
157
180
|
"index" => index
|
158
181
|
}
|
159
|
-
end
|
182
|
+
end
|
160
183
|
|
161
184
|
let(:curl_opts) { "-u #{user}:#{password}" }
|
162
185
|
|
@@ -197,6 +220,8 @@ describe "indexing" do
|
|
197
220
|
|
198
221
|
else
|
199
222
|
|
223
|
+
let(:curl_opts) { "#{super()} --tlsv1.2 --tls-max 1.3 -u #{es_admin}:#{es_admin_pass}" } # due ES 8.x we need user/password
|
224
|
+
|
200
225
|
it_behaves_like("an indexer", true)
|
201
226
|
|
202
227
|
describe "with a password requiring escaping" do
|
@@ -219,6 +244,32 @@ describe "indexing" do
|
|
219
244
|
include_examples("an indexer", true)
|
220
245
|
end
|
221
246
|
|
247
|
+
context 'with enforced TLSv1.3 protocol' do
|
248
|
+
let(:config) { super().merge 'ssl_supported_protocols' => [ 'TLSv1.3' ] }
|
249
|
+
|
250
|
+
it_behaves_like("an indexer", true)
|
251
|
+
end
|
252
|
+
|
253
|
+
context 'with enforced TLSv1.2 protocol (while ES only enabled TLSv1.3)' do
|
254
|
+
let(:config) { super().merge 'ssl_supported_protocols' => [ 'TLSv1.2' ] }
|
255
|
+
|
256
|
+
let(:initial_events) { nil }
|
257
|
+
|
258
|
+
it "does not ship events" do
|
259
|
+
curl_and_get_json_response index_url, method: :put # make sure index exists
|
260
|
+
Thread.start { subject.multi_receive(events) } # we'll be stuck in a retry loop
|
261
|
+
sleep 2.5
|
262
|
+
|
263
|
+
curl_and_get_json_response "#{es_url}/_refresh", method: :post
|
264
|
+
|
265
|
+
result = curl_and_get_json_response "#{index_url}/_count?q=*"
|
266
|
+
cur_count = result["count"]
|
267
|
+
expect(cur_count).to eq(0) # ES output keeps re-trying but ends up with a
|
268
|
+
# [Manticore::ClientProtocolException] Received fatal alert: protocol_version
|
269
|
+
end
|
270
|
+
|
271
|
+
end if ENV['ES_SSL_SUPPORTED_PROTOCOLS'] == 'TLSv1.3'
|
272
|
+
|
222
273
|
end
|
223
274
|
|
224
275
|
end
|
@@ -33,7 +33,7 @@ describe "SSL option" do
|
|
33
33
|
|
34
34
|
it "should pass the flag to the ES client" do
|
35
35
|
expect(::Manticore::Client).to receive(:new) do |args|
|
36
|
-
expect(args[:ssl]).to
|
36
|
+
expect(args[:ssl]).to match hash_including(:enabled => true, :verify => :disable)
|
37
37
|
end.and_return(manticore_double)
|
38
38
|
|
39
39
|
subject.register
|
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.
|
4
|
+
version: 11.5.0
|
5
5
|
platform: java
|
6
6
|
authors:
|
7
7
|
- Elastic
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-
|
11
|
+
date: 2022-04-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
requirement: !ruby/object:Gem::Requirement
|