logstash-output-elasticsearch 11.4.2-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 +4 -1
- data/docs/index.asciidoc +21 -8
- data/lib/logstash/outputs/elasticsearch/http_client.rb +2 -5
- data/lib/logstash/outputs/elasticsearch/http_client_builder.rb +5 -0
- data/lib/logstash/plugin_mixins/elasticsearch/api_configs.rb +2 -0
- data/logstash-output-elasticsearch.gemspec +1 -2
- data/spec/fixtures/test_certs/ca.crt +30 -29
- data/spec/fixtures/test_certs/test.crt +20 -18
- data/spec/fixtures/test_certs/test.p12 +0 -0
- data/spec/integration/outputs/compressed_indexing_spec.rb +1 -3
- data/spec/integration/outputs/index_spec.rb +59 -8
- data/spec/unit/outputs/elasticsearch/http_client_spec.rb +6 -8
- data/spec/unit/outputs/elasticsearch_ssl_spec.rb +1 -1
- metadata +2 -4
- data/spec/fixtures/test_certs/renew.sh +0 -11
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,5 +1,8 @@
|
|
1
|
+
## 11.5.0
|
2
|
+
- Feat: add ssl_supported_protocols option [#1055](https://github.com/logstash-plugins/logstash-output-elasticsearch/pull/1055)
|
3
|
+
|
1
4
|
## 11.4.2
|
2
|
-
-
|
5
|
+
- [DOC] Add `v8` to supported values for ecs_compatiblity defaults [#1059](https://github.com/logstash-plugins/logstash-output-elasticsearch/pull/1059)
|
3
6
|
|
4
7
|
## 11.4.1
|
5
8
|
- Feat: upgrade manticore (http-client) library [#1063](https://github.com/logstash-plugins/logstash-output-elasticsearch/pull/1063)
|
data/docs/index.asciidoc
CHANGED
@@ -293,11 +293,6 @@ index level and `monitoring` permissions at cluster level. The `monitoring`
|
|
293
293
|
permission at cluster level is necessary to perform periodic connectivity
|
294
294
|
checks.
|
295
295
|
|
296
|
-
[id="plugins-{type}s-{plugin}-handling-non-utf-8"]
|
297
|
-
==== Handling non UTF-8 data
|
298
|
-
|
299
|
-
This plugin transmits events to Elasticsearch using a JSON API, and therefore requires that all string values in events to be valid UTF-8.
|
300
|
-
When a string value on an event contains one or more byte sequences that are not valid in UTF-8, each offending byte sequence is replaced with the UTF-8 replacement character (`\uFFFD`).
|
301
296
|
|
302
297
|
[id="plugins-{type}s-{plugin}-options"]
|
303
298
|
==== Elasticsearch Output Configuration Options
|
@@ -360,6 +355,7 @@ This plugin supports the following configuration options plus the
|
|
360
355
|
| <<plugins-{type}s-{plugin}-sniffing_path>> |<<string,string>>|No
|
361
356
|
| <<plugins-{type}s-{plugin}-ssl>> |<<boolean,boolean>>|No
|
362
357
|
| <<plugins-{type}s-{plugin}-ssl_certificate_verification>> |<<boolean,boolean>>|No
|
358
|
+
| <<plugins-{type}s-{plugin}-ssl_supported_protocols>> |<<string,string>>|No
|
363
359
|
| <<plugins-{type}s-{plugin}-template>> |a valid filesystem path|No
|
364
360
|
| <<plugins-{type}s-{plugin}-template_name>> |<<string,string>>|No
|
365
361
|
| <<plugins-{type}s-{plugin}-template_overwrite>> |<<boolean,boolean>>|No
|
@@ -559,7 +555,7 @@ If you don't set a value for this option:
|
|
559
555
|
* Value type is <<string,string>>
|
560
556
|
* Supported values are:
|
561
557
|
** `disabled`: does not provide ECS-compatible templates
|
562
|
-
** `v1`:
|
558
|
+
** `v1`,`v8`: Elastic Common Schema-compliant behavior
|
563
559
|
* Default value depends on which version of Logstash is running:
|
564
560
|
** When Logstash provides a `pipeline.ecs_compatibility` setting, its value is used as the default
|
565
561
|
** Otherwise, the default value is `disabled`.
|
@@ -1009,6 +1005,23 @@ Option to validate the server's certificate. Disabling this severely compromises
|
|
1009
1005
|
For more information on disabling certificate verification please read
|
1010
1006
|
https://www.cs.utexas.edu/~shmat/shmat_ccs12.pdf
|
1011
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
|
+
|
1012
1025
|
[id="plugins-{type}s-{plugin}-template"]
|
1013
1026
|
===== `template`
|
1014
1027
|
|
@@ -1023,8 +1036,8 @@ If not set, the included template will be used.
|
|
1023
1036
|
|
1024
1037
|
* Value type is <<string,string>>
|
1025
1038
|
* Default value depends on whether <<plugins-{type}s-{plugin}-ecs_compatibility>> is enabled:
|
1026
|
-
|
1027
|
-
|
1039
|
+
** ECS Compatibility disabled: `logstash`
|
1040
|
+
** ECS Compatibility enabled: `ecs-logstash`
|
1028
1041
|
|
1029
1042
|
|
1030
1043
|
This configuration option defines how the template is named inside Elasticsearch.
|
@@ -127,9 +127,6 @@ module LogStash; module Outputs; class ElasticSearch;
|
|
127
127
|
action.map {|line| LogStash::Json.dump(line)}.join("\n") :
|
128
128
|
LogStash::Json.dump(action)
|
129
129
|
as_json << "\n"
|
130
|
-
|
131
|
-
as_json.scrub! # ensure generated JSON is valid UTF-8
|
132
|
-
|
133
130
|
if (stream_writer.pos + as_json.bytesize) > TARGET_BULK_BYTES && stream_writer.pos > 0
|
134
131
|
stream_writer.flush # ensure writer has sync'd buffers before reporting sizes
|
135
132
|
logger.debug("Sending partial bulk request for batch with one or more actions remaining.",
|
@@ -286,11 +283,11 @@ module LogStash; module Outputs; class ElasticSearch;
|
|
286
283
|
end
|
287
284
|
|
288
285
|
def client_settings
|
289
|
-
@options[:client_settings] || {}
|
286
|
+
@_client_settings ||= @options[:client_settings] || {}
|
290
287
|
end
|
291
288
|
|
292
289
|
def ssl_options
|
293
|
-
client_settings.fetch(:ssl, {})
|
290
|
+
@_ssl_options ||= client_settings.fetch(:ssl, {})
|
294
291
|
end
|
295
292
|
|
296
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"
|
@@ -1,31 +1,32 @@
|
|
1
1
|
-----BEGIN CERTIFICATE-----
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
2
|
+
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
|
31
|
+
nIg9fQPvVw+fIHACZQ==
|
31
32
|
-----END CERTIFICATE-----
|
@@ -1,7 +1,7 @@
|
|
1
1
|
-----BEGIN CERTIFICATE-----
|
2
|
-
|
2
|
+
MIIGQjCCBCqgAwIBAgIBAzANBgkqhkiG9w0BAQsFADBMMQswCQYDVQQGEwJQVDEL
|
3
3
|
MAkGA1UECAwCTkExDzANBgNVBAcMBkxpc2JvbjEOMAwGA1UECgwFTXlMYWIxDzAN
|
4
|
-
|
4
|
+
BgNVBAMMBlJvb3RDQTAeFw0xOTA3MTUxMzEzMDVaFw0yMjA0MTAxMzEzMDVaMFMx
|
5
5
|
CzAJBgNVBAYTAlBUMQswCQYDVQQIDAJOQTEPMA0GA1UEBwwGTGlzYm9uMQ4wDAYD
|
6
6
|
VQQKDAVNeUxhYjEWMBQGA1UEAwwNZWxhc3RpY3NlYXJjaDCCAiIwDQYJKoZIhvcN
|
7
7
|
AQEBBQADggIPADCCAgoCggIBAMYhP2zPOE3ke9naeK+cIPNV91htuoGGARs+mlY/
|
@@ -15,20 +15,22 @@ bFMKspGHnytQZF+a+mc5H33G9HiPP3jZE2JjrWlOay+j6ImylMgjcZmHAgaUe3ET
|
|
15
15
|
tyczoQ5/L5BNiyA2h+1TU8jWicNDtl1+CtOsgEVBBHA6p/IHhsHbNZWPrYtIO9mh
|
16
16
|
hiJw1R5yrITXnjZY0rObITwyt/e6Sc3YnoQfsSGaLJEG0aDc0RALAhgzj+RY8086
|
17
17
|
2RKOyfdw1sw1RmJKdCf+dOzhPyDpvauvCxrL8UZQTzcBs+qpxOWnZFRWeNsLwoDn
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
18
|
+
6JXXAgMBAAGjggEmMIIBIjAJBgNVHRMEAjAAMBEGCWCGSAGG+EIBAQQEAwIGQDAz
|
19
|
+
BglghkgBhvhCAQ0EJhYkT3BlblNTTCBHZW5lcmF0ZWQgU2VydmVyIENlcnRpZmlj
|
20
|
+
YXRlMB0GA1UdDgQWBBRvvz0yGw6Tz2UxbBLAGyzVMtcMUDCBiAYDVR0jBIGAMH6A
|
21
|
+
FKFadJx46upif1BrhYZ0iu8o2z8roVCkTjBMMQswCQYDVQQGEwJQVDELMAkGA1UE
|
22
|
+
CAwCTkExDzANBgNVBAcMBkxpc2JvbjEOMAwGA1UECgwFTXlMYWIxDzANBgNVBAMM
|
23
|
+
BlJvb3RDQYIUU+VHJ91JsLLA1GJYC+UchNfw3hEwDgYDVR0PAQH/BAQDAgWgMBMG
|
24
|
+
A1UdJQQMMAoGCCsGAQUFBwMBMA0GCSqGSIb3DQEBCwUAA4ICAQCaABHQxm6mtrM9
|
25
|
+
f7kbgzuhEc47Q+bgrbjxeoIVOeO2Zshdw0SZlfkWvWe0622WSeWMsTBJ3hoaQwZe
|
26
|
+
9FUf1lnsWe6u6oOckiG9OjE0TyXJ7+eghdL1HPeXgJ+4ihwJsRtkNEljWf4HS7/n
|
27
|
+
y5LaFhcXdn2ZdbUKJ7z7zXqzh2Cp8VUBtsR+/IdiLjSN81dQou77/a2M/a/7BI2Z
|
28
|
+
HhUlUx1T7jHzNllJBRF3IaOk72yjoU4cL0qVy9874SXPwdpeFHtvS4TdQTLqnAGR
|
29
|
+
liHJcB1ZNz1sVOXndw3Wbvv6iB5y+IX/Y/kRSHS6zpZGdAb7ar/Vgl+Uvs3fKi44
|
30
|
+
y9hq2b49bYlcSQMtmlimCBDiu82z0aYtVFLalZ2L/W7CMaeE3jpyzu/bbygRv/Bp
|
31
|
+
lKSaUtaFIVgiuRBPwIBDMyai3CJ5L+dJrJPU2JzzQvtJGFQCFCIHd9rqweubZB6V
|
32
|
+
re5cUn4dxlxA5SkZ0amFFV5DpP0YhThA/gq0t/NeWRmCEEBWNXZaqFmDhiYS5mnu
|
33
|
+
Z+NUtv8E332S46RdfneHe961SlMXEFC96I+1HOjXHdXlqKfOU8Qvy8VzsnpjuNE5
|
34
|
+
VTrvnAM1L3LwqtYQYfUWUHYZFYdvh8layA2ImNE7yx/9wIIkw/L1j9m71Upi6WKR
|
35
|
+
FKbYFqzgpWksa+zZ2RYYplUAxq0wYw==
|
34
36
|
-----END CERTIFICATE-----
|
Binary file
|
@@ -10,12 +10,10 @@ end
|
|
10
10
|
|
11
11
|
describe "indexing with http_compression turned on", :integration => true do
|
12
12
|
let(:event) { LogStash::Event.new("message" => "Hello World!", "type" => type) }
|
13
|
-
let(:event_with_invalid_utf_8_bytes) { LogStash::Event.new("message" => "Message from spacecraft which contains \xAC invalid \xD7 byte sequences.", "type" => type) }
|
14
13
|
let(:index) { 10.times.collect { rand(10).to_s }.join("") }
|
15
14
|
let(:type) { ESHelper.es_version_satisfies?("< 7") ? "doc" : "_doc" }
|
16
15
|
let(:event_count) { 10000 + rand(500) }
|
17
|
-
|
18
|
-
let(:events) { event_count.times.map { |i| i%3 == 0 ? event : event_with_invalid_utf_8_bytes }.to_a }
|
16
|
+
let(:events) { event_count.times.map { event }.to_a }
|
19
17
|
let(:config) {
|
20
18
|
{
|
21
19
|
"hosts" => get_host_port,
|
@@ -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
|
@@ -243,14 +243,12 @@ describe LogStash::Outputs::ElasticSearch::HttpClient do
|
|
243
243
|
end
|
244
244
|
end
|
245
245
|
|
246
|
-
context "with
|
247
|
-
let(:
|
248
|
-
let(:
|
249
|
-
let(:invalid_utf_8_message) { "contains invalid \xAC" }
|
246
|
+
context "with two messages" do
|
247
|
+
let(:message1) { "hey" }
|
248
|
+
let(:message2) { "you" }
|
250
249
|
let(:actions) { [
|
251
|
-
["index", {:_id=>nil, :_index=>"logstash"}, {"message"=>
|
252
|
-
["index", {:_id=>nil, :_index=>"logstash"}, {"message"=>
|
253
|
-
["index", {:_id=>nil, :_index=>"logstash"}, {"message"=> message_tail}],
|
250
|
+
["index", {:_id=>nil, :_index=>"logstash"}, {"message"=> message1}],
|
251
|
+
["index", {:_id=>nil, :_index=>"logstash"}, {"message"=> message2}],
|
254
252
|
]}
|
255
253
|
it "executes one bulk_send operation" do
|
256
254
|
allow(subject).to receive(:join_bulk_responses)
|
@@ -260,7 +258,7 @@ describe LogStash::Outputs::ElasticSearch::HttpClient do
|
|
260
258
|
|
261
259
|
context "if one exceeds TARGET_BULK_BYTES" do
|
262
260
|
let(:target_bulk_bytes) { LogStash::Outputs::ElasticSearch::TARGET_BULK_BYTES }
|
263
|
-
let(:
|
261
|
+
let(:message1) { "a" * (target_bulk_bytes + 1) }
|
264
262
|
it "executes two bulk_send operations" do
|
265
263
|
allow(subject).to receive(:join_bulk_responses)
|
266
264
|
expect(subject).to receive(:bulk_send).twice
|
@@ -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:
|
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
|
@@ -246,7 +246,6 @@ files:
|
|
246
246
|
- spec/fixtures/template-with-policy-es8x.json
|
247
247
|
- spec/fixtures/test_certs/ca.crt
|
248
248
|
- spec/fixtures/test_certs/ca.key
|
249
|
-
- spec/fixtures/test_certs/renew.sh
|
250
249
|
- spec/fixtures/test_certs/test.crt
|
251
250
|
- spec/fixtures/test_certs/test.key
|
252
251
|
- spec/fixtures/test_certs/test.p12
|
@@ -329,7 +328,6 @@ test_files:
|
|
329
328
|
- spec/fixtures/template-with-policy-es8x.json
|
330
329
|
- spec/fixtures/test_certs/ca.crt
|
331
330
|
- spec/fixtures/test_certs/ca.key
|
332
|
-
- spec/fixtures/test_certs/renew.sh
|
333
331
|
- spec/fixtures/test_certs/test.crt
|
334
332
|
- spec/fixtures/test_certs/test.key
|
335
333
|
- spec/fixtures/test_certs/test.p12
|
@@ -1,11 +0,0 @@
|
|
1
|
-
#!/usr/bin/env bash
|
2
|
-
|
3
|
-
set -e
|
4
|
-
cd "$(dirname "$0")"
|
5
|
-
|
6
|
-
openssl x509 -x509toreq -copy_extensions copyall -in ca.crt -signkey ca.key -out ca.csr
|
7
|
-
openssl x509 -req -copy_extensions copyall -days 365 -in ca.csr -set_serial 0x01 -signkey ca.key -out ca.crt && rm ca.csr
|
8
|
-
|
9
|
-
openssl x509 -x509toreq -copy_extensions copyall -in test.crt -signkey test.key -out test.csr
|
10
|
-
openssl x509 -req -copy_extensions copyall -days 365 -in test.csr -set_serial 0x01 -CA ca.crt -CAkey ca.key -out test.crt && rm test.csr
|
11
|
-
openssl pkcs12 -export -inkey test.key -in test.crt -passout "pass:1234567890" -out test.p12
|