logstash-output-elasticsearch 10.1.0-java → 10.2.0-java

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 854ab6224b74941c16ddf992e2414c86b7a037de2adbd29974e89498211a42cf
4
- data.tar.gz: c3a717d5cace3a2387eb319761eb8a8a6a9144d2c1bd69b35e52ae1db1cadca0
3
+ metadata.gz: 4aea0c5256b6eb8efe5917a3955f95598da3914c132a0337548842db070c1626
4
+ data.tar.gz: 06e5230273a4b72801071ff959f2ae8ca9c3e85b5b92a3a27b15a61cdf3b59c4
5
5
  SHA512:
6
- metadata.gz: 6b0bd02cd4f576ade481cf60bc55b42ece3002ab53ab667f8c0a023c43ecfbb43f318ac4d2e712cb0d351fd181406aea3d6050d0401b9e22e4d092dae64f4be7
7
- data.tar.gz: 1660fa95e938d2aa424d4328daf38cd42f17f58c01aa39cc5bf95c6fd1199ce3a8f4c38c40be811ff0b4f293f45dd5bef293300cddd97e7526b5f327209069a1
6
+ metadata.gz: 287fb5f27a83288a49ab66680b419e64acd2ddf78d64f6cb0bbbf80ff8a616ac906eaaca28946445fe11736c99ce05c7197cdfe4dbe6624b791d04b6beeb12cb
7
+ data.tar.gz: 2e2c3814a30de542ae1ff56fdf40aa78720f8e0c4fd0d4af2d0fabdb7d807ae72edfbf7ffe30457ff1279fa5941e9e8280cbacc533d2928c0caa36010b57905e
data/CHANGELOG.md CHANGED
@@ -1,3 +1,8 @@
1
+ ## 10.2.0
2
+ - Deprecation: Added warning about connecting a default Distribution of Logstash with an OSS version of ES [#875](https://github.com/logstash-plugins/logstash-output-elasticsearch/pull/875)
3
+ - Added template for connecting to ES 8.x [#871](https://github.com/logstash-plugins/logstash-output-elasticsearch/pull/871)
4
+ - Added sniffing support for ES 8.x [#878](https://github.com/logstash-plugins/logstash-output-elasticsearch/pull/878)
5
+
1
6
  ## 10.1.0
2
7
  - Added cluster id tracking through the plugin metadata registry [#857](https://github.com/logstash-plugins/logstash-output-elasticsearch/pull/857)
3
8
 
data/docs/index.asciidoc CHANGED
@@ -248,7 +248,7 @@ The Elasticsearch action to perform. Valid actions are:
248
248
  - delete: deletes a document by id (An id is required for this action)
249
249
  - create: indexes a document, fails if a document by that id already exists in the index.
250
250
  - update: updates a document by id. Update has a special case where you can upsert -- update a
251
- document if not already present. See the `upsert` option. NOTE: This does not work and is not supported
251
+ document if not already present. See the `doc_as_upsert` option. NOTE: This does not work and is not supported
252
252
  in Elasticsearch 1.x. Please upgrade to ES 2.x or greater to use this feature with Logstash!
253
253
  - A sprintf style string to change the action based on the content of the event. The value `%{[foo]}`
254
254
  would use the foo field for the action
@@ -244,6 +244,10 @@ class LogStash::Outputs::ElasticSearch < LogStash::Outputs::Base
244
244
  @client.close if @client
245
245
  end
246
246
 
247
+ def self.oss?
248
+ LogStash::OSS
249
+ end
250
+
247
251
  @@plugins = Gem::Specification.find_all{|spec| spec.name =~ /logstash-output-elasticsearch-/ }
248
252
 
249
253
  @@plugins.each do |plugin|
@@ -0,0 +1,44 @@
1
+ {
2
+ "index_patterns" : "logstash-*",
3
+ "version" : 80001,
4
+ "settings" : {
5
+ "index.refresh_interval" : "5s",
6
+ "number_of_shards": 1
7
+ },
8
+ "mappings" : {
9
+ "dynamic_templates" : [ {
10
+ "message_field" : {
11
+ "path_match" : "message",
12
+ "match_mapping_type" : "string",
13
+ "mapping" : {
14
+ "type" : "text",
15
+ "norms" : false
16
+ }
17
+ }
18
+ }, {
19
+ "string_fields" : {
20
+ "match" : "*",
21
+ "match_mapping_type" : "string",
22
+ "mapping" : {
23
+ "type" : "text", "norms" : false,
24
+ "fields" : {
25
+ "keyword" : { "type": "keyword", "ignore_above": 256 }
26
+ }
27
+ }
28
+ }
29
+ } ],
30
+ "properties" : {
31
+ "@timestamp": { "type": "date"},
32
+ "@version": { "type": "keyword"},
33
+ "geoip" : {
34
+ "dynamic": true,
35
+ "properties" : {
36
+ "ip": { "type": "ip" },
37
+ "location" : { "type" : "geo_point" },
38
+ "latitude" : { "type" : "half_float" },
39
+ "longitude" : { "type" : "half_float" }
40
+ }
41
+ }
42
+ }
43
+ }
44
+ }
@@ -31,6 +31,7 @@ module LogStash; module Outputs; class ElasticSearch; class HttpClient;
31
31
  attr_reader :logger, :adapter, :sniffing, :sniffer_delay, :resurrect_delay, :healthcheck_path, :sniffing_path, :bulk_path
32
32
 
33
33
  ROOT_URI_PATH = '/'.freeze
34
+ LICENSE_PATH = '/_license'.freeze
34
35
 
35
36
  DEFAULT_OPTIONS = {
36
37
  :healthcheck_path => ROOT_URI_PATH,
@@ -66,13 +67,21 @@ module LogStash; module Outputs; class ElasticSearch; class HttpClient;
66
67
  @url_info = {}
67
68
  @stopping = false
68
69
  end
70
+
71
+ def oss?
72
+ LogStash::Outputs::ElasticSearch.oss?
73
+ end
69
74
 
70
75
  def start
71
- update_urls(@initial_urls)
76
+ update_initial_urls
72
77
  start_resurrectionist
73
78
  start_sniffer if @sniffing
74
79
  end
75
80
 
81
+ def update_initial_urls
82
+ update_urls(@initial_urls)
83
+ end
84
+
76
85
  def close
77
86
  @state_mutex.synchronize { @stopping = true }
78
87
 
@@ -101,7 +110,7 @@ module LogStash; module Outputs; class ElasticSearch; class HttpClient;
101
110
  end
102
111
 
103
112
  def alive_urls_count
104
- @state_mutex.synchronize { @url_info.values.select {|v| !v[:state] == :alive }.count }
113
+ @state_mutex.synchronize { @url_info.values.select {|v| v[:state] == :alive }.count }
105
114
  end
106
115
 
107
116
  def url_info
@@ -170,7 +179,7 @@ module LogStash; module Outputs; class ElasticSearch; class HttpClient;
170
179
  return nil
171
180
  else
172
181
  case major_version(url_meta[:version])
173
- when 5, 6, 7
182
+ when 5, 6, 7, 8
174
183
  sniff_5x_and_above(nodes)
175
184
  when 2, 1
176
185
  sniff_2x_1x(nodes)
@@ -236,13 +245,29 @@ module LogStash; module Outputs; class ElasticSearch; class HttpClient;
236
245
  end
237
246
  end
238
247
 
248
+ def get_license(url)
249
+ response = perform_request_to_url(url, :get, LICENSE_PATH)
250
+ LogStash::Json.load(response.body)
251
+ end
252
+
253
+ def valid_es_license?(url)
254
+ license = get_license(url)
255
+ license.fetch("license", {}).fetch("status", nil) == "active"
256
+ rescue => e
257
+ false
258
+ end
259
+
260
+ def health_check_request(url)
261
+ perform_request_to_url(url, :head, @healthcheck_path)
262
+ end
263
+
239
264
  def healthcheck!
240
265
  # Try to keep locking granularity low such that we don't affect IO...
241
266
  @state_mutex.synchronize { @url_info.select {|url,meta| meta[:state] != :alive } }.each do |url,meta|
242
267
  begin
243
268
  logger.debug("Running health check to see if an Elasticsearch connection is working",
244
269
  :healthcheck_url => url, :path => @healthcheck_path)
245
- response = perform_request_to_url(url, :head, @healthcheck_path)
270
+ health_check_request(url)
246
271
  # If no exception was raised it must have succeeded!
247
272
  logger.warn("Restored connection to ES instance", :url => url.sanitized.to_s)
248
273
  # We reconnected to this node, check its ES version
@@ -254,10 +279,22 @@ module LogStash; module Outputs; class ElasticSearch; class HttpClient;
254
279
  @logger.info("ES Output version determined", :es_version => major)
255
280
  set_new_major_version(major)
256
281
  elsif major > @maximum_seen_major_version
257
- @logger.warn("Detected a node with a higher major version than previously observed. This could be the result of an elasticsearch cluster upgrade.", :previous_major => @maximum_seen_major_version, :new_major => major, :node_url => url)
282
+ @logger.warn("Detected a node with a higher major version than previously observed. This could be the result of an elasticsearch cluster upgrade.", :previous_major => @maximum_seen_major_version, :new_major => major, :node_url => url.sanitized.to_s)
258
283
  set_new_major_version(major)
259
284
  end
260
- meta[:state] = :alive
285
+ if oss? || valid_es_license?(url)
286
+ meta[:state] = :alive
287
+ else
288
+ # As this version is to be shipped with Logstash 7.x we won't mark the connection as unlicensed
289
+ #
290
+ # logger.error("Cannot connect to the Elasticsearch cluster configured in the Elasticsearch output. Logstash requires the default distribution of Elasticsearch. Please update to the default distribution of Elasticsearch for full access to all free features, or switch to the OSS distribution of Logstash.", :url => url.sanitized.to_s)
291
+ # meta[:state] = :unlicensed
292
+ #
293
+ # Instead we'll log a deprecation warning and mark it as alive:
294
+ #
295
+ log_license_deprecation_warn(url)
296
+ meta[:state] = :alive
297
+ end
261
298
  end
262
299
  rescue HostUnreachableError, BadResponseCodeError => e
263
300
  logger.warn("Attempted to resurrect connection to dead ES instance, but got an error.", url: url.sanitized.to_s, error_type: e.class, error: e.message)
@@ -269,6 +306,10 @@ module LogStash; module Outputs; class ElasticSearch; class HttpClient;
269
306
  @resurrectionist.join if @resurrectionist
270
307
  end
271
308
 
309
+ def log_license_deprecation_warn(url)
310
+ logger.warn("DEPRECATION WARNING: Connecting to an OSS distribution of Elasticsearch using the default distribution of Logstash will stop working in Logstash 8.0.0. Please upgrade to the default distribution of Elasticsearch, or use the OSS distribution of Logstash", :url => url.sanitized.to_s)
311
+ end
312
+
272
313
  def resurrectionist_alive?
273
314
  @resurrectionist ? @resurrectionist.alive? : nil
274
315
  end
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = 'logstash-output-elasticsearch'
3
- s.version = '10.1.0'
3
+ s.version = '10.2.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"
@@ -9,9 +9,17 @@ require_relative "support/elasticsearch/api/actions/put_ilm_policy"
9
9
 
10
10
  require 'json'
11
11
 
12
+ unless defined?(LogStash::OSS)
13
+ LogStash::OSS = ENV['DISTRIBUTION'] != "default"
14
+ end
15
+
12
16
  module ESHelper
13
17
  def get_host_port
14
- "127.0.0.1:9200"
18
+ if ENV["INTEGRATION"] == "true"
19
+ "elasticsearch:9200"
20
+ else
21
+ "localhost:9200"
22
+ end
15
23
  end
16
24
 
17
25
  def get_client
@@ -54,7 +62,7 @@ module ESHelper
54
62
  end
55
63
 
56
64
  def self.es_version
57
- RSpec.configuration.filter[:es_version] || ENV['ES_VERSION']
65
+ RSpec.configuration.filter[:es_version] || ENV['ES_VERSION'] || ENV['ELASTIC_STACK_VERSION']
58
66
  end
59
67
 
60
68
  RSpec::Matchers.define :have_hits do |expected|
@@ -76,9 +84,9 @@ module ESHelper
76
84
 
77
85
 
78
86
  def self.es_version_satisfies?(*requirement)
79
- es_version = RSpec.configuration.filter[:es_version] || ENV['ES_VERSION']
87
+ es_version = RSpec.configuration.filter[:es_version] || ENV['ES_VERSION'] || ENV['ELASTIC_STACK_VERSION']
80
88
  if es_version.nil?
81
- puts "Info: ES_VERSION environment or 'es_version' tag wasn't set. Returning false to all `es_version_satisfies?` call."
89
+ puts "Info: ES_VERSION, ELASTIC_STACK_VERSION or 'es_version' tag wasn't set. Returning false to all `es_version_satisfies?` call."
82
90
  return false
83
91
  end
84
92
  es_release_version = Gem::Version.new(es_version).release
@@ -1,22 +1,32 @@
1
1
  -----BEGIN CERTIFICATE-----
2
- MIIDmzCCAoOgAwIBAgIUJ3zg8MPyVvlLtNfv27YwTmy8sKAwDQYJKoZIhvcNAQEL
3
- BQAwNDEyMDAGA1UEAxMpRWxhc3RpYyBDZXJ0aWZpY2F0ZSBUb29sIEF1dG9nZW5l
4
- cmF0ZWQgQ0EwHhcNMTcwNzExMjA0ODM3WhcNMjAwNzEwMjA0ODM3WjA0MTIwMAYD
5
- VQQDEylFbGFzdGljIENlcnRpZmljYXRlIFRvb2wgQXV0b2dlbmVyYXRlZCBDQTCC
6
- ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAIH11HENfB27hsxlPIIZJvBV
7
- gyDRo8T29HEm/mm9hlg4c76xsdXlPoKZ0ENzcEMg+AyKjQxD5cZIACvsd3lbJnca
8
- +8CUcfqKDu1rDq6T5YMX75Gw21ZeJoGy3voCXGvTIoH1aNdRt/8EcWq9P81Mew7A
9
- jh1qhv8WR8Ajxt29OSyWH8VC2WHrihkD/s+3eHCNNpW3CCFtA3uc3sbENVB04A7d
10
- 0HzZRD5EfZcZVlcfd5o4ZPuH5PnR4LkZAR2TEgQ8qpruF3m3YMmPvnHaRx5/Bivv
11
- 0IuBOAQhkL1w5MzSZVOg3N0u91Krss2tUGLf8c5qnxveqdSKShgVxwI/6P0CaccC
12
- AwEAAaOBpDCBoTAdBgNVHQ4EFgQUba74O4k4WAzgVH9WqCLvypyTj1swbwYDVR0j
13
- BGgwZoAUba74O4k4WAzgVH9WqCLvypyTj1uhOKQ2MDQxMjAwBgNVBAMTKUVsYXN0
14
- aWMgQ2VydGlmaWNhdGUgVG9vbCBBdXRvZ2VuZXJhdGVkIENBghQnfODww/JW+Uu0
15
- 1+/btjBObLywoDAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQAf
16
- jVC71jdUu649ZWketKEqlmAL5K4RmBghKS49Coso1eACngbzVfnh0vfKxF1giIvw
17
- 154ZmcAD0bmArO538j+uEvr9kj3ZX8qmvNLRNQ2IcUQaR7N+8Iu8WIqtTIfI07hp
18
- cXHv0jIcq7sFp4BpWDnWGlipFN+ldFRBvaUarrK1QcDAeWyPaUqryY7egecV9PpV
19
- Ebh28RblD5QlA9+sLc5u+zg1vlWg7fLsiGQqNR29dXWmavcamKfo5TOAuzXFlU78
20
- it8DhTCvTnmCIi0NIxJY9rHLHgz/3aDRsBDzCZMQFJ2KfssI6YHZ9LpZ+3iVObr6
21
- jGjKiXeVb9DcAnYR+Ihy
2
+ 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
31
+ nIg9fQPvVw+fIHACZQ==
22
32
  -----END CERTIFICATE-----
@@ -1,27 +1,51 @@
1
1
  -----BEGIN RSA PRIVATE KEY-----
2
- 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
- 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
- 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
- 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
- +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
- Uquyza1QYt/xzmqfG96p1IpKGBXHAj/o/QJpxwIDAQABAoIBADvKJGWqpYpsRvTs
8
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- qXu1VgTNc44g0D74yJbs853GWYg5AnV/sRCfgZECgYAklw6nX7E5hSlMea2YQ6ri
19
- Z+BXVwI1kZuEa2GbSGwWQoNEQVEYVGwCSGHv3OEo/Wo/GynwZ8t+ajvF6yNHLvy/
20
- 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
- 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
- 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
- 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
- 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
- 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
- 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
27
51
  -----END RSA PRIVATE KEY-----
@@ -1,21 +1,36 @@
1
1
  -----BEGIN CERTIFICATE-----
2
- MIIDjDCCAnSgAwIBAgIULhSohxna+aUn+a7UIQmNPLb11p8wDQYJKoZIhvcNAQEL
3
- BQAwNDEyMDAGA1UEAxMpRWxhc3RpYyBDZXJ0aWZpY2F0ZSBUb29sIEF1dG9nZW5l
4
- cmF0ZWQgQ0EwHhcNMTcwNzExMjA0OTEwWhcNMjAwNzEwMjA0OTEwWjAPMQ0wCwYD
5
- VQQDEwR0ZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAnNOuaiad
6
- YCotO/bSTVJwlR4f1Kdt3gMZeD1i3QKX8QSXACpVeNaTn/6Vflbf/jlWk8i6Mbsv
7
- HeZgdxMe3/CMs8U9fRx2tt4hF5tVivnkRfXbvC5lhYsjg4k2DorkigP/4D4XDonv
8
- pFwB7qKeChnYbe9ADh8DMymKj2Z0LXxSEjuP5VH1O+5jLyddL4gRpCRa5G79vq9m
9
- 7rdnq7HTfZ6m3t15AIY4XWZ0VW2epMsflQcbNChcYNMMDhBZzPkhRs7KEEHUV9ye
10
- sGTxGRUBLWNd7rNLY0T0biiUlaWfgbGfUmDKZKofowoo+M9w5rREEnXqrGkc3QmT
11
- zx9XRHqfeEC/ZQIDAQABo4G6MIG3MB0GA1UdDgQWBBS++BZR6DYwjv7jlkS2mVdJ
12
- NtpILDBvBgNVHSMEaDBmgBRtrvg7iThYDOBUf1aoIu/KnJOPW6E4pDYwNDEyMDAG
13
- A1UEAxMpRWxhc3RpYyBDZXJ0aWZpY2F0ZSBUb29sIEF1dG9nZW5lcmF0ZWQgQ0GC
14
- FCd84PDD8lb5S7TX79u2ME5svLCgMBoGA1UdEQQTMBGCCWxvY2FsaG9zdIcEfwAA
15
- ATAJBgNVHRMEAjAAMA0GCSqGSIb3DQEBCwUAA4IBAQBugjYG5LK91A1awDYTsrrT
16
- Bmi8TiOeHa69Qia4SrFpwua648TpC5esaIC4uAJlTVP5MwcMB/5+lZOcUjVgFIss
17
- Z4mdRgExXMAoDiI5OOqXcCiGYWv/jGJzKj4EZ65UZADVrGDFmZPW99g4XDInc27W
18
- lmZETkjriueku7gH4eEOdfSX9jv6M+mYhRJlllWlzk77zzENtFn4uCQmd9bzFDQM
19
- hOxi+tif9SrGEAoJoSP204vunLIDNve2KycVXuQkhZO+Q5JYmN38DqFrjC/U5JbC
20
- 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
35
+ FKbYFqzgpWksa+zZ2RYYplUAxq0wYw==
21
36
  -----END CERTIFICATE-----
@@ -1,27 +1,51 @@
1
1
  -----BEGIN RSA PRIVATE KEY-----
2
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- t0UmGT937g1DuqwYBl6eLB+FgOZhNjONtF7llHDYWtx0r9XaKplGtmMeW1rDRLp4
13
- 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
- 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
- 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
- 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
- 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
- yb3+7kT68iE3LHWWW0If0ENb3CX6/OyAiJRG7kMCgYEA0//0+B9+ZcRcb+cc3IIX
19
- XFb25gD/Um67zDScG/JF+oLMVDL7e5M2a0Zr45aC5DeF7zkwUgrp4Cy88XWXPWUT
20
- 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
- /k72LVjQ6611EzUjriDvZRkCgYAmtAPHJw59Yqb1GaB6B9ZuVedLFCyRKJDd4ABQ
22
- auQno3DpcNtFDGL/iEi5pwWR/lJVI9AavJ9ETOhmlsFQ1svksF0U0cavq2blXLT+
23
- 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
- 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
- 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
- 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
27
51
  -----END RSA PRIVATE KEY-----
@@ -33,6 +33,7 @@ if ESHelper.es_version_satisfies?(">= 5")
33
33
 
34
34
  before do
35
35
  subject.register
36
+ subject.multi_receive([])
36
37
  end
37
38
 
38
39
  shared_examples "an indexer" do
@@ -58,11 +59,6 @@ if ESHelper.es_version_satisfies?(">= 5")
58
59
  end
59
60
 
60
61
  it "sets the correct content-encoding header and body is compressed" do
61
- # Allow xpack endpoint to be checked\
62
- allow(subject.client.pool.adapter.client).to receive(:send).at_least(:once).with(anything, /_template/, anything).and_call_original
63
- allow(subject.client.pool.adapter.client).to receive(:send).with(anything, /_xpack/, anything).and_call_original
64
- allow(subject.client.pool.adapter.client).to receive(:send).with(anything, /logstash/, anything).and_call_original
65
- allow(subject.client.pool.adapter.client).to receive(:send).with(anything, /_ilm/, anything).and_call_original
66
62
  expect(subject.client.pool.adapter.client).to receive(:send).
67
63
  with(anything, anything, {:headers=>{"Content-Encoding"=>"gzip", "Content-Type"=>"application/json"}, :body => a_valid_gzip_encoded_string}).
68
64
  and_call_original
@@ -63,6 +63,7 @@ describe "indexing" do
63
63
 
64
64
  before do
65
65
  subject.register
66
+ subject.multi_receive([])
66
67
  end
67
68
 
68
69
  shared_examples "an indexer" do |secure|
@@ -98,14 +99,6 @@ describe "indexing" do
98
99
  :eager => true
99
100
  }}
100
101
  end
101
- # Allow template to be checked for existence/installed
102
- allow(subject.client.pool.adapter.client).to receive(:send).at_least(:once).with(anything, /_template/, anything).and_call_original
103
- # Allow xpack endpoint to be checked\
104
- allow(subject.client.pool.adapter.client).to receive(:send).with(anything, /_xpack/, anything).and_call_original
105
- # Allow ilm policy to be checked for existence/installed
106
- allow(subject.client.pool.adapter.client).to receive(:send).with(anything, /_ilm/, anything).and_call_original
107
- # Allow write alias to be checked for existence/installed
108
- allow(subject.client.pool.adapter.client).to receive(:send).with(anything, /logstash/, anything).and_call_original
109
102
  expect(subject.client.pool.adapter.client).to receive(:send).
110
103
  with(anything, anything, expected_manticore_opts).at_least(:once).
111
104
  and_call_original
@@ -138,10 +131,10 @@ describe "indexing" do
138
131
  let(:user) { "simpleuser" }
139
132
  let(:password) { "abc123" }
140
133
  let(:cacert) { "spec/fixtures/test_certs/test.crt" }
141
- let(:es_url) {"https://localhost:9200"}
134
+ let(:es_url) {"https://elasticsearch:9200"}
142
135
  let(:config) do
143
136
  {
144
- "hosts" => ["localhost:9200"],
137
+ "hosts" => ["elasticsearch:9200"],
145
138
  "user" => user,
146
139
  "password" => password,
147
140
  "ssl" => true,
@@ -173,7 +166,7 @@ describe "indexing" do
173
166
  describe "with a user/password requiring escaping in the URL" do
174
167
  let(:config) do
175
168
  {
176
- "hosts" => ["https://#{CGI.escape(user)}:#{CGI.escape(password)}@localhost:9200"],
169
+ "hosts" => ["https://#{CGI.escape(user)}:#{CGI.escape(password)}@elasticsearch:9200"],
177
170
  "ssl" => true,
178
171
  "cacert" => "spec/fixtures/test_certs/test.crt",
179
172
  "index" => index
@@ -2,10 +2,14 @@ require "logstash/devutils/rspec/spec_helper"
2
2
  require_relative "../../../spec/es_spec_helper"
3
3
  require "logstash/outputs/elasticsearch/http_client"
4
4
  require "json"
5
+ require "socket"
5
6
 
6
7
  describe "pool sniffer", :integration => true do
7
8
  let(:logger) { Cabin::Channel.get }
8
9
  let(:adapter) { LogStash::Outputs::ElasticSearch::HttpClient::ManticoreAdapter.new(logger) }
10
+ let(:es_host) { get_host_port.split(":").first }
11
+ let(:es_port) { get_host_port.split(":").last }
12
+ let(:es_ip) { IPSocket.getaddress(es_host) }
9
13
  let(:initial_urls) { [::LogStash::Util::SafeURI.new("http://#{get_host_port}")] }
10
14
  let(:options) do
11
15
  {
@@ -36,7 +40,7 @@ describe "pool sniffer", :integration => true do
36
40
  # We do a more thorough check on these versions because we can more reliably guess the ip
37
41
  uris = subject.check_sniff
38
42
 
39
- expect(uris).to include(::LogStash::Util::SafeURI.new("//#{get_host_port}"))
43
+ expect(uris).to include(::LogStash::Util::SafeURI.new("//#{es_ip}:#{es_port}"))
40
44
  else
41
45
  # ES 1.x (and ES 7.x) returned the public hostname by default. This is hard to approximate
42
46
  # so for ES1.x and 7.x we don't check the *exact* hostname
@@ -8,12 +8,15 @@ describe LogStash::Outputs::ElasticSearch::HttpClient::Pool do
8
8
  let(:initial_urls) { [::LogStash::Util::SafeURI.new("http://localhost:9200")] }
9
9
  let(:options) { {:resurrect_delay => 2, :url_normalizer => proc {|u| u}} } # Shorten the delay a bit to speed up tests
10
10
  let(:es_node_versions) { [ "0.0.0" ] }
11
+ let(:oss) { true }
12
+ let(:valid_license) { true }
11
13
 
12
14
  subject { described_class.new(logger, adapter, initial_urls, options) }
13
15
 
14
16
  let(:manticore_double) { double("manticore a") }
15
17
  before(:each) do
16
18
 
19
+ allow(::LogStash::Outputs::ElasticSearch).to receive(:oss?).and_return(oss)
17
20
  response_double = double("manticore response").as_null_object
18
21
  # Allow healtchecks
19
22
  allow(manticore_double).to receive(:head).with(any_args).and_return(response_double)
@@ -23,6 +26,8 @@ describe LogStash::Outputs::ElasticSearch::HttpClient::Pool do
23
26
  allow(::Manticore::Client).to receive(:new).and_return(manticore_double)
24
27
 
25
28
  allow(subject).to receive(:get_es_version).with(any_args).and_return(*es_node_versions)
29
+ allow(subject).to receive(:oss?).and_return(oss)
30
+ allow(subject).to receive(:valid_es_license?).and_return(valid_license)
26
31
  end
27
32
 
28
33
  after do
@@ -235,4 +240,35 @@ describe LogStash::Outputs::ElasticSearch::HttpClient::Pool do
235
240
  end
236
241
  end
237
242
  end
243
+
244
+ describe "license checking" do
245
+ before(:each) do
246
+ allow(subject).to receive(:health_check_request)
247
+ end
248
+ context "when using default logstash distribution" do
249
+ let(:oss) { false }
250
+ context "if ES doesn't return a valid license" do
251
+ let(:valid_license) { false }
252
+ it "marks the url as active" do
253
+ subject.update_initial_urls
254
+ expect(subject.alive_urls_count).to eq(1)
255
+ end
256
+ it "logs a warning" do
257
+ expect(subject).to receive(:log_license_deprecation_warn).once
258
+ subject.update_initial_urls
259
+ end
260
+ end
261
+ context "if ES returns a valid license" do
262
+ let(:valid_license) { true }
263
+ it "marks the url as active" do
264
+ subject.update_initial_urls
265
+ expect(subject.alive_urls_count).to eq(1)
266
+ end
267
+ it "does not log a warning" do
268
+ expect(subject).to_not receive(:log_license_deprecation_warn)
269
+ subject.update_initial_urls
270
+ end
271
+ end
272
+ end
273
+ end
238
274
  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: 10.1.0
4
+ version: 10.2.0
5
5
  platform: java
6
6
  authors:
7
7
  - Elastic
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-05-06 00:00:00.000000000 Z
11
+ date: 2019-10-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  requirement: !ruby/object:Gem::Requirement
@@ -163,6 +163,7 @@ files:
163
163
  - lib/logstash/outputs/elasticsearch/elasticsearch-template-es5x.json
164
164
  - lib/logstash/outputs/elasticsearch/elasticsearch-template-es6x.json
165
165
  - lib/logstash/outputs/elasticsearch/elasticsearch-template-es7x.json
166
+ - lib/logstash/outputs/elasticsearch/elasticsearch-template-es8x.json
166
167
  - lib/logstash/outputs/elasticsearch/http_client.rb
167
168
  - lib/logstash/outputs/elasticsearch/http_client/manticore_adapter.rb
168
169
  - lib/logstash/outputs/elasticsearch/http_client/pool.rb