logstash-filter-elastic_integration 0.0.2-java → 0.1.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: e763ac8238ed2ebca641f89dde3596d76b63f2e93f9214894c93add947c0fb14
4
- data.tar.gz: acb232f4b3481f47684421ccfffdda198a4141ec5209b67f881f04ca28edd539
3
+ metadata.gz: 844b5987e2e5e28d7e560c80eeec166c3d07651a6b4d167dc449e9639beda926
4
+ data.tar.gz: 6f85d9b9cabda183c6a365f3030876c21990161dbe64e1e82e8d349dccea4b17
5
5
  SHA512:
6
- metadata.gz: d563ccc980501c370b2b95eecbfbd8f43ca9cc30d792d3ab8122cc08bfd227c1a4bfa41dcea7041f502afb25d4a3f391981309157b5a5bddf8b92a37543167f3
7
- data.tar.gz: 3e75a0255e24a4c67ef04f65e7bdeb137c233d9c731624b0436c26a3f1ffe0bf6274b52090a924b072f602678b6af7570c105f590b81e13edf61bfdff1df8936
6
+ metadata.gz: a0e711a5d52416b93fbf88b0658657722b5a63d3be91f1a76125123ff614826705aa9a065f014a2a00489729c15b8ec1a9d654d3ab74235f53e2e4d66aec2225
7
+ data.tar.gz: 0af45a4b9be67629091d3a45d6dd7f8c666cc403ff0e1dee8aa1244a5b27cfc843340b0a61a817181f14b14982786a0b298014936b05fbb3c53aa611e0165fe2
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.2
1
+ 0.1.0
@@ -0,0 +1,90 @@
1
+ # encoding: utf-8
2
+
3
+ ########################################################################
4
+ # Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V.
5
+ # under one or more contributor license agreements. Licensed under the
6
+ # Elastic License 2.0; you may not use this file except in compliance
7
+ # with the Elastic License 2.0.
8
+ ########################################################################
9
+
10
+ require_relative "jar_dependencies"
11
+
12
+ ##
13
+ # This module encapsulates methods and classes for bridging the gap between the
14
+ # Ruby-API [LogStash::GeoipDatabaseManager] and this plugin's native-Java
15
+ # GeoipDatabaseProvider.
16
+ module LogStash::Filters::ElasticIntegration::GeoipDatabaseProviderBridge
17
+
18
+ GUIDANCE = "integrations that rely on the Geoip Processor will be unable to enrich events with geo data "\
19
+ "unless you either provide your own databases with `geoip_database_directory` or run this pipeline "\
20
+ "in a Logstash with Geoip Database Management enabled."
21
+
22
+ def initialize_geoip_database_provider!
23
+ java_import('co.elastic.logstash.filters.elasticintegration.geoip.GeoIpDatabaseProvider')
24
+ @geoip_database_provider ||= GeoIpDatabaseProvider::Builder.new.tap do |builder|
25
+ if geoip_database_directory
26
+ logger.debug("discovering geoip databases from #{geoip_database_directory}")
27
+ builder.discoverDatabases(java.io.File.new(geoip_database_directory))
28
+ else
29
+ geoip_database_manager = load_geoip_database_manager!
30
+ if :UNAVAILABLE == geoip_database_manager
31
+ logger.warn("Geoip Database Management is not available in the running version of Logstash; #{GUIDANCE}")
32
+ elsif geoip_database_manager.enabled?
33
+ logger.info "by not manually configuring self-managed databases with `geoip_database_directory => ...` "\
34
+ "you accept and agree to the MaxMind EULA, which allows Elastic Integrations to use Logstash's Geoip Database Management service. "\
35
+ "For more details please visit https://www.maxmind.com/en/geolite2/eula"
36
+
37
+ geoip_database_manager.supported_database_types.each do |type|
38
+ logger.debug("subscribing to managed geoip database #{type}")
39
+ builder.setDatabaseHolder("GeoLite2-#{type}.mmdb", ObservingDatabaseHolder.new(type, eula_manager: geoip_database_manager, logger: logger))
40
+ end
41
+ elsif geoip_database_directory.nil?
42
+ logger.warn("Geoip Database Management is disabled; #{GUIDANCE}")
43
+ end
44
+ end
45
+ end.build
46
+ end
47
+
48
+ def load_geoip_database_manager!
49
+ require 'geoip_database_management/manager'
50
+
51
+ LogStash::GeoipDatabaseManagement::Manager.instance
52
+ rescue LoadError
53
+ :UNAVAILABLE
54
+ end
55
+
56
+ java_import('co.elastic.logstash.filters.elasticintegration.geoip.ManagedGeoipDatabaseHolder')
57
+ class ObservingDatabaseHolder < ManagedGeoipDatabaseHolder
58
+ def initialize(simple_database_type, eula_manager:, logger: nil)
59
+ super("GeoLite2-#{simple_database_type}")
60
+
61
+ @simple_database_type = simple_database_type
62
+ @logger = logger
63
+
64
+ @subscription = eula_manager.subscribe_database_path(simple_database_type)
65
+ @subscription.observe(self)
66
+ end
67
+
68
+ def construct(db_info)
69
+ @logger&.debug("CONSTRUCT[#{@simple_database_type} => #{db_info}]")
70
+ self.setDatabasePath(db_info.path)
71
+ end
72
+
73
+ def on_update(db_info)
74
+ @logger&.debug("ON_UPDATE[#{@simple_database_type} => #{db_info}]")
75
+ self.setDatabasePath(db_info.path)
76
+ end
77
+
78
+ def on_expire()
79
+ @logger&.debug("ON_EXPIRE[#{@simple_database_type}]")
80
+ self.setDatabasePath(nil)
81
+ end
82
+
83
+ def close
84
+ super
85
+ ensure
86
+ @subscription&.release!
87
+ end
88
+
89
+ end
90
+ end
@@ -8,4 +8,4 @@
8
8
  ########################################################################
