logstash-filter-elasticsearch 3.17.0 → 3.18.0
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 +6 -0
- data/docs/index.asciidoc +50 -4
- data/lib/logstash/filters/elasticsearch/client.rb +16 -2
- data/lib/logstash/filters/elasticsearch.rb +32 -6
- data/logstash-filter-elasticsearch.gemspec +4 -2
- data/spec/filters/elasticsearch_spec.rb +70 -6
- data/spec/filters/integration/elasticsearch_spec.rb +9 -2
- metadata +36 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f93bd5f45ce46abe35c9fb54f03ce2f2241a6a7e5c530671a2954324f7965b18
|
4
|
+
data.tar.gz: 3bd3ae0babbeb6e46a1e6001888aa85c8fc47d7fb5c794a0063ad7688f3d3bd0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a59b18ddbb4706e50c94c7af206886b430063370376adee33b5795635d813142e662d55830b8401cd17b2e4ecfc69bace939f2ffd16daf2ecedfc4e1f16e5717
|
7
|
+
data.tar.gz: eb3c6a279badcc7b9fdaea8831cfeff276cde141773d28f9ead912606c816f30320e706efd34799060349bb09df09c8a4e5f05bf5f6ed2ccb9b0d5b19207eaff
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,9 @@
|
|
1
|
+
## 3.18.0
|
2
|
+
- Add `target` configuration option to store the result into it [#197](https://github.com/logstash-plugins/logstash-filter-elasticsearch/pull/197)
|
3
|
+
|
4
|
+
## 3.17.1
|
5
|
+
- Add elastic-transport client support used in elasticsearch-ruby 8.x [#193](https://github.com/logstash-plugins/logstash-filter-elasticsearch/pull/193)
|
6
|
+
|
1
7
|
## 3.17.0
|
2
8
|
- Added support for custom headers [#190](https://github.com/logstash-plugins/logstash-filter-elasticsearch/pull/190)
|
3
9
|
|
data/docs/index.asciidoc
CHANGED
@@ -160,6 +160,7 @@ This plugin supports the following configuration options plus the <<plugins-{typ
|
|
160
160
|
| <<plugins-{type}s-{plugin}-ssl_truststore_type>> |<<string,string>>|No
|
161
161
|
| <<plugins-{type}s-{plugin}-ssl_verification_mode>> |<<string,string>>, one of `["full", "none"]`|No
|
162
162
|
| <<plugins-{type}s-{plugin}-tag_on_failure>> |<<array,array>>|No
|
163
|
+
| <<plugins-{type}s-{plugin}-target>> |<<string,string>>|No
|
163
164
|
| <<plugins-{type}s-{plugin}-user>> |<<string,string>>|No
|
164
165
|
|=======================================================================
|
165
166
|
|
@@ -173,8 +174,11 @@ filter plugins.
|
|
173
174
|
|
174
175
|
* Value type is <<hash,hash>>
|
175
176
|
* Default value is `{}`
|
177
|
+
* Format: `"aggregation_name" => "[path][on][event]"`:
|
178
|
+
** `aggregation_name`: aggregation name in result from {es}
|
179
|
+
** `[path][on][event]`: path for where to place the value on the current event, using field-reference notation
|
176
180
|
|
177
|
-
|
181
|
+
A mapping of aggregations to copy into the <<plugins-{type}s-{plugin}-target>> of the current event.
|
178
182
|
|
179
183
|
Example:
|
180
184
|
[source,ruby]
|
@@ -244,8 +248,11 @@ These custom headers will override any headers previously set by the plugin such
|
|
244
248
|
|
245
249
|
* Value type is <<hash,hash>>
|
246
250
|
* Default value is `{}`
|
251
|
+
* Format: `"path.in.source" => "[path][on][event]"`:
|
252
|
+
** `path.in.source`: field path in document source of result from {es}, using dot-notation
|
253
|
+
** `[path][on][event]`: path for where to place the value on the current event, using field-reference notation
|
247
254
|
|
248
|
-
|
255
|
+
A mapping of docinfo (`_source`) fields to copy into the <<plugins-{type}s-{plugin}-target>> of the current event.
|
249
256
|
|
250
257
|
Example:
|
251
258
|
[source,ruby]
|
@@ -271,9 +278,11 @@ Whether results should be sorted or not
|
|
271
278
|
|
272
279
|
* Value type is <<array,array>>
|
273
280
|
* Default value is `{}`
|
281
|
+
* Format: `"path.in.result" => "[path][on][event]"`:
|
282
|
+
** `path.in.result`: field path in indexed result from {es}, using dot-notation
|
283
|
+
** `[path][on][event]`: path for where to place the value on the current event, using field-reference notation
|
274
284
|
|
275
|
-
|
276
|
-
new event, currently being processed.
|
285
|
+
A mapping of indexed fields to copy into the <<plugins-{type}s-{plugin}-target>> of the current event.
|
277
286
|
|
278
287
|
In the following example, the values of `@timestamp` and `event_id` on the event
|
279
288
|
found via elasticsearch are copied to the current event's
|
@@ -521,6 +530,43 @@ WARNING: Setting certificate verification to `none` disables many security benef
|
|
521
530
|
|
522
531
|
Tags the event on failure to look up previous log event information. This can be used in later analysis.
|
523
532
|
|
533
|
+
[id="plugins-{type}s-{plugin}-target"]
|
534
|
+
===== `target`
|
535
|
+
|
536
|
+
* Value type is <<string,string>>
|
537
|
+
* There is no default value for this setting.
|
538
|
+
|
539
|
+
Define the target field for placing the result data.
|
540
|
+
If this setting is omitted, the target will be the root (top level) of the event.
|
541
|
+
|
542
|
+
The destination fields specified in <<plugins-{type}s-{plugin}-fields>>, <<plugins-{type}s-{plugin}-aggregation_fields>>, and <<plugins-{type}s-{plugin}-docinfo_fields>> are relative to this target.
|
543
|
+
|
544
|
+
For example, if you want the data to be put in the `operation` field:
|
545
|
+
[source,ruby]
|
546
|
+
if [type] == "end" {
|
547
|
+
filter {
|
548
|
+
query => "type:start AND transaction:%{[transactionId]}"
|
549
|
+
elasticsearch {
|
550
|
+
target => "transaction"
|
551
|
+
fields => {
|
552
|
+
"@timestamp" => "started"
|
553
|
+
"transaction_id" => "id"
|
554
|
+
}
|
555
|
+
}
|
556
|
+
}
|
557
|
+
}
|
558
|
+
|
559
|
+
`fields` fields will be expanded into a data structure in the `target` field, overall shape looks like this:
|
560
|
+
[source,ruby]
|
561
|
+
{
|
562
|
+
"transaction" => {
|
563
|
+
"started" => "2025-04-29T12:01:46.263Z"
|
564
|
+
"id" => "1234567890"
|
565
|
+
}
|
566
|
+
}
|
567
|
+
|
568
|
+
NOTE: when writing to a field that already exists on the event, the previous value will be overwritten.
|
569
|
+
|
524
570
|
[id="plugins-{type}s-{plugin}-user"]
|
525
571
|
===== `user`
|
526
572
|
|
@@ -1,7 +1,6 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
require "elasticsearch"
|
3
3
|
require "base64"
|
4
|
-
require "elasticsearch/transport/transport/http/manticore"
|
5
4
|
|
6
5
|
|
7
6
|
module LogStash
|
@@ -9,6 +8,7 @@ module LogStash
|
|
9
8
|
class ElasticsearchClient
|
10
9
|
|
11
10
|
attr_reader :client
|
11
|
+
attr_reader :es_transport_client_type
|
12
12
|
|
13
13
|
BUILD_FLAVOR_SERVERLESS = 'serverless'.freeze
|
14
14
|
DEFAULT_EAV_HEADER = { "Elastic-Api-Version" => "2023-10-31" }.freeze
|
@@ -44,7 +44,7 @@ module LogStash
|
|
44
44
|
|
45
45
|
client_options = {
|
46
46
|
hosts: hosts,
|
47
|
-
transport_class:
|
47
|
+
transport_class: get_transport_client_class,
|
48
48
|
transport_options: transport_options,
|
49
49
|
ssl: ssl_options,
|
50
50
|
retry_on_failure: options[:retry_on_failure],
|
@@ -98,6 +98,20 @@ module LogStash
|
|
98
98
|
token = ::Base64.strict_encode64(api_key.value)
|
99
99
|
{ 'Authorization' => "ApiKey #{token}" }
|
100
100
|
end
|
101
|
+
|
102
|
+
def get_transport_client_class
|
103
|
+
# LS-core includes `elasticsearch` gem. The gem is composed of two separate gems: `elasticsearch-api` and `elasticsearch-transport`
|
104
|
+
# And now `elasticsearch-transport` is old, instead we have `elastic-transport`.
|
105
|
+
# LS-core updated `elasticsearch` > 8: https://github.com/elastic/logstash/pull/17161
|
106
|
+
# Following source bits are for the compatibility to support both `elasticsearch-transport` and `elastic-transport` gems
|
107
|
+
require "elasticsearch/transport/transport/http/manticore"
|
108
|
+
es_transport_client_type = "elasticsearch_transport"
|
109
|
+
::Elasticsearch::Transport::Transport::HTTP::Manticore
|
110
|
+
rescue ::LoadError
|
111
|
+
require "elastic/transport/transport/http/manticore"
|
112
|
+
es_transport_client_type = "elastic_transport"
|
113
|
+
::Elastic::Transport::Transport::HTTP::Manticore
|
114
|
+
end
|
101
115
|
end
|
102
116
|
end
|
103
117
|
end
|
@@ -2,14 +2,20 @@
|
|
2
2
|
require "logstash/filters/base"
|
3
3
|
require "logstash/namespace"
|
4
4
|
require "logstash/json"
|
5
|
+
require 'logstash/plugin_mixins/ecs_compatibility_support'
|
6
|
+
require 'logstash/plugin_mixins/ecs_compatibility_support/target_check'
|
5
7
|
require 'logstash/plugin_mixins/ca_trusted_fingerprint_support'
|
6
8
|
require "logstash/plugin_mixins/normalize_config_support"
|
9
|
+
require 'logstash/plugin_mixins/validator_support/field_reference_validation_adapter'
|
7
10
|
require "monitor"
|
8
11
|
|
9
12
|
require_relative "elasticsearch/client"
|
10
|
-
require_relative "elasticsearch/patches/_elasticsearch_transport_http_manticore"
|
11
13
|
|
12
14
|
class LogStash::Filters::Elasticsearch < LogStash::Filters::Base
|
15
|
+
|
16
|
+
include LogStash::PluginMixins::ECSCompatibilitySupport
|
17
|
+
include LogStash::PluginMixins::ECSCompatibilitySupport::TargetCheck
|
18
|
+
|
13
19
|
config_name "elasticsearch"
|
14
20
|
|
15
21
|
# List of elasticsearch hosts to use for querying.
|
@@ -132,6 +138,9 @@ class LogStash::Filters::Elasticsearch < LogStash::Filters::Base
|
|
132
138
|
# Tags the event on failure to look up geo information. This can be used in later analysis.
|
133
139
|
config :tag_on_failure, :validate => :array, :default => ["_elasticsearch_lookup_failure"]
|
134
140
|
|
141
|
+
# If set, the the result set will be nested under the target field
|
142
|
+
config :target, :validate => :field_reference
|
143
|
+
|
135
144
|
# How many times to retry on failure?
|
136
145
|
config :retry_on_failure, :validate => :number, :default => 0
|
137
146
|
|
@@ -183,6 +192,9 @@ class LogStash::Filters::Elasticsearch < LogStash::Filters::Base
|
|
183
192
|
|
184
193
|
test_connection!
|
185
194
|
setup_serverless
|
195
|
+
if get_client.es_transport_client_type == "elasticsearch_transport"
|
196
|
+
require_relative "elasticsearch/patches/_elasticsearch_transport_http_manticore"
|
197
|
+
end
|
186
198
|
end # def register
|
187
199
|
|
188
200
|
def filter(event)
|
@@ -212,17 +224,19 @@ class LogStash::Filters::Elasticsearch < LogStash::Filters::Base
|
|
212
224
|
matched = true
|
213
225
|
@fields.each do |old_key, new_key|
|
214
226
|
old_key_path = extract_path(old_key)
|
215
|
-
|
227
|
+
extracted_hit_values = resultsHits.map do |doc|
|
216
228
|
extract_value(doc["_source"], old_key_path)
|
217
229
|
end
|
218
|
-
|
230
|
+
value_to_set = extracted_hit_values.count > 1 ? extracted_hit_values : extracted_hit_values.first
|
231
|
+
set_to_event_target(event, new_key, value_to_set)
|
219
232
|
end
|
220
233
|
@docinfo_fields.each do |old_key, new_key|
|
221
234
|
old_key_path = extract_path(old_key)
|
222
|
-
|
235
|
+
extracted_docs_info = resultsHits.map do |doc|
|
223
236
|
extract_value(doc, old_key_path)
|
224
237
|
end
|
225
|
-
|
238
|
+
value_to_set = extracted_docs_info.count > 1 ? extracted_docs_info : extracted_docs_info.first
|
239
|
+
set_to_event_target(event, new_key, value_to_set)
|
226
240
|
end
|
227
241
|
end
|
228
242
|
|
@@ -230,7 +244,7 @@ class LogStash::Filters::Elasticsearch < LogStash::Filters::Base
|
|
230
244
|
if !resultsAggs.nil? && !resultsAggs.empty?
|
231
245
|
matched = true
|
232
246
|
@aggregation_fields.each do |agg_name, ls_field|
|
233
|
-
event
|
247
|
+
set_to_event_target(event, ls_field, resultsAggs[agg_name])
|
234
248
|
end
|
235
249
|
end
|
236
250
|
|
@@ -263,6 +277,18 @@ class LogStash::Filters::Elasticsearch < LogStash::Filters::Base
|
|
263
277
|
|
264
278
|
private
|
265
279
|
|
280
|
+
# if @target is defined, creates a nested structure to inject result into target field
|
281
|
+
# if not defined, directly sets to the top-level event field
|
282
|
+
# @param event [LogStash::Event]
|
283
|
+
# @param new_key [String] name of the field to set
|
284
|
+
# @param value_to_set [Array] values to set
|
285
|
+
# @return [void]
|
286
|
+
def set_to_event_target(event, new_key, value_to_set)
|
287
|
+
key_to_set = target ? "[#{target}][#{new_key}]" : new_key
|
288
|
+
|
289
|
+
event.set(key_to_set, value_to_set)
|
290
|
+
end
|
291
|
+
|
266
292
|
def client_options
|
267
293
|
@client_options ||= {
|
268
294
|
:user => @user,
|
@@ -1,7 +1,7 @@
|
|
1
1
|
Gem::Specification.new do |s|
|
2
2
|
|
3
3
|
s.name = 'logstash-filter-elasticsearch'
|
4
|
-
s.version = '3.
|
4
|
+
s.version = '3.18.0'
|
5
5
|
s.licenses = ['Apache License (2.0)']
|
6
6
|
s.summary = "Copies fields from previous log events in Elasticsearch to current events "
|
7
7
|
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"
|
@@ -21,10 +21,12 @@ Gem::Specification.new do |s|
|
|
21
21
|
|
22
22
|
# Gem dependencies
|
23
23
|
s.add_runtime_dependency "logstash-core-plugin-api", ">= 1.60", "<= 2.99"
|
24
|
-
s.add_runtime_dependency 'elasticsearch', ">= 7.14.9"
|
24
|
+
s.add_runtime_dependency 'elasticsearch', ">= 7.14.9", '< 9'
|
25
25
|
s.add_runtime_dependency 'manticore', ">= 0.7.1"
|
26
|
+
s.add_runtime_dependency 'logstash-mixin-ecs_compatibility_support', '~> 1.3'
|
26
27
|
s.add_runtime_dependency 'logstash-mixin-ca_trusted_fingerprint_support', '~> 1.0'
|
27
28
|
s.add_runtime_dependency 'logstash-mixin-normalize_config_support', '~>1.0'
|
29
|
+
s.add_runtime_dependency 'logstash-mixin-validator_support', '~> 1.0'
|
28
30
|
s.add_development_dependency 'cabin', ['~> 0.6']
|
29
31
|
s.add_development_dependency 'webrick'
|
30
32
|
s.add_development_dependency 'logstash-devutils'
|
@@ -60,9 +60,18 @@ describe LogStash::Filters::Elasticsearch do
|
|
60
60
|
allow(plugin).to receive(:get_client).and_return(filter_client)
|
61
61
|
allow(filter_client).to receive(:serverless?).and_return(true)
|
62
62
|
allow(filter_client).to receive(:client).and_return(es_client)
|
63
|
-
|
64
|
-
|
65
|
-
|
63
|
+
|
64
|
+
if elastic_ruby_v8_client_available?
|
65
|
+
allow(es_client).to receive(:info)
|
66
|
+
.with(a_hash_including(
|
67
|
+
:headers => LogStash::Filters::ElasticsearchClient::DEFAULT_EAV_HEADER))
|
68
|
+
.and_raise(Elastic::Transport::Transport::Errors::BadRequest.new)
|
69
|
+
else
|
70
|
+
allow(es_client).to receive(:info)
|
71
|
+
.with(a_hash_including(
|
72
|
+
:headers => LogStash::Filters::ElasticsearchClient::DEFAULT_EAV_HEADER))
|
73
|
+
.and_raise(Elasticsearch::Transport::Transport::Errors::BadRequest.new)
|
74
|
+
end
|
66
75
|
end
|
67
76
|
|
68
77
|
it "raises an exception when Elastic Api Version is not supported" do
|
@@ -103,6 +112,11 @@ describe LogStash::Filters::Elasticsearch do
|
|
103
112
|
|
104
113
|
before(:each) do
|
105
114
|
allow(LogStash::Filters::ElasticsearchClient).to receive(:new).and_return(client)
|
115
|
+
if elastic_ruby_v8_client_available?
|
116
|
+
allow(client).to receive(:es_transport_client_type).and_return('elastic_transport')
|
117
|
+
else
|
118
|
+
allow(client).to receive(:es_transport_client_type).and_return('elasticsearch_transport')
|
119
|
+
end
|
106
120
|
allow(client).to receive(:search).and_return(response)
|
107
121
|
allow(plugin).to receive(:test_connection!)
|
108
122
|
allow(plugin).to receive(:setup_serverless)
|
@@ -347,6 +361,11 @@ describe LogStash::Filters::Elasticsearch do
|
|
347
361
|
|
348
362
|
before do
|
349
363
|
allow(plugin).to receive(:get_client).and_return(client_double)
|
364
|
+
if elastic_ruby_v8_client_available?
|
365
|
+
allow(client_double).to receive(:es_transport_client_type).and_return('elastic_transport')
|
366
|
+
else
|
367
|
+
allow(client_double).to receive(:es_transport_client_type).and_return('elasticsearch_transport')
|
368
|
+
end
|
350
369
|
allow(client_double).to receive(:client).and_return(transport_double)
|
351
370
|
end
|
352
371
|
|
@@ -506,7 +525,12 @@ describe LogStash::Filters::Elasticsearch do
|
|
506
525
|
# this spec is a safeguard to trigger an assessment of thread-safety should
|
507
526
|
# we choose a different transport adapter in the future.
|
508
527
|
transport_class = extract_transport(client).options.fetch(:transport_class)
|
509
|
-
|
528
|
+
if elastic_ruby_v8_client_available?
|
529
|
+
allow(client).to receive(:es_transport_client_type).and_return("elastic_transport")
|
530
|
+
expect(transport_class).to equal ::Elastic::Transport::Transport::HTTP::Manticore
|
531
|
+
else
|
532
|
+
expect(transport_class).to equal ::Elasticsearch::Transport::Transport::HTTP::Manticore
|
533
|
+
end
|
510
534
|
end
|
511
535
|
|
512
536
|
it 'uses a client with sufficient connection pool size' do
|
@@ -821,6 +845,11 @@ describe LogStash::Filters::Elasticsearch do
|
|
821
845
|
|
822
846
|
before(:each) do
|
823
847
|
allow(LogStash::Filters::ElasticsearchClient).to receive(:new).and_return(client)
|
848
|
+
if elastic_ruby_v8_client_available?
|
849
|
+
allow(client).to receive(:es_transport_client_type).and_return('elastic_transport')
|
850
|
+
else
|
851
|
+
allow(client).to receive(:es_transport_client_type).and_return('elasticsearch_transport')
|
852
|
+
end
|
824
853
|
allow(plugin).to receive(:test_connection!)
|
825
854
|
allow(plugin).to receive(:setup_serverless)
|
826
855
|
plugin.register
|
@@ -835,11 +864,46 @@ describe LogStash::Filters::Elasticsearch do
|
|
835
864
|
end
|
836
865
|
end
|
837
866
|
|
838
|
-
#
|
839
|
-
|
867
|
+
describe "#set_to_event_target" do
|
868
|
+
|
869
|
+
context "when `@target` is nil, default behavior" do
|
870
|
+
let(:config) {{ }}
|
871
|
+
|
872
|
+
it "sets the value directly to the top-level event field" do
|
873
|
+
plugin.send(:set_to_event_target, event, "new_field", %w[value1 value2])
|
874
|
+
expect(event.get("new_field")).to eq(%w[value1 value2])
|
875
|
+
end
|
876
|
+
end
|
877
|
+
|
878
|
+
context "when @target is defined" do
|
879
|
+
let(:config) {{ "target" => "nested" }}
|
880
|
+
|
881
|
+
it "creates a nested structure under the target field" do
|
882
|
+
plugin.send(:set_to_event_target, event, "new_field", %w[value1 value2])
|
883
|
+
expect(event.get("nested")).to eq({ "new_field" => %w[value1 value2] })
|
884
|
+
end
|
885
|
+
|
886
|
+
it "overwrites existing target field with new data" do
|
887
|
+
event.set("nested", { "existing_field" => "existing_value", "new_field" => "value0" })
|
888
|
+
plugin.send(:set_to_event_target, event, "new_field", ["value1"])
|
889
|
+
expect(event.get("nested")).to eq({ "existing_field" => "existing_value", "new_field" => ["value1"] })
|
890
|
+
end
|
891
|
+
end
|
892
|
+
end
|
893
|
+
|
894
|
+
def extract_transport(client)
|
895
|
+
# on 7x: client.transport.transport
|
896
|
+
# on >=8.x: client.transport
|
840
897
|
client.transport.respond_to?(:transport) ? client.transport.transport : client.transport
|
841
898
|
end
|
842
899
|
|
900
|
+
def elastic_ruby_v8_client_available?
|
901
|
+
Elasticsearch::Transport
|
902
|
+
false
|
903
|
+
rescue NameError # NameError: uninitialized constant Elasticsearch::Transport if Elastic Ruby client is not available
|
904
|
+
true
|
905
|
+
end
|
906
|
+
|
843
907
|
class MockResponse
|
844
908
|
attr_reader :code, :headers
|
845
909
|
|
@@ -84,7 +84,9 @@ describe LogStash::Filters::Elasticsearch, :integration => true do
|
|
84
84
|
end
|
85
85
|
|
86
86
|
it "fails to register plugin" do
|
87
|
-
expect { plugin.register }.to raise_error
|
87
|
+
expect { plugin.register }.to raise_error elastic_ruby_v8_client_available? ?
|
88
|
+
Elastic::Transport::Transport::Errors::Unauthorized :
|
89
|
+
Elasticsearch::Transport::Transport::Errors::Unauthorized
|
88
90
|
end
|
89
91
|
|
90
92
|
end if ELASTIC_SECURITY_ENABLED
|
@@ -150,5 +152,10 @@ describe LogStash::Filters::Elasticsearch, :integration => true do
|
|
150
152
|
end
|
151
153
|
end
|
152
154
|
end
|
153
|
-
|
155
|
+
def elastic_ruby_v8_client_available?
|
156
|
+
Elasticsearch::Transport
|
157
|
+
false
|
158
|
+
rescue NameError # NameError: uninitialized constant Elasticsearch::Transport if Elastic Ruby client is not available
|
159
|
+
true
|
160
|
+
end
|
154
161
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: logstash-filter-elasticsearch
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.
|
4
|
+
version: 3.18.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Elastic
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2025-
|
11
|
+
date: 2025-05-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
requirement: !ruby/object:Gem::Requirement
|
@@ -36,6 +36,9 @@ dependencies:
|
|
36
36
|
- - ">="
|
37
37
|
- !ruby/object:Gem::Version
|
38
38
|
version: 7.14.9
|
39
|
+
- - "<"
|
40
|
+
- !ruby/object:Gem::Version
|
41
|
+
version: '9'
|
39
42
|
name: elasticsearch
|
40
43
|
type: :runtime
|
41
44
|
prerelease: false
|
@@ -44,6 +47,9 @@ dependencies:
|
|
44
47
|
- - ">="
|
45
48
|
- !ruby/object:Gem::Version
|
46
49
|
version: 7.14.9
|
50
|
+
- - "<"
|
51
|
+
- !ruby/object:Gem::Version
|
52
|
+
version: '9'
|
47
53
|
- !ruby/object:Gem::Dependency
|
48
54
|
requirement: !ruby/object:Gem::Requirement
|
49
55
|
requirements:
|
@@ -58,6 +64,20 @@ dependencies:
|
|
58
64
|
- - ">="
|
59
65
|
- !ruby/object:Gem::Version
|
60
66
|
version: 0.7.1
|
67
|
+
- !ruby/object:Gem::Dependency
|
68
|
+
requirement: !ruby/object:Gem::Requirement
|
69
|
+
requirements:
|
70
|
+
- - "~>"
|
71
|
+
- !ruby/object:Gem::Version
|
72
|
+
version: '1.3'
|
73
|
+
name: logstash-mixin-ecs_compatibility_support
|
74
|
+
type: :runtime
|
75
|
+
prerelease: false
|
76
|
+
version_requirements: !ruby/object:Gem::Requirement
|
77
|
+
requirements:
|
78
|
+
- - "~>"
|
79
|
+
- !ruby/object:Gem::Version
|
80
|
+
version: '1.3'
|
61
81
|
- !ruby/object:Gem::Dependency
|
62
82
|
requirement: !ruby/object:Gem::Requirement
|
63
83
|
requirements:
|
@@ -86,6 +106,20 @@ dependencies:
|
|
86
106
|
- - "~>"
|
87
107
|
- !ruby/object:Gem::Version
|
88
108
|
version: '1.0'
|
109
|
+
- !ruby/object:Gem::Dependency
|
110
|
+
requirement: !ruby/object:Gem::Requirement
|
111
|
+
requirements:
|
112
|
+
- - "~>"
|
113
|
+
- !ruby/object:Gem::Version
|
114
|
+
version: '1.0'
|
115
|
+
name: logstash-mixin-validator_support
|
116
|
+
type: :runtime
|
117
|
+
prerelease: false
|
118
|
+
version_requirements: !ruby/object:Gem::Requirement
|
119
|
+
requirements:
|
120
|
+
- - "~>"
|
121
|
+
- !ruby/object:Gem::Version
|
122
|
+
version: '1.0'
|
89
123
|
- !ruby/object:Gem::Dependency
|
90
124
|
requirement: !ruby/object:Gem::Requirement
|
91
125
|
requirements:
|