logstash-output-elasticsearch 11.4.1-java → 11.5.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 +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
|