logstash-output-elasticsearch 9.1.3-java → 9.1.4-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 +3 -0
- data/lib/logstash/outputs/elasticsearch/common.rb +17 -8
- data/logstash-output-elasticsearch.gemspec +1 -1
- data/spec/es_spec_helper.rb +10 -0
- data/spec/integration/outputs/index_spec.rb +1 -1
- data/spec/unit/outputs/elasticsearch_spec.rb +58 -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: a8917f99f05252cd3a9386839e0dbdbcc5196660620a60f15b3505979f76dcde
|
4
|
+
data.tar.gz: f0eff97eb0951baa55a73db99131784ee9ddfd6498eab5b6d0bbf616582e728c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1832b2292c90c7c63ac4390a615abbd4215351f5949ec33d1e9a51e450af9066a09294cdb89b9bb24a9eed77d9546860eb929c80d6c515acb507b7c6bbab4397
|
7
|
+
data.tar.gz: 6bee0365e4003c390e098901ae6ec0f62dec19123b7cdef184bed92eecb9c1d54cf5bfc0130a202f0f8cae72c5ae1fbb3eb89cfdd7731ebba0da7afc816eff50
|
data/CHANGELOG.md
CHANGED
@@ -213,14 +213,7 @@ module LogStash; module Outputs; class ElasticSearch;
|
|
213
213
|
@logger.warn "Failed action.", status: status, action: action, response: response if !failure_type_logging_whitelist.include?(failure["type"])
|
214
214
|
next
|
215
215
|
elsif DOC_DLQ_CODES.include?(status)
|
216
|
-
|
217
|
-
# To support bwc, we check if DLQ exists. otherwise we log and drop event (previous behavior)
|
218
|
-
if @dlq_writer
|
219
|
-
# TODO: Change this to send a map with { :status => status, :action => action } in the future
|
220
|
-
@dlq_writer.write(action_event, "Could not index event to Elasticsearch. status: #{status}, action: #{action}, response: #{response}")
|
221
|
-
else
|
222
|
-
@logger.warn "Could not index event to Elasticsearch.", status: status, action: action, response: response
|
223
|
-
end
|
216
|
+
handle_dlq_status("Could not index event to Elasticsearch.", action, status, response)
|
224
217
|
@document_level_metrics.increment(:non_retryable_failures)
|
225
218
|
next
|
226
219
|
else
|
@@ -234,6 +227,22 @@ module LogStash; module Outputs; class ElasticSearch;
|
|
234
227
|
actions_to_retry
|
235
228
|
end
|
236
229
|
|
230
|
+
def handle_dlq_status(message, action, status, response)
|
231
|
+
# To support bwc, we check if DLQ exists. otherwise we log and drop event (previous behavior)
|
232
|
+
if @dlq_writer
|
233
|
+
# TODO: Change this to send a map with { :status => status, :action => action } in the future
|
234
|
+
@dlq_writer.write(action[2], "#{message} status: #{status}, action: #{action}, response: #{response}")
|
235
|
+
else
|
236
|
+
error_type = response.fetch('index', {}).fetch('error', {})['type']
|
237
|
+
if 'invalid_index_name_exception' == error_type
|
238
|
+
level = :error
|
239
|
+
else
|
240
|
+
level = :warn
|
241
|
+
end
|
242
|
+
@logger.send level, message, status: status, action: action, response: response
|
243
|
+
end
|
244
|
+
end
|
245
|
+
|
237
246
|
# Determine the correct value for the 'type' field for the given event
|
238
247
|
DEFAULT_EVENT_TYPE_ES6="doc".freeze
|
239
248
|
DEFAULT_EVENT_TYPE_ES7="_doc".freeze
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Gem::Specification.new do |s|
|
2
2
|
s.name = 'logstash-output-elasticsearch'
|
3
|
-
s.version = '9.1.
|
3
|
+
s.version = '9.1.4'
|
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"
|
data/spec/es_spec_helper.rb
CHANGED
@@ -2,6 +2,12 @@ require "logstash/devutils/rspec/spec_helper"
|
|
2
2
|
require 'manticore'
|
3
3
|
require 'elasticsearch'
|
4
4
|
|
5
|
+
# by default exclude secure_integration tests unless requested
|
6
|
+
# normal integration specs are already excluded by devutils' spec helper
|
7
|
+
RSpec.configure do |config|
|
8
|
+
config.filter_run_excluding config.exclusion_filter.add(:secure_integration => true)
|
9
|
+
end
|
10
|
+
|
5
11
|
module ESHelper
|
6
12
|
def get_host_port
|
7
13
|
"127.0.0.1:9200"
|
@@ -17,6 +23,10 @@ module ESHelper
|
|
17
23
|
|
18
24
|
def self.es_version_satisfies?(*requirement)
|
19
25
|
es_version = RSpec.configuration.filter[:es_version] || ENV['ES_VERSION']
|
26
|
+
if es_version.nil?
|
27
|
+
puts "Info: ES_VERSION environment or 'es_version' tag wasn't set. Returning false to all `es_version_satisfies?` call."
|
28
|
+
return false
|
29
|
+
end
|
20
30
|
es_release_version = Gem::Version.new(es_version).release
|
21
31
|
Gem::Requirement.new(requirement).satisfied_by?(es_release_version)
|
22
32
|
end
|
@@ -129,7 +129,7 @@ describe "indexing" do
|
|
129
129
|
it_behaves_like("an indexer")
|
130
130
|
end
|
131
131
|
|
132
|
-
describe "a secured indexer", :
|
132
|
+
describe "a secured indexer", :secure_integration => true do
|
133
133
|
let(:user) { "simpleuser" }
|
134
134
|
let(:password) { "abc123" }
|
135
135
|
let(:cacert) { "spec/fixtures/test_certs/test.crt" }
|
@@ -17,7 +17,7 @@ describe LogStash::Outputs::ElasticSearch do
|
|
17
17
|
allow(subject.client.pool).to receive(:start_resurrectionist)
|
18
18
|
allow(subject.client.pool).to receive(:start_sniffer)
|
19
19
|
allow(subject.client.pool).to receive(:healthcheck!)
|
20
|
-
allow(subject.client).to receive(:maximum_seen_major_version).and_return(maximum_seen_major_version)
|
20
|
+
allow(subject.client).to receive(:maximum_seen_major_version).at_least(:once).and_return(maximum_seen_major_version)
|
21
21
|
subject.client.pool.adapter.manticore.respond_with(:body => "{}")
|
22
22
|
end
|
23
23
|
end
|
@@ -358,6 +358,7 @@ describe LogStash::Outputs::ElasticSearch do
|
|
358
358
|
let(:options) { super.merge("action" => "index") }
|
359
359
|
|
360
360
|
it "should not set the retry_on_conflict parameter when creating an event_action_tuple" do
|
361
|
+
allow(subject.client).to receive(:maximum_seen_major_version).and_return(maximum_seen_major_version)
|
361
362
|
action, params, event_data = subject.event_action_tuple(event)
|
362
363
|
expect(params).not_to include({:_retry_on_conflict => num_retries})
|
363
364
|
end
|
@@ -498,4 +499,60 @@ describe LogStash::Outputs::ElasticSearch do
|
|
498
499
|
end
|
499
500
|
end
|
500
501
|
end
|
502
|
+
|
503
|
+
context 'handling elasticsearch document-level status meant for the DLQ' do
|
504
|
+
let(:options) { { "manage_template" => false } }
|
505
|
+
let(:logger) { subject.instance_variable_get(:@logger) }
|
506
|
+
|
507
|
+
context 'when @dlq_writer is nil' do
|
508
|
+
before { subject.instance_variable_set '@dlq_writer', nil }
|
509
|
+
|
510
|
+
context 'resorting to previous behaviour of logging the error' do
|
511
|
+
context 'getting an invalid_index_name_exception' do
|
512
|
+
it 'should log at ERROR level' do
|
513
|
+
expect(logger).to receive(:error).with(/Could not index/, hash_including(:status, :action, :response))
|
514
|
+
mock_response = { 'index' => { 'error' => { 'type' => 'invalid_index_name_exception' } } }
|
515
|
+
subject.handle_dlq_status("Could not index event to Elasticsearch.",
|
516
|
+
[:action, :params, :event], :some_status, mock_response)
|
517
|
+
end
|
518
|
+
end
|
519
|
+
|
520
|
+
context 'when getting any other exception' do
|
521
|
+
it 'should log at WARN level' do
|
522
|
+
expect(logger).to receive(:warn).with(/Could not index/, hash_including(:status, :action, :response))
|
523
|
+
mock_response = { 'index' => { 'error' => { 'type' => 'illegal_argument_exception' } } }
|
524
|
+
subject.handle_dlq_status("Could not index event to Elasticsearch.",
|
525
|
+
[:action, :params, :event], :some_status, mock_response)
|
526
|
+
end
|
527
|
+
end
|
528
|
+
|
529
|
+
context 'when the response does not include [error]' do
|
530
|
+
it 'should not fail, but just log a warning' do
|
531
|
+
expect(logger).to receive(:warn).with(/Could not index/, hash_including(:status, :action, :response))
|
532
|
+
mock_response = { 'index' => {} }
|
533
|
+
expect do
|
534
|
+
subject.handle_dlq_status("Could not index event to Elasticsearch.",
|
535
|
+
[:action, :params, :event], :some_status, mock_response)
|
536
|
+
end.to_not raise_error
|
537
|
+
end
|
538
|
+
end
|
539
|
+
end
|
540
|
+
end
|
541
|
+
|
542
|
+
# DLQ writer always nil, no matter what I try here. So mocking it all the way
|
543
|
+
context 'when DLQ is enabled' do
|
544
|
+
let(:dlq_writer) { double('DLQ writer') }
|
545
|
+
before { subject.instance_variable_set('@dlq_writer', dlq_writer) }
|
546
|
+
|
547
|
+
# Note: This is not quite the desired behaviour.
|
548
|
+
# We should still log when sending to the DLQ.
|
549
|
+
# This shall be solved by another issue, however: logstash-output-elasticsearch#772
|
550
|
+
it 'should send the event to the DLQ instead, and not log' do
|
551
|
+
expect(dlq_writer).to receive(:write).with(:event, /Could not index/)
|
552
|
+
mock_response = { 'index' => { 'error' => { 'type' => 'illegal_argument_exception' } } }
|
553
|
+
subject.handle_dlq_status("Could not index event to Elasticsearch.",
|
554
|
+
[:action, :params, :event], :some_status, mock_response)
|
555
|
+
end
|
556
|
+
end
|
557
|
+
end
|
501
558
|
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: 9.1.
|
4
|
+
version: 9.1.4
|
5
5
|
platform: java
|
6
6
|
authors:
|
7
7
|
- Elastic
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-05-
|
11
|
+
date: 2018-05-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
requirement: !ruby/object:Gem::Requirement
|