logstash-integration-jdbc 5.1.1 → 5.1.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +15 -0
- data/NOTICE.TXT +5 -0
- data/docs/filter-jdbc_static.asciidoc +10 -1
- data/lib/logstash/filters/jdbc/lookup.rb +5 -2
- data/lib/logstash/inputs/jdbc.rb +10 -13
- data/lib/logstash/plugin_mixins/jdbc/jdbc.rb +1 -2
- data/lib/logstash/plugin_mixins/jdbc_streaming/parameter_handler.rb +1 -1
- data/lib/logstash/plugin_mixins/jdbc_streaming/statement_handler.rb +5 -2
- data/logstash-integration-jdbc.gemspec +3 -2
- data/spec/filters/jdbc/lookup_spec.rb +35 -0
- data/spec/inputs/jdbc_spec.rb +1 -1
- data/spec/plugin_mixins/jdbc_streaming/parameter_handler_spec.rb +23 -0
- metadata +22 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 71904a199b39255cbefb08b1c43a08e0507df8af19be11ae3b57b69519d337f5
|
4
|
+
data.tar.gz: 17e4ef460ad1e9d51d0ecada1d94b6d41951a65e65f316e287ad58331f5a4211
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 503737f45cfcba0724d533664b14bda25bf9abd0c5de549973857855f00722a666022693d1d22e517b735e6171a06d20cd31e11492c7d60321b3456627eab05f
|
7
|
+
data.tar.gz: 78d36bd182723abdc72ebf7809f76b86111d3e8bc4111bb08c5a8363fe88e8fe38c4ab563f1408f60c7b0b491f3802c69a31259e4035e8bebcd4bbfc5e8636d9
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,18 @@
|
|
1
|
+
## 5.1.5
|
2
|
+
- Refined ECS support [#82](https://github.com/logstash-plugins/logstash-integration-jdbc/pull/82)
|
3
|
+
- Uses shared `target` guidance when ECS compatibility is enabled
|
4
|
+
- Uses Logstash's EventFactory instead of instantiating events directly
|
5
|
+
|
6
|
+
## 5.1.4
|
7
|
+
- [DOC] Update filter-jdbc_static doc to describe ECS compatibility [#79](https://github.com/logstash-plugins/logstash-integration-jdbc/pull/79)
|
8
|
+
|
9
|
+
## 5.1.3
|
10
|
+
- Improve robustness when handling errors from `sequel` library in jdbc static and streaming
|
11
|
+
filters [#78](https://github.com/logstash-plugins/logstash-integration-jdbc/pull/78)
|
12
|
+
|
13
|
+
## 5.1.2
|
14
|
+
- Fix `prepared_statement_bind_values` in streaming filter to resolve nested event's fields [#76](https://github.com/logstash-plugins/logstash-integration-jdbc/pull/76)
|
15
|
+
|
1
16
|
## 5.1.1
|
2
17
|
- [DOC] Changed docs to indicate that logstash-jdbc-static requires local_table [#56](https://github.com/logstash-plugins/logstash-integration-jdbc/pull/56). Fixes [#55](https://github.com/logstash-plugins/logstash-integration-jdbc/issues/55).
|
3
18
|
|
data/NOTICE.TXT
ADDED
@@ -264,8 +264,17 @@ order is in place.
|
|
264
264
|
===============================
|
265
265
|
|
266
266
|
|
267
|
+
[id="plugins-{type}s-{plugin}-ecs"]
|
268
|
+
==== Compatibility with the Elastic Common Schema (ECS)
|
269
|
+
|
270
|
+
This plugin is compatible with the {ecs-ref}[Elastic Common Schema (ECS)].
|
271
|
+
It behaves the same regardless of ECS compatibility, except giving a warning when ECS is enabled and `target` isn't set.
|
272
|
+
|
273
|
+
TIP: Set the `target` option to avoid potential schema conflicts.
|
274
|
+
|
275
|
+
|
267
276
|
[id="plugins-{type}s-{plugin}-options"]
|
268
|
-
==== Jdbc_static
|
277
|
+
==== Jdbc_static filter configuration options
|
269
278
|
|
270
279
|
This plugin supports the following configuration options plus the <<plugins-{type}s-{plugin}-common-options>> described later.
|
271
280
|
|
@@ -162,8 +162,11 @@ module LogStash module Filters module Jdbc
|
|
162
162
|
begin
|
163
163
|
logger.debug? && logger.debug("Executing Jdbc query", :lookup_id => @id, :statement => query, :parameters => params)
|
164
164
|
proc.call(local, query, params, result)
|
165
|
-
rescue
|
166
|
-
#
|
165
|
+
rescue => e
|
166
|
+
# In theory all exceptions in Sequel should be wrapped in Sequel::Error
|
167
|
+
# However, there are cases where other errors can occur - a `SQLTransactionRollbackException`
|
168
|
+
# may be thrown during `prepareStatement`. Let's handle these cases here, where we can tag and warn
|
169
|
+
# appropriately rather than bubble up and potentially crash the plugin.
|
167
170
|
result.failed!
|
168
171
|
logger.warn? && logger.warn("Exception when executing Jdbc query", :lookup_id => @id, :exception => e.message, :backtrace => e.backtrace.take(8))
|
169
172
|
end
|
data/lib/logstash/inputs/jdbc.rb
CHANGED
@@ -4,8 +4,11 @@ require "logstash/namespace"
|
|
4
4
|
require "logstash/plugin_mixins/jdbc/common"
|
5
5
|
require "logstash/plugin_mixins/jdbc/jdbc"
|
6
6
|
require "logstash/plugin_mixins/ecs_compatibility_support"
|
7
|
+
require "logstash/plugin_mixins/ecs_compatibility_support/target_check"
|
7
8
|
require "logstash/plugin_mixins/validator_support/field_reference_validation_adapter"
|
8
9
|
|
10
|
+
require "logstash/plugin_mixins/event_support/event_factory_adapter"
|
11
|
+
|
9
12
|
# this require_relative returns early unless the JRuby version is between 9.2.0.0 and 9.2.8.0
|
10
13
|
require_relative "tzinfo_jruby_patch"
|
11
14
|
|
@@ -131,8 +134,14 @@ require_relative "tzinfo_jruby_patch"
|
|
131
134
|
module LogStash module Inputs class Jdbc < LogStash::Inputs::Base
|
132
135
|
include LogStash::PluginMixins::Jdbc::Common
|
133
136
|
include LogStash::PluginMixins::Jdbc::Jdbc
|
137
|
+
|
134
138
|
# adds ecs_compatibility config which could be :disabled or :v1
|
135
139
|
include LogStash::PluginMixins::ECSCompatibilitySupport(:disabled,:v1,:v8 => :v1)
|
140
|
+
include LogStash::PluginMixins::ECSCompatibilitySupport::TargetCheck
|
141
|
+
|
142
|
+
# adds `event_factory` and `targeted_event_factory
|
143
|
+
include LogStash::PluginMixins::EventSupport::EventFactoryAdapter
|
144
|
+
|
136
145
|
# adds :field_reference validator adapter
|
137
146
|
extend LogStash::PluginMixins::ValidatorSupport::FieldReferenceValidationAdapter
|
138
147
|
|
@@ -270,13 +279,6 @@ module LogStash module Inputs class Jdbc < LogStash::Inputs::Base
|
|
270
279
|
converters[encoding] = converter
|
271
280
|
end
|
272
281
|
end
|
273
|
-
|
274
|
-
# target must be populated if ecs_compatibility is not :disabled
|
275
|
-
if @target.nil? && ecs_compatibility != :disabled
|
276
|
-
logger.info('ECS compatibility is enabled but no ``target`` option was specified, it is recommended'\
|
277
|
-
' to set the option to avoid potential schema conflicts (if your data is ECS compliant or'\
|
278
|
-
' non-conflicting feel free to ignore this message)')
|
279
|
-
end
|
280
282
|
end # def register
|
281
283
|
|
282
284
|
# test injection points
|
@@ -335,12 +337,7 @@ module LogStash module Inputs class Jdbc < LogStash::Inputs::Base
|
|
335
337
|
## do the necessary conversions to string elements
|
336
338
|
row = Hash[row.map { |k, v| [k.to_s, convert(k, v)] }]
|
337
339
|
end
|
338
|
-
|
339
|
-
event = LogStash::Event.new
|
340
|
-
event.set(@target, row)
|
341
|
-
else
|
342
|
-
event = LogStash::Event.new(row)
|
343
|
-
end
|
340
|
+
event = targeted_event_factory.new_event(row)
|
344
341
|
decorate(event)
|
345
342
|
queue << event
|
346
343
|
end
|
@@ -119,8 +119,7 @@ module LogStash module PluginMixins module Jdbc
|
|
119
119
|
else
|
120
120
|
@logger.error("Failed to connect to database. #{@jdbc_pool_timeout} second timeout exceeded. Trying again.")
|
121
121
|
end
|
122
|
-
|
123
|
-
rescue ::Sequel::Error => e
|
122
|
+
rescue Java::JavaSql::SQLException, ::Sequel::Error => e
|
124
123
|
if retry_attempts <= 0
|
125
124
|
log_java_exception(e.cause)
|
126
125
|
@logger.error("Unable to connect to database. Tried #{@connection_retry_attempts} times", error_details(e, trace: true))
|
@@ -38,8 +38,11 @@ module LogStash module PluginMixins module JdbcStreaming
|
|
38
38
|
begin
|
39
39
|
logger.debug? && logger.debug("Executing JDBC query", :statement => statement, :parameters => params)
|
40
40
|
execute_extract_records(db, params, result)
|
41
|
-
rescue
|
42
|
-
#
|
41
|
+
rescue => e
|
42
|
+
# In theory all exceptions in Sequel should be wrapped in Sequel::Error
|
43
|
+
# However, there are cases where other errors can occur - a `SQLException`may be thrown
|
44
|
+
# during `prepareStatement`. Let's handle these cases here, where we can tag and warn
|
45
|
+
# appropriately rather than bubble up and potentially crash the plugin.
|
43
46
|
result.failed!
|
44
47
|
logger.warn? && logger.warn("Exception when executing JDBC query", :statement => statement, :parameters => params, :exception => e)
|
45
48
|
end
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Gem::Specification.new do |s|
|
2
2
|
s.name = 'logstash-integration-jdbc'
|
3
|
-
s.version = '5.1.
|
3
|
+
s.version = '5.1.5'
|
4
4
|
s.licenses = ['Apache License (2.0)']
|
5
5
|
s.summary = "Integration with JDBC - input and filter plugins"
|
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"
|
@@ -36,8 +36,9 @@ Gem::Specification.new do |s|
|
|
36
36
|
s.add_runtime_dependency 'tzinfo-data'
|
37
37
|
# 3.5 limitation is required for jdbc-static loading schedule
|
38
38
|
s.add_runtime_dependency 'rufus-scheduler', '< 3.5'
|
39
|
-
s.add_runtime_dependency 'logstash-mixin-ecs_compatibility_support', '~>1.
|
39
|
+
s.add_runtime_dependency 'logstash-mixin-ecs_compatibility_support', '~>1.3'
|
40
40
|
s.add_runtime_dependency "logstash-mixin-validator_support", '~> 1.0'
|
41
|
+
s.add_runtime_dependency "logstash-mixin-event_support", '~> 1.0'
|
41
42
|
|
42
43
|
s.add_development_dependency "childprocess"
|
43
44
|
s.add_development_dependency 'logstash-devutils'
|
@@ -249,6 +249,41 @@ module LogStash module Filters module Jdbc
|
|
249
249
|
end
|
250
250
|
end
|
251
251
|
|
252
|
+
describe "lookup operations when prepareStatement throws" do
|
253
|
+
let(:local_db) { double("local_db") }
|
254
|
+
let(:lookup_hash) do
|
255
|
+
{
|
256
|
+
"query" => "select * from servers WHERE ip LIKE ? AND os LIKE ?",
|
257
|
+
"prepared_parameters" => ["%%{[ip]}"],
|
258
|
+
"target" => "server",
|
259
|
+
"tag_on_failure" => ["_jdbcstaticfailure_server"]
|
260
|
+
}
|
261
|
+
end
|
262
|
+
let(:event) { LogStash::Event.new()}
|
263
|
+
let(:records) { [{"name" => "ldn-1-23", "rack" => "2:1:6"}] }
|
264
|
+
let(:prepared_statement) { double("prepared_statement")}
|
265
|
+
|
266
|
+
subject(:lookup) { described_class.new(lookup_hash, {}, "lookup-1") }
|
267
|
+
|
268
|
+
before(:each) do
|
269
|
+
allow(local_db).to receive(:prepare).once.and_return(prepared_statement)
|
270
|
+
allow(prepared_statement).to receive(:call).once.and_raise(Java::JavaSql::SQLTransactionRollbackException.new)
|
271
|
+
end
|
272
|
+
|
273
|
+
it "must not be valid" do
|
274
|
+
expect(subject.valid?).to be_falsey
|
275
|
+
end
|
276
|
+
|
277
|
+
it "should tag event as failed" do
|
278
|
+
event.set("ip", "20.20")
|
279
|
+
event.set("os", "MacOS")
|
280
|
+
subject.prepare(local_db)
|
281
|
+
subject.enhance(local_db, event)
|
282
|
+
expect(event.get("tags")).to eq(["_jdbcstaticfailure_server"])
|
283
|
+
expect(event.get("server")).to be_nil
|
284
|
+
end
|
285
|
+
end
|
286
|
+
|
252
287
|
describe "validation of target option" do
|
253
288
|
let(:lookup_hash) do
|
254
289
|
{
|
data/spec/inputs/jdbc_spec.rb
CHANGED
@@ -364,7 +364,7 @@ describe LogStash::Inputs::Jdbc do
|
|
364
364
|
end
|
365
365
|
|
366
366
|
it "should log a warn of missed target usage" do
|
367
|
-
expect(plugin.logger).to receive(:info).once.with(
|
367
|
+
expect(plugin.logger).to receive(:info).once.with(a_string_including("ECS compatibility is enabled").and(including("target")))
|
368
368
|
|
369
369
|
plugin.register
|
370
370
|
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
require "logstash/devutils/rspec/spec_helper"
|
3
|
+
require "logstash/plugin_mixins/jdbc_streaming/parameter_handler"
|
4
|
+
|
5
|
+
|
6
|
+
describe LogStash::PluginMixins::JdbcStreaming::ParameterHandler do
|
7
|
+
context "resolve field reference" do
|
8
|
+
let(:event) { ::LogStash::Event.new("field" => "field_value") }
|
9
|
+
|
10
|
+
it "should resolve root field" do
|
11
|
+
handler = LogStash::PluginMixins::JdbcStreaming::ParameterHandler.build_bind_value_handler "[field]"
|
12
|
+
handler.extract_from(event)
|
13
|
+
expect(handler.extract_from(event)).to eq "field_value"
|
14
|
+
end
|
15
|
+
|
16
|
+
it "should resolve nested field" do
|
17
|
+
event = ::LogStash::Event.from_json("{\"field\": {\"nested\": \"nested_field\"}}").first
|
18
|
+
handler = LogStash::PluginMixins::JdbcStreaming::ParameterHandler.build_bind_value_handler "[field][nested]"
|
19
|
+
handler.extract_from(event)
|
20
|
+
expect(handler.extract_from(event)).to eq "nested_field"
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: logstash-integration-jdbc
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 5.1.
|
4
|
+
version: 5.1.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Elastic
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-
|
11
|
+
date: 2021-08-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
requirement: !ruby/object:Gem::Requirement
|
@@ -147,7 +147,7 @@ dependencies:
|
|
147
147
|
requirements:
|
148
148
|
- - "~>"
|
149
149
|
- !ruby/object:Gem::Version
|
150
|
-
version: '1.
|
150
|
+
version: '1.3'
|
151
151
|
name: logstash-mixin-ecs_compatibility_support
|
152
152
|
prerelease: false
|
153
153
|
type: :runtime
|
@@ -155,7 +155,7 @@ dependencies:
|
|
155
155
|
requirements:
|
156
156
|
- - "~>"
|
157
157
|
- !ruby/object:Gem::Version
|
158
|
-
version: '1.
|
158
|
+
version: '1.3'
|
159
159
|
- !ruby/object:Gem::Dependency
|
160
160
|
requirement: !ruby/object:Gem::Requirement
|
161
161
|
requirements:
|
@@ -170,6 +170,20 @@ dependencies:
|
|
170
170
|
- - "~>"
|
171
171
|
- !ruby/object:Gem::Version
|
172
172
|
version: '1.0'
|
173
|
+
- !ruby/object:Gem::Dependency
|
174
|
+
requirement: !ruby/object:Gem::Requirement
|
175
|
+
requirements:
|
176
|
+
- - "~>"
|
177
|
+
- !ruby/object:Gem::Version
|
178
|
+
version: '1.0'
|
179
|
+
name: logstash-mixin-event_support
|
180
|
+
prerelease: false
|
181
|
+
type: :runtime
|
182
|
+
version_requirements: !ruby/object:Gem::Requirement
|
183
|
+
requirements:
|
184
|
+
- - "~>"
|
185
|
+
- !ruby/object:Gem::Version
|
186
|
+
version: '1.0'
|
173
187
|
- !ruby/object:Gem::Dependency
|
174
188
|
requirement: !ruby/object:Gem::Requirement
|
175
189
|
requirements:
|
@@ -238,6 +252,7 @@ files:
|
|
238
252
|
- CONTRIBUTORS
|
239
253
|
- Gemfile
|
240
254
|
- LICENSE
|
255
|
+
- NOTICE.TXT
|
241
256
|
- README.md
|
242
257
|
- docs/filter-jdbc_static.asciidoc
|
243
258
|
- docs/filter-jdbc_streaming.asciidoc
|
@@ -292,6 +307,7 @@ files:
|
|
292
307
|
- spec/helpers/derbyrun.jar
|
293
308
|
- spec/inputs/integration/integ_spec.rb
|
294
309
|
- spec/inputs/jdbc_spec.rb
|
310
|
+
- spec/plugin_mixins/jdbc_streaming/parameter_handler_spec.rb
|
295
311
|
- vendor/jar-dependencies/org/apache/derby/derby/10.14.1.0/derby-10.14.1.0.jar
|
296
312
|
- vendor/jar-dependencies/org/apache/derby/derbyclient/10.14.1.0/derbyclient-10.14.1.0.jar
|
297
313
|
homepage: http://www.elastic.co/guide/en/logstash/current/index.html
|
@@ -317,8 +333,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
317
333
|
- !ruby/object:Gem::Version
|
318
334
|
version: '0'
|
319
335
|
requirements: []
|
320
|
-
|
321
|
-
rubygems_version: 2.6.13
|
336
|
+
rubygems_version: 3.1.6
|
322
337
|
signing_key:
|
323
338
|
specification_version: 4
|
324
339
|
summary: Integration with JDBC - input and filter plugins
|
@@ -344,3 +359,4 @@ test_files:
|
|
344
359
|
- spec/helpers/derbyrun.jar
|
345
360
|
- spec/inputs/integration/integ_spec.rb
|
346
361
|
- spec/inputs/jdbc_spec.rb
|
362
|
+
- spec/plugin_mixins/jdbc_streaming/parameter_handler_spec.rb
|