9
9
 
10
10
  require 'jar_dependencies'
11
- require_jar('co.elastic.logstash.plugins.filter.elasticintegration', 'logstash-filter-elastic_integration', '0.0.2')
11
+ require_jar('co.elastic.logstash.plugins.filter.elasticintegration', 'logstash-filter-elastic_integration', '0.1.0')
@@ -18,6 +18,7 @@ class LogStash::Filters::ElasticIntegration < LogStash::Filters::Base
18
18
  ELASTICSEARCH_DEFAULT_PATH = '/'.freeze
19
19
  HTTP_PROTOCOL = "http".freeze
20
20
  HTTPS_PROTOCOL = "https".freeze
21
+ ELASTIC_API_VERSION = "2023-10-31".freeze
21
22
 
22
23
  # Sets the host(s) of the remote instance. If given an array it will load balance
23
24
  # requests across the hosts specified in the `hosts` parameter. Hosts can be any of
@@ -105,8 +106,10 @@ class LogStash::Filters::ElasticIntegration < LogStash::Filters::Base
105
106
 
106
107
  require_relative "elastic_integration/jar_dependencies"
107
108
  require_relative "elastic_integration/event_api_bridge"
109
+ require_relative "elastic_integration/geoip_database_provider_bridge"
108
110
 
109
111
  extend EventApiBridge
112
+ extend GeoipDatabaseProviderBridge
110
113
 
111
114
  super
112
115
 
@@ -335,10 +338,21 @@ class LogStash::Filters::ElasticIntegration < LogStash::Filters::Base
335
338
 
336
339
  def initialize_elasticsearch_rest_client!
337
340
  java_import('co.elastic.logstash.filters.elasticintegration.ElasticsearchRestClientBuilder')
341
+ java_import('co.elastic.logstash.filters.elasticintegration.PreflightCheck')
338
342
 
