logstash-output-elasticsearch 11.22.17-java → 12.0.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 +11 -20
- data/README.md +1 -3
- data/docs/index.asciidoc +21 -112
- data/lib/logstash/outputs/elasticsearch/http_client/manticore_adapter.rb +4 -1
- data/lib/logstash/outputs/elasticsearch/http_client/pool.rb +22 -12
- data/lib/logstash/outputs/elasticsearch/http_client.rb +31 -44
- data/lib/logstash/outputs/elasticsearch/http_client_builder.rb +2 -31
- data/lib/logstash/outputs/elasticsearch/template_manager.rb +1 -16
- data/lib/logstash/outputs/elasticsearch.rb +0 -47
- data/lib/logstash/plugin_mixins/elasticsearch/api_configs.rb +13 -30
- data/lib/logstash/plugin_mixins/elasticsearch/common.rb +1 -11
- data/logstash-output-elasticsearch.gemspec +2 -2
- data/spec/es_spec_helper.rb +22 -34
- data/spec/fixtures/test_certs/GENERATED_AT +1 -1
- data/spec/fixtures/test_certs/ca.crt +27 -30
- data/spec/fixtures/test_certs/ca.der.sha256 +1 -1
- data/spec/fixtures/test_certs/renew.sh +3 -2
- data/spec/fixtures/test_certs/test.crt +28 -29
- data/spec/fixtures/test_certs/test.der.sha256 +1 -1
- data/spec/fixtures/test_certs/test.p12 +0 -0
- data/spec/integration/outputs/compressed_indexing_spec.rb +1 -3
- data/spec/integration/outputs/delete_spec.rb +4 -4
- data/spec/integration/outputs/ilm_spec.rb +12 -18
- data/spec/integration/outputs/index_spec.rb +2 -12
- data/spec/integration/outputs/index_version_spec.rb +7 -7
- data/spec/integration/outputs/metrics_spec.rb +1 -4
- data/spec/integration/outputs/painless_update_spec.rb +10 -11
- data/spec/integration/outputs/unsupported_actions_spec.rb +10 -15
- data/spec/integration/outputs/update_spec.rb +9 -11
- data/spec/spec_helper.rb +0 -8
- data/spec/support/elasticsearch/api/actions/get_alias.rb +18 -0
- data/spec/support/elasticsearch/api/actions/put_alias.rb +24 -0
- data/spec/unit/outputs/elasticsearch/http_client_spec.rb +0 -77
- data/spec/unit/outputs/elasticsearch/template_manager_spec.rb +0 -71
- data/spec/unit/outputs/elasticsearch_spec.rb +3 -112
- data/spec/unit/outputs/elasticsearch_ssl_spec.rb +22 -0
- data/spec/unit/outputs/error_whitelist_spec.rb +1 -0
- metadata +25 -19
- data/version +0 -1
|
@@ -16,8 +16,7 @@ module LogStash; module PluginMixins; module ElasticSearch
|
|
|
16
16
|
:password => { :validate => :password },
|
|
17
17
|
|
|
18
18
|
# Authenticate using Elasticsearch API key.
|
|
19
|
-
#
|
|
20
|
-
# its base64-encoded form, or an https://www.elastic.co/docs/deploy-manage/api-keys/elastic-cloud-api-keys[Elastic Cloud API key] (prefixed with `essu_`) can be used.
|
|
19
|
+
# format is id:api_key (as returned by https://www.elastic.co/guide/en/elasticsearch/reference/current/security-api-create-api-key.html[Create API key])
|
|
21
20
|
:api_key => { :validate => :password },
|
|
22
21
|
|
|
23
22
|
# Cloud authentication string ("<username>:<password>" format) is an alternative for the `user`/`password` configuration.
|
|
@@ -44,40 +43,23 @@ module LogStash; module PluginMixins; module ElasticSearch
|
|
|
44
43
|
# urls that already have query strings, the one specified here will be appended.
|
|
45
44
|
:parameters => { :validate => :hash },
|
|
46
45
|
|
|
47
|
-
# Enable SSL/TLS secured communication to Elasticsearch cluster. Leaving this unspecified will use whatever scheme
|
|
48
|
-
# is specified in the URLs listed in 'hosts'. If no explicit protocol is specified plain HTTP will be used.
|
|
49
|
-
# If SSL is explicitly disabled here the plugin will refuse to start if an HTTPS URL is given in 'hosts'
|
|
50
|
-
:ssl => { :validate => :boolean, :deprecated => "Set 'ssl_enabled' instead." },
|
|
51
|
-
|
|
52
46
|
# Enable SSL/TLS secured communication to Elasticsearch cluster. Leaving this unspecified will use whatever scheme
|
|
53
47
|
# is specified in the URLs listed in 'hosts'. If no explicit protocol is specified plain HTTP will be used.
|
|
54
48
|
# If SSL is explicitly disabled here the plugin will refuse to start if an HTTPS URL is given in 'hosts'
|
|
55
49
|
:ssl_enabled => { :validate => :boolean },
|
|
56
50
|
|
|
57
|
-
# Option to validate the server's certificate. Disabling this severely compromises security.
|
|
58
|
-
# For more information on disabling certificate verification please read
|
|
59
|
-
# https://www.cs.utexas.edu/~shmat/shmat_ccs12.pdf
|
|
60
|
-
:ssl_certificate_verification => { :validate => :boolean, :default => true, :deprecated => "Set 'ssl_verification_mode' instead." },
|
|
61
|
-
|
|
62
51
|
# Options to verify the server's certificate.
|
|
63
52
|
# "full": validates that the provided certificate has an issue date that’s within the not_before and not_after dates;
|
|
64
53
|
# chains to a trusted Certificate Authority (CA); has a hostname or IP address that matches the names within the certificate.
|
|
65
54
|
# "none": performs no certificate validation. Disabling this severely compromises security (https://www.cs.utexas.edu/~shmat/shmat_ccs12.pdf)
|
|
66
55
|
:ssl_verification_mode => { :validate => %w[full none], :default => 'full' },
|
|
67
56
|
|
|
68
|
-
# The .cer or .pem file to validate the server's certificate
|
|
69
|
-
:cacert => { :validate => :path, :deprecated => "Set 'ssl_certificate_authorities' instead." },
|
|
70
|
-
|
|
71
57
|
# The .cer or .pem files to validate the server's certificate
|
|
72
58
|
:ssl_certificate_authorities => { :validate => :path, :list => true },
|
|
73
59
|
|
|
74
60
|
# One or more hex-encoded SHA256 fingerprints to trust as Certificate Authorities
|
|
75
61
|
:ca_trusted_fingerprint => LogStash::PluginMixins::CATrustedFingerprintSupport,
|
|
76
62
|
|
|
77
|
-
# The JKS truststore to validate the server's certificate.
|
|
78
|
-
# Use either `:truststore` or `:cacert`
|
|
79
|
-
:truststore => { :validate => :path, :deprecated => "Set 'ssl_truststore_path' instead." },
|
|
80
|
-
|
|
81
63
|
# The JKS truststore to validate the server's certificate.
|
|
82
64
|
# Use either `:ssl_truststore_path` or `:ssl_certificate_authorities`
|
|
83
65
|
:ssl_truststore_path => { :validate => :path },
|
|
@@ -85,16 +67,9 @@ module LogStash; module PluginMixins; module ElasticSearch
|
|
|
85
67
|
# The format of the truststore file. It must be either jks or pkcs12
|
|
86
68
|
:ssl_truststore_type => { :validate => %w[pkcs12 jks] },
|
|
87
69
|
|
|
88
|
-
# Set the truststore password
|
|
89
|
-
:truststore_password => { :validate => :password, :deprecated => "Use 'ssl_truststore_password' instead." },
|
|
90
|
-
|
|
91
70
|
# Set the truststore password
|
|
92
71
|
:ssl_truststore_password => { :validate => :password },
|
|
93
72
|
|
|
94
|
-
# The keystore used to present a certificate to the server.
|
|
95
|
-
# It can be either .jks or .p12
|
|
96
|
-
:keystore => { :validate => :path, :deprecated => "Set 'ssl_keystore_path' instead." },
|
|
97
|
-
|
|
98
73
|
# The keystore used to present a certificate to the server.
|
|
99
74
|
# It can be either .jks or .p12
|
|
100
75
|
:ssl_keystore_path => { :validate => :path },
|
|
@@ -102,9 +77,6 @@ module LogStash; module PluginMixins; module ElasticSearch
|
|
|
102
77
|
# The format of the keystore file. It must be either jks or pkcs12
|
|
103
78
|
:ssl_keystore_type => { :validate => %w[pkcs12 jks] },
|
|
104
79
|
|
|
105
|
-
# Set the keystore password
|
|
106
|
-
:keystore_password => { :validate => :password, :deprecated => "Set 'ssl_keystore_password' instead." },
|
|
107
|
-
|
|
108
80
|
# Set the keystore password
|
|
109
81
|
:ssl_keystore_password => { :validate => :password },
|
|
110
82
|
|
|
@@ -230,7 +202,17 @@ module LogStash; module PluginMixins; module ElasticSearch
|
|
|
230
202
|
:dlq_custom_codes => { :validate => :number, :list => true, :default => [] },
|
|
231
203
|
|
|
232
204
|
# if enabled, failed index name interpolation events go into dead letter queue.
|
|
233
|
-
: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." }
|
|
234
216
|
}.freeze
|
|
235
217
|
|
|
236
218
|
def self.included(base)
|
|
@@ -244,3 +226,4 @@ module LogStash; module PluginMixins; module ElasticSearch
|
|
|
244
226
|
end
|
|
245
227
|
end
|
|
246
228
|
end; end; end
|
|
229
|
+
|
|
@@ -241,6 +241,7 @@ module LogStash; module PluginMixins; module ElasticSearch
|
|
|
241
241
|
@dlq_writer.write(event, "#{detailed_message}")
|
|
242
242
|
else
|
|
243
243
|
log_level = dig_value(response, 'index', 'error', 'type') == 'invalid_index_name_exception' ? :error : :warn
|
|
244
|
+
|
|
244
245
|
@logger.public_send(log_level, message, status: status, action: action_params, response: response)
|
|
245
246
|
end
|
|
246
247
|
end
|
|
@@ -272,7 +273,6 @@ module LogStash; module PluginMixins; module ElasticSearch
|
|
|
272
273
|
end
|
|
273
274
|
|
|
274
275
|
actions_to_retry = []
|
|
275
|
-
dlq_routed_stats = {}
|
|
276
276
|
responses.each_with_index do |response,idx|
|
|
277
277
|
action_type, action_props = response.first
|
|
278
278
|
|
|
@@ -294,11 +294,6 @@ module LogStash; module PluginMixins; module ElasticSearch
|
|
|
294
294
|
elsif @dlq_codes.include?(status)
|
|
295
295
|
handle_dlq_response("Could not index event to Elasticsearch.", action, status, response)
|
|
296
296
|
@document_level_metrics.increment(:dlq_routed)
|
|
297
|
-
if dlq_routed_stats.key?(status)
|
|
298
|
-
dlq_routed_stats[status][:count] += 1
|
|
299
|
-
else
|
|
300
|
-
dlq_routed_stats[status] = { :count => 1, :sample_event => { :action => action, :response => response } }
|
|
301
|
-
end
|
|
302
297
|
next
|
|
303
298
|
else
|
|
304
299
|
# only log what the user whitelisted
|
|
@@ -308,11 +303,6 @@ module LogStash; module PluginMixins; module ElasticSearch
|
|
|
308
303
|
end
|
|
309
304
|
end
|
|
310
305
|
|
|
311
|
-
if @dlq_writer && !dlq_routed_stats.empty?
|
|
312
|
-
total = dlq_routed_stats.values.sum { |entry| entry[:count] }
|
|
313
|
-
@logger.warn("Events could not be indexed and routing to DLQ", :count => total, :dlq_routed_stats => dlq_routed_stats)
|
|
314
|
-
end
|
|
315
|
-
|
|
316
306
|
actions_to_retry
|
|
317
307
|
end
|
|
318
308
|
|
|
@@ -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"
|
|
@@ -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", "
|
|
15
|
+
s.files = Dir["lib/**/*","spec/**/*","*.gemspec","*.md","CONTRIBUTORS","Gemfile","LICENSE","NOTICE.TXT", "vendor/jar-dependencies/**/*.jar", "vendor/jar-dependencies/**/*.rb", "VERSION", "docs/**/*"]
|
|
16
16
|
|
|
17
17
|
# Tests
|
|
18
18
|
s.test_files = s.files.grep(%r{^(test|spec|features)/})
|
data/spec/es_spec_helper.rb
CHANGED
|
@@ -1,18 +1,15 @@
|
|
|
1
1
|
require_relative './spec_helper'
|
|
2
2
|
|
|
3
3
|
require 'elasticsearch'
|
|
4
|
+
require_relative "support/elasticsearch/api/actions/delete_ilm_policy"
|
|
5
|
+
require_relative "support/elasticsearch/api/actions/get_alias"
|
|
6
|
+
require_relative "support/elasticsearch/api/actions/put_alias"
|
|
7
|
+
require_relative "support/elasticsearch/api/actions/get_ilm_policy"
|
|
8
|
+
require_relative "support/elasticsearch/api/actions/put_ilm_policy"
|
|
4
9
|
|
|
5
10
|
require 'json'
|
|
6
11
|
require 'cabin'
|
|
7
12
|
|
|
8
|
-
# remove this condition and support package once plugin starts consuming elasticsearch-ruby v8 client
|
|
9
|
-
# in elasticsearch-ruby v7, ILM APIs were in a separate xpack gem, now directly available
|
|
10
|
-
unless elastic_ruby_v8_client_available?
|
|
11
|
-
require_relative "support/elasticsearch/api/actions/delete_ilm_policy"
|
|
12
|
-
require_relative "support/elasticsearch/api/actions/get_ilm_policy"
|
|
13
|
-
require_relative "support/elasticsearch/api/actions/put_ilm_policy"
|
|
14
|
-
end
|
|
15
|
-
|
|
16
13
|
module ESHelper
|
|
17
14
|
def get_host_port
|
|
18
15
|
if ENV["INTEGRATION"] == "true"
|
|
@@ -23,12 +20,8 @@ module ESHelper
|
|
|
23
20
|
end
|
|
24
21
|
|
|
25
22
|
def get_client
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
else
|
|
29
|
-
Elasticsearch::Client.new(:hosts => [get_host_port]).tap do |client|
|
|
30
|
-
allow(client).to receive(:verify_elasticsearch).and_return(true) # bypass client side version checking
|
|
31
|
-
end
|
|
23
|
+
Elasticsearch::Client.new(:hosts => [get_host_port]).tap do |client|
|
|
24
|
+
allow(client).to receive(:verify_elasticsearch).and_return(true) # bypass client side version checking
|
|
32
25
|
end
|
|
33
26
|
end
|
|
34
27
|
|
|
@@ -135,36 +128,31 @@ module ESHelper
|
|
|
135
128
|
end
|
|
136
129
|
|
|
137
130
|
def get_policy(client, policy_name)
|
|
138
|
-
|
|
139
|
-
client.index_lifecycle_management.get_lifecycle(policy: policy_name)
|
|
140
|
-
else
|
|
141
|
-
client.get_ilm_policy(name: policy_name)
|
|
142
|
-
end
|
|
131
|
+
client.get_ilm_policy(name: policy_name)
|
|
143
132
|
end
|
|
144
133
|
|
|
145
134
|
def put_policy(client, policy_name, policy)
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
135
|
+
client.put_ilm_policy({:name => policy_name, :body=> policy})
|
|
136
|
+
end
|
|
137
|
+
|
|
138
|
+
def put_alias(client, the_alias, index)
|
|
139
|
+
body = {
|
|
140
|
+
"aliases" => {
|
|
141
|
+
index => {
|
|
142
|
+
"is_write_index"=> true
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
client.put_alias({name: the_alias, body: body})
|
|
151
147
|
end
|
|
152
148
|
|
|
153
149
|
def clean_ilm(client)
|
|
154
|
-
if
|
|
155
|
-
client.index_lifecycle_management.get_lifecycle.each_key { |key| client.index_lifecycle_management.delete_lifecycle(policy: key) if key =~ /logstash-policy/ }
|
|
156
|
-
else
|
|
157
|
-
client.get_ilm_policy.each_key { |key| client.delete_ilm_policy(name: key) if key =~ /logstash-policy/ }
|
|
158
|
-
end
|
|
150
|
+
client.get_ilm_policy.each_key { |key| client.delete_ilm_policy(name: key) if key =~ /logstash-policy/ }
|
|
159
151
|
end
|
|
160
152
|
|
|
161
153
|
def supports_ilm?(client)
|
|
162
154
|
begin
|
|
163
|
-
|
|
164
|
-
client.index_lifecycle_management.get_lifecycle
|
|
165
|
-
else
|
|
166
|
-
client.get_ilm_policy
|
|
167
|
-
end
|
|
155
|
+
client.get_ilm_policy
|
|
168
156
|
true
|
|
169
157
|
rescue
|
|
170
158
|
false
|
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
2024-06-25T21:50:58+01:00
|
|
@@ -1,32 +1,29 @@
|
|
|
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
|
-
93j8aMU2UQjYM8NJDE2aRculo9OEoqERYFM2m3nHvrtE7iZgddryLNH7ZmC1EquX
|
|
30
|
-
MhZJ26GuZ2U4b9dAX858WTv0q1EF5S8KObMlxMU7IDk+cWlSD+puWliwfUKoTR/4
|
|
31
|
-
JErSfjCSaRqh
|
|
2
|
+
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
|
|
32
29
|
-----END CERTIFICATE-----
|
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
8b23238088af65cbae6ee9c23821068d896ec1dad081e2a1035ff70866943247
|
|
@@ -3,7 +3,8 @@
|
|
|
3
3
|
set -e
|
|
4
4
|
cd "$(dirname "$0")"
|
|
5
5
|
|
|
6
|
-
openssl
|
|
6
|
+
openssl x509 -x509toreq -in ca.crt -signkey ca.key -out ca.csr
|
|
7
|
+
openssl x509 -req -days 365 -in ca.csr -set_serial 0x01 -signkey ca.key -out ca.crt && rm ca.csr
|
|
7
8
|
openssl x509 -in ca.crt -outform der | sha256sum | awk '{print $1}' > ca.der.sha256
|
|
8
9
|
|
|
9
10
|
openssl x509 -x509toreq -in test.crt -signkey test.key -out test.csr
|
|
@@ -12,4 +13,4 @@ openssl x509 -in test.crt -outform der | sha256sum | awk '{print $1}' > test.der
|
|
|
12
13
|
openssl pkcs12 -export -inkey test.key -in test.crt -passout "pass:1234567890" -out test.p12
|
|
13
14
|
|
|
14
15
|
# output ISO8601 timestamp to file
|
|
15
|
-
date -Iseconds > GENERATED_AT
|
|
16
|
+
date -Iseconds > GENERATED_AT
|
|
@@ -1,31 +1,30 @@
|
|
|
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
|
-
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
|
|
29
|
+
Zytzb+8iSw==
|
|
31
30
|
-----END CERTIFICATE-----
|
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
80329a197063dea8cf7905d10d221648bbdbc05b8fb1d4c2e384b831bc6590df
|
|
Binary file
|
|
@@ -36,9 +36,7 @@ end
|
|
|
36
36
|
{
|
|
37
37
|
"Content-Encoding" => "gzip",
|
|
38
38
|
"Content-Type" => "application/json",
|
|
39
|
-
'x-elastic-product-origin' => 'logstash-output-elasticsearch'
|
|
40
|
-
'X-Elastic-Event-Count' => anything,
|
|
41
|
-
'X-Elastic-Uncompressed-Request-Length' => anything,
|
|
39
|
+
'x-elastic-product-origin' => 'logstash-output-elasticsearch'
|
|
42
40
|
}
|
|
43
41
|
}
|
|
44
42
|
|
|
@@ -39,12 +39,12 @@ describe "Versioned delete", :integration => true do
|
|
|
39
39
|
it "should ignore non-monotonic external version updates" do
|
|
40
40
|
id = "ev2"
|
|
41
41
|
subject.multi_receive([LogStash::Event.new("my_id" => id, "my_action" => "index", "message" => "foo", "my_version" => 99)])
|
|
42
|
-
r = es.get(:index => 'logstash-delete', :id => id, :refresh => true)
|
|
42
|
+
r = es.get(:index => 'logstash-delete', :type => doc_type, :id => id, :refresh => true)
|
|
43
43
|
expect(r['_version']).to eq(99)
|
|
44
44
|
expect(r['_source']['message']).to eq('foo')
|
|
45
45
|
|
|
46
46
|
subject.multi_receive([LogStash::Event.new("my_id" => id, "my_action" => "delete", "message" => "foo", "my_version" => 98)])
|
|
47
|
-
r2 = es.get(:index => 'logstash-delete', :id => id, :refresh => true)
|
|
47
|
+
r2 = es.get(:index => 'logstash-delete', :type => doc_type, :id => id, :refresh => true)
|
|
48
48
|
expect(r2['_version']).to eq(99)
|
|
49
49
|
expect(r2['_source']['message']).to eq('foo')
|
|
50
50
|
end
|
|
@@ -52,12 +52,12 @@ describe "Versioned delete", :integration => true do
|
|
|
52
52
|
it "should commit monotonic external version updates" do
|
|
53
53
|
id = "ev3"
|
|
54
54
|
subject.multi_receive([LogStash::Event.new("my_id" => id, "my_action" => "index", "message" => "foo", "my_version" => 99)])
|
|
55
|
-
r = es.get(:index => 'logstash-delete', :id => id, :refresh => true)
|
|
55
|
+
r = es.get(:index => 'logstash-delete', :type => doc_type, :id => id, :refresh => true)
|
|
56
56
|
expect(r['_version']).to eq(99)
|
|
57
57
|
expect(r['_source']['message']).to eq('foo')
|
|
58
58
|
|
|
59
59
|
subject.multi_receive([LogStash::Event.new("my_id" => id, "my_action" => "delete", "message" => "foo", "my_version" => 100)])
|
|
60
|
-
expect { es.get(:index => 'logstash-delete', :id => id, :refresh => true) }.to raise_error(
|
|
60
|
+
expect { es.get(:index => 'logstash-delete', :type => doc_type, :id => id, :refresh => true) }.to raise_error(Elasticsearch::Transport::Transport::Errors::NotFound)
|
|
61
61
|
end
|
|
62
62
|
end
|
|
63
63
|
end
|
|
@@ -102,7 +102,7 @@ shared_examples_for 'an ILM disabled Logstash' do
|
|
|
102
102
|
it 'should not install the default policy' do
|
|
103
103
|
subject.register
|
|
104
104
|
sleep(1)
|
|
105
|
-
expect{get_policy(@es, LogStash::Outputs::ElasticSearch::DEFAULT_POLICY)}.to raise_error(
|
|
105
|
+
expect{get_policy(@es, LogStash::Outputs::ElasticSearch::DEFAULT_POLICY)}.to raise_error(Elasticsearch::Transport::Transport::Errors::NotFound)
|
|
106
106
|
end
|
|
107
107
|
|
|
108
108
|
it 'should not write the ILM settings into the template' do
|
|
@@ -282,12 +282,12 @@ describe 'Elasticsearch has index lifecycle management enabled', :integration =>
|
|
|
282
282
|
subject.register
|
|
283
283
|
sleep(1)
|
|
284
284
|
expect(@es.indices.exists_alias(name: "logstash")).to be_truthy
|
|
285
|
-
expect(@es.
|
|
285
|
+
expect(@es.get_alias(name: "logstash")).to include("logstash-000001")
|
|
286
286
|
end
|
|
287
287
|
end
|
|
288
288
|
|
|
289
289
|
it 'should install it if it is not present' do
|
|
290
|
-
expect{get_policy(@es, LogStash::Outputs::ElasticSearch::DEFAULT_POLICY)}.to raise_error(
|
|
290
|
+
expect{get_policy(@es, LogStash::Outputs::ElasticSearch::DEFAULT_POLICY)}.to raise_error(Elasticsearch::Transport::Transport::Errors::NotFound)
|
|
291
291
|
subject.register
|
|
292
292
|
sleep(1)
|
|
293
293
|
expect{get_policy(@es, LogStash::Outputs::ElasticSearch::DEFAULT_POLICY)}.not_to raise_error
|
|
@@ -298,7 +298,7 @@ describe 'Elasticsearch has index lifecycle management enabled', :integration =>
|
|
|
298
298
|
subject.register
|
|
299
299
|
sleep(1)
|
|
300
300
|
expect(@es.indices.exists_alias(name: "logstash")).to be_truthy
|
|
301
|
-
expect(@es.
|
|
301
|
+
expect(@es.get_alias(name: "logstash")).to include("logstash-#{todays_date}-000001")
|
|
302
302
|
end
|
|
303
303
|
|
|
304
304
|
it 'should ingest into a single index' do
|
|
@@ -340,14 +340,14 @@ describe 'Elasticsearch has index lifecycle management enabled', :integration =>
|
|
|
340
340
|
let (:policy) { small_max_doc_policy }
|
|
341
341
|
|
|
342
342
|
before do
|
|
343
|
-
expect{get_policy(@es, LogStash::Outputs::ElasticSearch::DEFAULT_POLICY)}.to raise_error(
|
|
343
|
+
expect{get_policy(@es, LogStash::Outputs::ElasticSearch::DEFAULT_POLICY)}.to raise_error(Elasticsearch::Transport::Transport::Errors::NotFound)
|
|
344
344
|
put_policy(@es,ilm_policy_name, policy)
|
|
345
345
|
end
|
|
346
346
|
|
|
347
347
|
it 'should not install the default policy if it is not used' do
|
|
348
348
|
subject.register
|
|
349
349
|
sleep(1)
|
|
350
|
-
expect{get_policy(@es, LogStash::Outputs::ElasticSearch::DEFAULT_POLICY)}.to raise_error(
|
|
350
|
+
expect{get_policy(@es, LogStash::Outputs::ElasticSearch::DEFAULT_POLICY)}.to raise_error(Elasticsearch::Transport::Transport::Errors::NotFound)
|
|
351
351
|
end
|
|
352
352
|
end
|
|
353
353
|
|
|
@@ -357,14 +357,14 @@ describe 'Elasticsearch has index lifecycle management enabled', :integration =>
|
|
|
357
357
|
let (:policy) { max_age_policy("1d") }
|
|
358
358
|
|
|
359
359
|
before do
|
|
360
|
-
expect{get_policy(@es, LogStash::Outputs::ElasticSearch::DEFAULT_POLICY)}.to raise_error(
|
|
360
|
+
expect{get_policy(@es, LogStash::Outputs::ElasticSearch::DEFAULT_POLICY)}.to raise_error(Elasticsearch::Transport::Transport::Errors::NotFound)
|
|
361
361
|
put_policy(@es,ilm_policy_name, policy)
|
|
362
362
|
end
|
|
363
363
|
|
|
364
364
|
it 'should not install the default policy if it is not used' do
|
|
365
365
|
subject.register
|
|
366
366
|
sleep(1)
|
|
367
|
-
expect{get_policy(@es, LogStash::Outputs::ElasticSearch::DEFAULT_POLICY)}.to raise_error(
|
|
367
|
+
expect{get_policy(@es, LogStash::Outputs::ElasticSearch::DEFAULT_POLICY)}.to raise_error(Elasticsearch::Transport::Transport::Errors::NotFound)
|
|
368
368
|
end
|
|
369
369
|
end
|
|
370
370
|
|
|
@@ -374,7 +374,7 @@ describe 'Elasticsearch has index lifecycle management enabled', :integration =>
|
|
|
374
374
|
subject.register
|
|
375
375
|
sleep(1)
|
|
376
376
|
expect(@es.indices.exists_alias(name: expected_index)).to be_truthy
|
|
377
|
-
expect(@es.
|
|
377
|
+
expect(@es.get_alias(name: expected_index)).to include("#{expected_index}-#{todays_date}-000001")
|
|
378
378
|
end
|
|
379
379
|
|
|
380
380
|
it 'should write the ILM settings into the template' do
|
|
@@ -443,18 +443,17 @@ describe 'Elasticsearch has index lifecycle management enabled', :integration =>
|
|
|
443
443
|
subject.register
|
|
444
444
|
sleep(1)
|
|
445
445
|
expect(@es.indices.exists_alias(name: ilm_rollover_alias)).to be_truthy
|
|
446
|
-
expect(@es.
|
|
446
|
+
expect(@es.get_alias(name: ilm_rollover_alias)).to include("#{ilm_rollover_alias}-#{todays_date}-000001")
|
|
447
447
|
end
|
|
448
448
|
|
|
449
449
|
context 'when the custom rollover alias already exists' do
|
|
450
450
|
it 'should ignore the already exists error' do
|
|
451
451
|
expect(@es.indices.exists_alias(name: ilm_rollover_alias)).to be_falsey
|
|
452
|
-
@es
|
|
453
|
-
@es.indices.put_alias(name: ilm_rollover_alias, index: "#{ilm_rollover_alias}-#{todays_date}-000001")
|
|
452
|
+
put_alias(@es, "#{ilm_rollover_alias}-#{todays_date}-000001", ilm_rollover_alias)
|
|
454
453
|
expect(@es.indices.exists_alias(name: ilm_rollover_alias)).to be_truthy
|
|
455
454
|
subject.register
|
|
456
455
|
sleep(1)
|
|
457
|
-
expect(@es.
|
|
456
|
+
expect(@es.get_alias(name: ilm_rollover_alias)).to include("#{ilm_rollover_alias}-#{todays_date}-000001")
|
|
458
457
|
end
|
|
459
458
|
|
|
460
459
|
end
|
|
@@ -533,8 +532,3 @@ describe 'Elasticsearch has index lifecycle management enabled', :integration =>
|
|
|
533
532
|
end
|
|
534
533
|
|
|
535
534
|
end
|
|
536
|
-
|
|
537
|
-
def get_expected_error_class
|
|
538
|
-
return Elastic::Transport::Transport::Errors::NotFound if elastic_ruby_v8_client_available?
|
|
539
|
-
Elasticsearch::Transport::Transport::Errors::NotFound
|
|
540
|
-
end
|
|
@@ -215,22 +215,12 @@ describe "indexing" do
|
|
|
215
215
|
|
|
216
216
|
it "sets the correct content-type header" do
|
|
217
217
|
expected_manticore_opts = {
|
|
218
|
-
:headers => {
|
|
219
|
-
"Content-Type" => "application/json",
|
|
220
|
-
'x-elastic-product-origin' => 'logstash-output-elasticsearch',
|
|
221
|
-
'X-Elastic-Event-Count' => anything,
|
|
222
|
-
'X-Elastic-Uncompressed-Request-Length' => anything
|
|
223
|
-
},
|
|
218
|
+
:headers => {"Content-Type" => "application/json", 'x-elastic-product-origin' => 'logstash-output-elasticsearch'},
|
|
224
219
|
:body => anything
|
|
225
220
|
}
|
|
226
221
|
if secure
|
|
227
222
|
expected_manticore_opts = {
|
|
228
|
-
:headers => {
|
|
229
|
-
"Content-Type" => "application/json",
|
|
230
|
-
'x-elastic-product-origin' => 'logstash-output-elasticsearch',
|
|
231
|
-
'X-Elastic-Event-Count' => anything,
|
|
232
|
-
'X-Elastic-Uncompressed-Request-Length' => anything
|
|
233
|
-
},
|
|
223
|
+
:headers => {"Content-Type" => "application/json", 'x-elastic-product-origin' => 'logstash-output-elasticsearch'},
|
|
234
224
|
:body => anything,
|
|
235
225
|
:auth => {
|
|
236
226
|
:user => user,
|
|
@@ -36,11 +36,11 @@ describe "Versioned indexing", :integration => true do
|
|
|
36
36
|
|
|
37
37
|
it "should default to ES version" do
|
|
38
38
|
subject.multi_receive([LogStash::Event.new("my_id" => "123", "message" => "foo")])
|
|
39
|
-
r = es.get(:index => 'logstash-index', :id =>
|
|
39
|
+
r = es.get(:index => 'logstash-index', :type => doc_type, :id => "123", :refresh => true)
|
|
40
40
|
expect(r["_version"]).to eq(1)
|
|
41
41
|
expect(r["_source"]["message"]).to eq('foo')
|
|
42
42
|
subject.multi_receive([LogStash::Event.new("my_id" => "123", "message" => "foobar")])
|
|
43
|
-
r2 = es.get(:index => 'logstash-index', :id =>
|
|
43
|
+
r2 = es.get(:index => 'logstash-index', :type => doc_type, :id => "123", :refresh => true)
|
|
44
44
|
expect(r2["_version"]).to eq(2)
|
|
45
45
|
expect(r2["_source"]["message"]).to eq('foobar')
|
|
46
46
|
end
|
|
@@ -63,7 +63,7 @@ describe "Versioned indexing", :integration => true do
|
|
|
63
63
|
it "should respect the external version" do
|
|
64
64
|
id = "ev1"
|
|
65
65
|
subject.multi_receive([LogStash::Event.new("my_id" => id, "my_version" => "99", "message" => "foo")])
|
|
66
|
-
r = es.get(:index => 'logstash-index', :id => id, :refresh => true)
|
|
66
|
+
r = es.get(:index => 'logstash-index', :type => doc_type, :id => id, :refresh => true)
|
|
67
67
|
expect(r["_version"]).to eq(99)
|
|
68
68
|
expect(r["_source"]["message"]).to eq('foo')
|
|
69
69
|
end
|
|
@@ -71,12 +71,12 @@ describe "Versioned indexing", :integration => true do
|
|
|
71
71
|
it "should ignore non-monotonic external version updates" do
|
|
72
72
|
id = "ev2"
|
|
73
73
|
subject.multi_receive([LogStash::Event.new("my_id" => id, "my_version" => "99", "message" => "foo")])
|
|
74
|
-
r = es.get(:index => 'logstash-index', :id => id, :refresh => true)
|
|
74
|
+
r = es.get(:index => 'logstash-index', :type => doc_type, :id => id, :refresh => true)
|
|
75
75
|
expect(r["_version"]).to eq(99)
|
|
76
76
|
expect(r["_source"]["message"]).to eq('foo')
|
|
77
77
|
|
|
78
78
|
subject.multi_receive([LogStash::Event.new("my_id" => id, "my_version" => "98", "message" => "foo")])
|
|
79
|
-
r2 = es.get(:index => 'logstash-index', :id => id, :refresh => true)
|
|
79
|
+
r2 = es.get(:index => 'logstash-index', :type => doc_type, :id => id, :refresh => true)
|
|
80
80
|
expect(r2["_version"]).to eq(99)
|
|
81
81
|
expect(r2["_source"]["message"]).to eq('foo')
|
|
82
82
|
end
|
|
@@ -84,12 +84,12 @@ describe "Versioned indexing", :integration => true do
|
|
|
84
84
|
it "should commit monotonic external version updates" do
|
|
85
85
|
id = "ev3"
|
|
86
86
|
subject.multi_receive([LogStash::Event.new("my_id" => id, "my_version" => "99", "message" => "foo")])
|
|
87
|
-
r = es.get(:index => 'logstash-index', :id => id, :refresh => true)
|
|
87
|
+
r = es.get(:index => 'logstash-index', :type => doc_type, :id => id, :refresh => true)
|
|
88
88
|
expect(r["_version"]).to eq(99)
|
|
89
89
|
expect(r["_source"]["message"]).to eq('foo')
|
|
90
90
|
|
|
91
91
|
subject.multi_receive([LogStash::Event.new("my_id" => id, "my_version" => "100", "message" => "foo")])
|
|
92
|
-
r2 = es.get(:index => 'logstash-index', :id => id, :refresh => true)
|
|
92
|
+
r2 = es.get(:index => 'logstash-index', :type => doc_type, :id => id, :refresh => true)
|
|
93
93
|
expect(r2["_version"]).to eq(100)
|
|
94
94
|
expect(r2["_source"]["message"]).to eq('foo')
|
|
95
95
|
end
|