339
- @elasticsearch_rest_client = ElasticsearchRestClientBuilder.fromPluginConfiguration(extract_immutable_config)
343
+ config = extract_immutable_config
344
+ @elasticsearch_rest_client = ElasticsearchRestClientBuilder.fromPluginConfiguration(config)
340
345
  .map(&:build)
341
346
  .orElseThrow() # todo: ruby/java bridge better exception
347
+
348
+ if serverless?
349
+ @elasticsearch_rest_client = ElasticsearchRestClientBuilder.fromPluginConfiguration(config)
350
+ .map do |builder|
351
+ builder.configureElasticApi { |elasticApi| elasticApi.setApiVersion(ELASTIC_API_VERSION) }
352
+ end
353
+ .map(&:build)
354
+ .orElseThrow()
355
+ end
342
356
  end
343
357
 
344
358
  def initialize_event_processor!
@@ -353,14 +367,6 @@ class LogStash::Filters::ElasticIntegration < LogStash::Filters::Base
353
367
  raise_config_error!("configuration did not produce an EventProcessor: #{exception}")
354
368
  end
355
369
 
356
- def initialize_geoip_database_provider!
357
- java_import('co.elastic.logstash.filters.elasticintegration.geoip.GeoIpDatabaseProvider')
358
-
359
- @geoip_database_provider ||= GeoIpDatabaseProvider::Builder.new.tap do |builder|
360
- builder.setDatabases(java.io.File.new(@geoip_database_directory)) if @geoip_database_directory
361
- end.build
362
- end
363
-
364
370
  def perform_preflight_check!
365
371
  java_import('co.elastic.logstash.filters.elasticintegration.PreflightCheck')
366
372
 
@@ -397,6 +403,12 @@ class LogStash::Filters::ElasticIntegration < LogStash::Filters::Base
397
403
  raise_config_error!(e.message)
398
404
  end
399
405
 
406
+ def serverless?
407
+ PreflightCheck.new(@elasticsearch_rest_client).isServerless
408
+ rescue => e
409
+ raise_config_error!(e.message)
410
+ end
411
+
400
412
  ##
401
413
  # single-use helper to ensure the running Logstash is a _complete_ distro that has
402
414
  # non-OSS features active. Runtime detection mechanism relies on LogStash::OSS,
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: logstash-filter-elastic_integration
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.1.0
5
5
  platform: java
6
6
  authors:
7
7
  - Elastic
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-05-10 00:00:00.000000000 Z
11
+ date: 2023-12-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  requirement: !ruby/object:Gem::Requirement
@@ -71,9 +71,10 @@ files:
71
71
  - VERSION
72
72
  - lib/logstash/filters/elastic_integration.rb
73
73
  - lib/logstash/filters/elastic_integration/event_api_bridge.rb
74
+ - lib/logstash/filters/elastic_integration/geoip_database_provider_bridge.rb
74
75
  - lib/logstash/filters/elastic_integration/jar_dependencies.rb
75
76
  - logstash-filter-elastic_integration.gemspec
76
- - vendor/jar-dependencies/co/elastic/logstash/plugins/filter/elasticintegration/logstash-filter-elastic_integration/0.0.2/logstash-filter-elastic_integration-0.0.2.jar
77
+ - vendor/jar-dependencies/co/elastic/logstash/plugins/filter/elasticintegration/logstash-filter-elastic_integration/0.1.0/logstash-filter-elastic_integration-0.1.0.jar
77
78
  homepage: http://www.elastic.co/guide/en/logstash/current/index.html
78
79
  licenses:
79
80
  - ELv2
@@ -100,7 +101,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
100
101
  - !ruby/object:Gem::Version
101
102
  version: '0'
102
103
  requirements: []
103
- rubygems_version: 3.2.29
104
+ rubygems_version: 3.2.33
104
105
  signing_key:
105
106
  specification_version: 4
106
107
  summary: Processes Elastic Integrations