logstash-output-opensearch 1.2.0-java → 1.3.0-java

Sign up to get free protection for your applications and to get access to all the features.
@@ -78,7 +78,7 @@ class LogStash::Outputs::OpenSearch < LogStash::Outputs::Base
78
78
  include(LogStash::PluginMixins::OpenSearch::Common)
79
79
 
80
80
  # ecs_compatibility option, provided by Logstash core or the support adapter.
81
- include(LogStash::PluginMixins::ECSCompatibilitySupport)
81
+ include(LogStash::PluginMixins::ECSCompatibilitySupport(:disabled, :v1, :v8))
82
82
 
83
83
  # Generic/API config options that any document indexer output needs
84
84
  include(LogStash::PluginMixins::OpenSearch::APIConfigs)
@@ -419,7 +419,7 @@ class LogStash::Outputs::OpenSearch < LogStash::Outputs::Base
419
419
  when :disabled
420
420
  @default_index = "logstash-%{+yyyy.MM.dd}"
421
421
  @default_template_name = 'logstash'
422
- when :v1
422
+ when :v1, :v8
423
423
  @default_index = "ecs-logstash-%{+yyyy.MM.dd}"
424
424
  @default_template_name = 'ecs-logstash'
425
425
  else
@@ -11,7 +11,7 @@ signing_key_path = "gem-private_key.pem"
11
11
 
12
12
  Gem::Specification.new do |s|
13
13
  s.name = 'logstash-output-opensearch'
14
- s.version = '1.2.0'
14
+ s.version = '1.3.0'
15
15
 
16
16
  s.licenses = ['Apache-2.0']
17
17
  s.summary = "Stores logs in OpenSearch"
@@ -46,10 +46,11 @@ Gem::Specification.new do |s|
46
46
  s.add_runtime_dependency "logstash-core-plugin-api", ">= 1.60", "<= 2.99"
47
47
  s.add_runtime_dependency 'logstash-mixin-ecs_compatibility_support', '~>1.0'
48
48
  s.add_runtime_dependency 'aws-sdk', '>= 2.11.632', '~> 2'
49
+ s.add_runtime_dependency 'json', '>= 2.3.0', '~> 2'
49
50
 
50
51
  s.add_development_dependency 'logstash-codec-plain'
51
52
  s.add_development_dependency 'logstash-devutils'
52
53
  s.add_development_dependency 'flores'
53
54
  s.add_development_dependency 'cabin', ['~> 0.6']
54
- s.add_development_dependency 'opensearch-ruby'
55
+ s.add_development_dependency 'opensearch-ruby', '~> 1'
55
56
  end
@@ -59,7 +59,13 @@ describe "indexing with http_compression turned on", :integration => true do
59
59
  response = http_client.get("#{index_url}/_search?q=*&size=1000")
60
60
  result = LogStash::Json.load(response.body)
61
61
  result["hits"]["hits"].each do |doc|
62
- expect(doc["_type"]).to eq(type)
62
+ # FIXME This checks for OpenSearch 1.x or OpenDistro which has version 7.10.x
63
+ # need a cleaner way to check this.
64
+ if OpenSearchHelper.check_version?("< 2") || OpenSearchHelper.check_version?("> 7")
65
+ expect(doc["_type"]).to eq(type)
66
+ else
67
+ expect(doc).not_to include("_type")
68
+ end
63
69
  expect(doc["_index"]).to eq(index)
64
70
  end
65
71
  end
@@ -88,7 +88,13 @@ describe "indexing" do
88
88
  response = http_client.get("#{index_url}/_search?q=*&size=1000")
89
89
  result = LogStash::Json.load(response.body)
90
90
  result["hits"]["hits"].each do |doc|
91
- expect(doc["_type"]).to eq(type)
91
+ # FIXME This checks for OpenSearch 1.x or OpenDistro which has version 7.10.x
92
+ # need a cleaner way to check this.
93
+ if OpenSearchHelper.check_version?("< 2") || OpenSearchHelper.check_version?("> 7")
94
+ expect(doc["_type"]).to eq(type)
95
+ else
96
+ expect(doc).not_to include("_type")
97
+ end
92
98
  expect(doc["_index"]).to eq(index)
93
99
  end
94
100
  end
@@ -14,7 +14,8 @@ describe "Ingest pipeline execution behavior", :integration => true do
14
14
  require "logstash/outputs/opensearch"
15
15
  settings = {
16
16
  "hosts" => "#{get_host_port()}",
17
- "pipeline" => "apache-logs"
17
+ "pipeline" => "apache-logs",
18
+ "ecs_compatibility" => "disabled" # specs are tightly tied to non-ECS defaults
18
19
  }
19
20
  next LogStash::Outputs::OpenSearch.new(settings)
20
21
  end
@@ -10,7 +10,7 @@
10
10
  require_relative "../../../spec/opensearch_spec_helper"
11
11
  require "logstash/outputs/opensearch"
12
12
 
13
- context "join field tests", :integration => true do
13
+ context "join field tests", :integration => true && OpenSearchHelper.check_version?("<2") do
14
14
 
15
15
  shared_examples "a join field based parent indexer" do
16
16
  let(:index) { 10.times.collect { rand(10).to_s }.join("") }
@@ -46,7 +46,8 @@ describe "failures in bulk class expected behavior", :integration => true do
46
46
  "template_overwrite" => true,
47
47
  "hosts" => get_host_port(),
48
48
  "retry_max_interval" => 64,
49
- "retry_initial_interval" => 2
49
+ "retry_initial_interval" => 2,
50
+ "ecs_compatibility" => "disabled" # specs are tightly tied to non-ECS defaults
50
51
  }
51
52
  next LogStash::Outputs::OpenSearch.new(settings)
52
53
  end
@@ -10,8 +10,12 @@
10
10
  require_relative "../../../spec/opensearch_spec_helper"
11
11
 
12
12
  describe "index template expected behavior", :integration => true do
13
+ let(:ecs_compatibility) { fail('spec group does not define `ecs_compatibility`!') }
14
+
13
15
  subject! do
14
16
  require "logstash/outputs/opensearch"
17
+ allow_any_instance_of(LogStash::Outputs::OpenSearch).to receive(:ecs_compatibility).and_return(ecs_compatibility)
18
+
15
19
  settings = {
16
20
  "manage_template" => true,
17
21
  "template_overwrite" => true,
@@ -29,75 +33,97 @@ describe "index template expected behavior", :integration => true do
29
33
  # This can fail if there are no indexes, ignore failure.
30
34
  @client.indices.delete(:index => "*") rescue nil
31
35
 
32
- subject.register
33
-
34
- subject.multi_receive([
35
- LogStash::Event.new("message" => "sample message here"),
36
- LogStash::Event.new("somemessage" => { "message" => "sample nested message here" }),
37
- LogStash::Event.new("somevalue" => 100),
38
- LogStash::Event.new("somevalue" => 10),
39
- LogStash::Event.new("somevalue" => 1),
40
- LogStash::Event.new("country" => "us"),
41
- LogStash::Event.new("country" => "at"),
42
- LogStash::Event.new("geoip" => { "location" => [ 0.0, 0.0 ] })
43
- ])
44
-
45
- @client.indices.refresh
46
-
47
- # Wait or fail until everything's indexed.
48
- Stud::try(20.times) do
49
- r = @client.search(index: 'logstash-*')
50
- expect(r).to have_hits(8)
51
- end
52
36
  end
53
37
 
54
- it "permits phrase searching on string fields" do
55
- results = @client.search(:q => "message:\"sample message\"")
56
- expect(results).to have_hits(1)
57
- expect(results["hits"]["hits"][0]["_source"]["message"]).to eq("sample message here")
58
- end
38
+ context 'with ecs_compatibility => disabled' do
39
+ let(:ecs_compatibility) { :disabled }
40
+
41
+ before :each do
42
+ subject.register
43
+
44
+ subject.multi_receive([
45
+ LogStash::Event.new("message" => "sample message here"),
46
+ LogStash::Event.new("somemessage" => { "message" => "sample nested message here" }),
47
+ LogStash::Event.new("somevalue" => 100),
48
+ LogStash::Event.new("somevalue" => 10),
49
+ LogStash::Event.new("somevalue" => 1),
50
+ LogStash::Event.new("country" => "us"),
51
+ LogStash::Event.new("country" => "at"),
52
+ LogStash::Event.new("geoip" => { "location" => [ 0.0, 0.0 ] })
53
+ ])
54
+
55
+ @client.indices.refresh
56
+
57
+ # Wait or fail until everything's indexed.
58
+ Stud::try(20.times) do
59
+ r = @client.search(index: 'logstash-*')
60
+ expect(r).to have_hits(8)
61
+ end
62
+ end
59
63
 
60
- it "numbers dynamically map to a numeric type and permit range queries" do
61
- results = @client.search(:q => "somevalue:[5 TO 105]")
62
- expect(results).to have_hits(2)
64
+ it "permits phrase searching on string fields" do
65
+ results = @client.search(:q => "message:\"sample message\"")
66
+ expect(results).to have_hits(1)
67
+ expect(results["hits"]["hits"][0]["_source"]["message"]).to eq("sample message here")
68
+ end
63
69
 
64
- values = results["hits"]["hits"].collect { |r| r["_source"]["somevalue"] }
65
- expect(values).to include(10)
66
- expect(values).to include(100)
67
- expect(values).to_not include(1)
68
- end
70
+ it "numbers dynamically map to a numeric type and permit range queries" do
71
+ results = @client.search(:q => "somevalue:[5 TO 105]")
72
+ expect(results).to have_hits(2)
69
73
 
70
- it "does not create .keyword field for top-level message field" do
71
- results = @client.search(:q => "message.keyword:\"sample message here\"")
72
- expect(results).to have_hits(0)
73
- end
74
+ values = results["hits"]["hits"].collect { |r| r["_source"]["somevalue"] }
75
+ expect(values).to include(10)
76
+ expect(values).to include(100)
77
+ expect(values).to_not include(1)
78
+ end
74
79
 
75
- it "creates .keyword field for nested message fields" do
76
- results = @client.search(:q => "somemessage.message.keyword:\"sample nested message here\"")
77
- expect(results).to have_hits(1)
78
- end
80
+ it "does not create .keyword field for top-level message field" do
81
+ results = @client.search(:q => "message.keyword:\"sample message here\"")
82
+ expect(results).to have_hits(0)
83
+ end
79
84
 
80
- it "creates .keyword field from any string field which is not_analyzed" do
81
- results = @client.search(:q => "country.keyword:\"us\"")
82
- expect(results).to have_hits(1)
83
- expect(results["hits"]["hits"][0]["_source"]["country"]).to eq("us")
85
+ it "creates .keyword field for nested message fields" do
86
+ results = @client.search(:q => "somemessage.message.keyword:\"sample nested message here\"")
87
+ expect(results).to have_hits(1)
88
+ end
84
89
 
85
- # partial or terms should not work.
86
- results = @client.search(:q => "country.keyword:\"u\"")
87
- expect(results).to have_hits(0)
88
- end
90
+ it "creates .keyword field from any string field which is not_analyzed" do
91
+ results = @client.search(:q => "country.keyword:\"us\"")
92
+ expect(results).to have_hits(1)
93
+ expect(results["hits"]["hits"][0]["_source"]["country"]).to eq("us")
94
+
95
+ # partial or terms should not work.
96
+ results = @client.search(:q => "country.keyword:\"u\"")
97
+ expect(results).to have_hits(0)
98
+ end
99
+
100
+ it "make [geoip][location] a geo_point" do
101
+ expect(field_properties_from_template("logstash", "geoip")["location"]["type"]).to eq("geo_point")
102
+ end
89
103
 
90
- it "make [geoip][location] a geo_point" do
91
- expect(field_properties_from_template("logstash", "geoip")["location"]["type"]).to eq("geo_point")
104
+ it "aggregate .keyword results correctly " do
105
+ results = @client.search(:body => { "aggregations" => { "my_agg" => { "terms" => { "field" => "country.keyword" } } } })["aggregations"]["my_agg"]
106
+ terms = results["buckets"].collect { |b| b["key"] }
107
+
108
+ expect(terms).to include("us")
109
+
110
+ # 'at' is a stopword, make sure stopwords are not ignored.
111
+ expect(terms).to include("at")
112
+ end
92
113
  end
93
114
 
94
- it "aggregate .keyword results correctly " do
95
- results = @client.search(:body => { "aggregations" => { "my_agg" => { "terms" => { "field" => "country.keyword" } } } })["aggregations"]["my_agg"]
96
- terms = results["buckets"].collect { |b| b["key"] }
115
+ context 'with ECS enabled' do
116
+ let(:ecs_compatibility) { :v1 }
97
117
 
98
- expect(terms).to include("us")
118
+ before(:each) do
119
+ subject.register # should load template?
120
+ subject.multi_receive([LogStash::Event.new("message" => "sample message here")])
121
+ end
99
122
 
100
- # 'at' is a stopword, make sure stopwords are not ignored.
101
- expect(terms).to include("at")
123
+ it 'loads the templates' do
124
+ aggregate_failures do
125
+ expect(@client.indices.exists_template(name: 'ecs-logstash')).to be_truthy
126
+ end
127
+ end
102
128
  end
103
129
  end
@@ -49,6 +49,16 @@ module OpenSearchHelper
49
49
  RSpec.configuration.filter[:version]
50
50
  end
51
51
 
52
+ def self.check_version?(*requirement)
53
+ version = self.version
54
+ if version.nil? || version.empty?
55
+ puts "version tag isn't set. Returning false from 'check_version?`."
56
+ return false
57
+ end
58
+ release_version = Gem::Version.new(version).release
59
+ Gem::Requirement.new(requirement).satisfied_by?(release_version)
60
+ end
61
+
52
62
  RSpec::Matchers.define :have_hits do |expected|
53
63
  match do |actual|
54
64
  expected == actual['hits']['total']['value']
@@ -157,7 +157,7 @@ describe LogStash::Outputs::OpenSearch::HttpClient do
157
157
  }
158
158
 
159
159
  it "should call index template" do
160
- expect(subject.pool).to receive(:put).with("_template/#{template_name}", nil, anything).and_return(get_response)
160
+ expect(subject.pool).to receive(:put).with("/_template/#{template_name}", nil, anything).and_return(get_response)
161
161
  subject.template_put(template_name, template)
162
162
  end
163
163
  end
@@ -13,9 +13,28 @@ require "logstash/outputs/opensearch/template_manager"
13
13
  describe LogStash::Outputs::OpenSearch::TemplateManager do
14
14
 
15
15
  describe ".default_template_path" do
16
- context 'when ECS v1 is requested' do
17
- it 'resolves' do
18
- expect(described_class.default_template_path(7, :v1)).to end_with("/templates/ecs-v1/7x.json")
16
+ [1, 2].each do |major_version|
17
+ context "when ECS is disabled with OpenSearch #{major_version}.x" do
18
+ it 'resolves' do
19
+ expect(described_class.default_template_path(major_version)).to end_with("/templates/ecs-disabled/#{major_version}x.json")
20
+ end
21
+ it 'resolves' do
22
+ expect(described_class.default_template_path(major_version, :disabled)).to end_with("/templates/ecs-disabled/#{major_version}x.json")
23
+ end
24
+ end
25
+ end
26
+ [7, 1, 2].each do |major_version|
27
+ context "when ECS v1 is requested with OpenSearch #{major_version}.x" do
28
+ it 'resolves' do
29
+ expect(described_class.default_template_path(major_version, :v1)).to end_with("/templates/ecs-v1/#{major_version}x.json")
30
+ end
31
+ end
32
+ end
33
+ [1, 2].each do |major_version|
34
+ context "when ECS v8 is requested with OpenSearch #{major_version}.x" do
35
+ it 'resolves' do
36
+ expect(described_class.default_template_path(major_version, :v8)).to end_with("/templates/ecs-v8/#{major_version}x.json")
37
+ end
19
38
  end
20
39
  end
21
40
  end
@@ -33,4 +52,4 @@ describe LogStash::Outputs::OpenSearch::TemplateManager do
33
52
  end
34
53
  end
35
54
  end
36
- end
55
+ end
@@ -12,6 +12,7 @@ require "base64"
12
12
  require "flores/random"
13
13
  require 'concurrent/atomic/count_down_latch'
14
14
  require "logstash/outputs/opensearch"
15
+ require 'logstash/plugin_mixins/ecs_compatibility_support/spec_helper'
15
16
 
16
17
  describe LogStash::Outputs::OpenSearch do
17
18
  subject(:opensearch_output_instance) { described_class.new(options) }
@@ -784,6 +785,21 @@ describe LogStash::Outputs::OpenSearch do
784
785
  end
785
786
  end
786
787
 
788
+ describe 'ecs_compatibility support', :ecs_compatibility_support do
789
+ [:disabled, :v1, :v8].each do |ecs_compatibility|
790
+ context "when `ecs_compatibility => #{ecs_compatibility}`" do
791
+ let(:options) { Hash.new }
792
+ subject(:output) { described_class.new(options.merge("ecs_compatibility" => "#{ecs_compatibility}")) }
793
+ context 'when registered' do
794
+ before(:each) { output.register }
795
+ it 'has the correct effective ECS compatibility setting' do
796
+ expect(output.ecs_compatibility).to eq(ecs_compatibility)
797
+ end
798
+ end
799
+ end
800
+ end
801
+ end
802
+
787
803
  @private
788
804
 
789
805
  def stub_manticore_client!(manticore_double = nil)
data.tar.gz.sig CHANGED
Binary file
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: logstash-output-opensearch
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.0
4
+ version: 1.3.0
5
5
  platform: java
6
6
  authors:
7
7
  - Elastic
@@ -13,7 +13,7 @@ cert_chain:
13
13
  -----BEGIN CERTIFICATE-----
14
14
  MIIDfDCCAmSgAwIBAgIBATANBgkqhkiG9w0BAQUFADBCMRMwEQYDVQQDDApvcGVu
15
15
  c2VhcmNoMRYwFAYKCZImiZPyLGQBGRYGYW1hem9uMRMwEQYKCZImiZPyLGQBGRYD
16
- Y29tMB4XDTIxMDgwMjIxMDQwM1oXDTIyMDgwMjIxMDQwM1owQjETMBEGA1UEAwwK
16
+ Y29tMB4XDTIyMDgxNzE3NTIzNFoXDTIzMDgxNzE3NTIzNFowQjETMBEGA1UEAwwK
17
17
  b3BlbnNlYXJjaDEWMBQGCgmSJomT8ixkARkWBmFtYXpvbjETMBEGCgmSJomT8ixk
18
18
  ARkWA2NvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM1z3/jcitjV
19
19
  umXwRFn+JSBBd36qZB54Dtucf6+E2fmNPzBRhgYN5XJy/+clQJ9NIJV7C8H52P3V
@@ -24,14 +24,14 @@ cert_chain:
24
24
  zfR37/NQFkECAwEAAaN9MHswCQYDVR0TBAIwADALBgNVHQ8EBAMCBLAwHQYDVR0O
25
25
  BBYEFJJ2myhLXK742btavNbG0IWrMNBIMCAGA1UdEQQZMBeBFW9wZW5zZWFyY2hA
26
26
  YW1hem9uLmNvbTAgBgNVHRIEGTAXgRVvcGVuc2VhcmNoQGFtYXpvbi5jb20wDQYJ
27
- KoZIhvcNAQEFBQADggEBAE7gBP5ecTtKb04qmEsnbJ6+yn0LUSmxPabFBnB6h1+T
28
- XW8BvBw9MpE//5fQf4HSia3m9XjRpl4WxBcJiyfLER64tk/c1JLhV2+rq3CCV/be
29
- DFSP6gY93kK7jwauajGQvyHzORaW1TBM6diIRYCMLY7Isf+PTHl0xhZZBSVm8wl6
30
- IstV+mTP2KC1l7hSzUDb4rrOSnpRB7AEczcDdkjwzHKIlw8rcL+PLLnFTOgqKyq3
31
- yXikuH6LEVykA8pgOcB9gKsB2/zMd2ZlSj2monM8Qw9EfB14ZSDTYS8VYuwWCeF0
32
- eFmXXk0ufQFKl1Yll7quHkmQ0PzKkvXTpONBT6qPkXE=
27
+ KoZIhvcNAQEFBQADggEBAH5pWLYwKWFh1OjdCReGz/VEAiF4jXXputoN5Z8ga+1Z
28
+ lg8/diJf0PlP2B46PdmxH/TVc/o+qglNO2cHVEp8xZfEd83dfioOBeK90URQUpC5
29
+ UZmO0LZusg46SQKwKa2ukpIy2fNi3PeHRiV+W2Zv69GoWppyLun+fMez7wVoah2r
30
+ r5ROUYuAvFUvga1Vm+49pKiPM5n+MAYP5t/vWhgymY3SYQ1TfewkvKAFiFXikOR+
31
+ r+j7FLyKuk5DzIxiCp8QN5dU71BbGUmsHf/C5UV76WLPOFX/szeaHhPwpjR3sK7r
32
+ 5zLgCV1KP7cgDdCYMlmZGeSViU8NV+Yy8/ghrzGpqVw=
33
33
  -----END CERTIFICATE-----
34
- date: 2021-12-16 00:00:00.000000000 Z
34
+ date: 2022-08-17 00:00:00.000000000 Z
35
35
  dependencies:
36
36
  - !ruby/object:Gem::Dependency
37
37
  requirement: !ruby/object:Gem::Requirement
@@ -56,23 +56,23 @@ dependencies:
56
56
  - !ruby/object:Gem::Dependency
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - "~>"
60
- - !ruby/object:Gem::Version
61
- version: '0.0'
62
59
  - - ">="
63
60
  - !ruby/object:Gem::Version
64
61
  version: 0.0.17
62
+ - - "~>"
63
+ - !ruby/object:Gem::Version
64
+ version: '0.0'
65
65
  name: stud
66
66
  prerelease: false
67
67
  type: :runtime
68
68
  version_requirements: !ruby/object:Gem::Requirement
69
69
  requirements:
70
- - - "~>"
71
- - !ruby/object:Gem::Version
72
- version: '0.0'
73
70
  - - ">="
74
71
  - !ruby/object:Gem::Version
75
72
  version: 0.0.17
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '0.0'
76
76
  - !ruby/object:Gem::Dependency
77
77
  requirement: !ruby/object:Gem::Requirement
78
78
  requirements:
@@ -110,23 +110,43 @@ dependencies:
110
110
  - !ruby/object:Gem::Dependency
111
111
  requirement: !ruby/object:Gem::Requirement
112
112
  requirements:
113
- - - "~>"
114
- - !ruby/object:Gem::Version
115
- version: '2'
116
113
  - - ">="
117
114
  - !ruby/object:Gem::Version
118
115
  version: 2.11.632
116
+ - - "~>"
117
+ - !ruby/object:Gem::Version
118
+ version: '2'
119
119
  name: aws-sdk
120
120
  prerelease: false
121
121
  type: :runtime
122
122
  version_requirements: !ruby/object:Gem::Requirement
123
123
  requirements:
124
+ - - ">="
125
+ - !ruby/object:Gem::Version
126
+ version: 2.11.632
124
127
  - - "~>"
125
128
  - !ruby/object:Gem::Version
126
129
  version: '2'
130
+ - !ruby/object:Gem::Dependency
131
+ requirement: !ruby/object:Gem::Requirement
132
+ requirements:
127
133
  - - ">="
128
134
  - !ruby/object:Gem::Version
129
- version: 2.11.632
135
+ version: 2.3.0
136
+ - - "~>"
137
+ - !ruby/object:Gem::Version
138
+ version: '2'
139
+ name: json
140
+ prerelease: false
141
+ type: :runtime
142
+ version_requirements: !ruby/object:Gem::Requirement
143
+ requirements:
144
+ - - ">="
145
+ - !ruby/object:Gem::Version
146
+ version: 2.3.0
147
+ - - "~>"
148
+ - !ruby/object:Gem::Version
149
+ version: '2'
130
150
  - !ruby/object:Gem::Dependency
131
151
  requirement: !ruby/object:Gem::Requirement
132
152
  requirements:
@@ -186,17 +206,17 @@ dependencies:
186
206
  - !ruby/object:Gem::Dependency
187
207
  requirement: !ruby/object:Gem::Requirement
188
208
  requirements:
189
- - - ">="
209
+ - - "~>"
190
210
  - !ruby/object:Gem::Version
191
- version: '0'
211
+ version: '1'
192
212
  name: opensearch-ruby
193
213
  prerelease: false
194
214
  type: :development
195
215
  version_requirements: !ruby/object:Gem::Requirement
196
216
  requirements:
197
- - - ">="
217
+ - - "~>"
198
218
  - !ruby/object:Gem::Version
199
- version: '0'
219
+ version: '1'
200
220
  description: This gem is a Logstash plugin required to be installed on top of the
201
221
  Logstash core pipeline using $LS_HOME/bin/logstash-plugin install gem. This gem
202
222
  is not a stand-alone program
@@ -224,7 +244,11 @@ files:
224
244
  - lib/logstash/outputs/opensearch/http_client_builder.rb
225
245
  - lib/logstash/outputs/opensearch/template_manager.rb
226
246
  - lib/logstash/outputs/opensearch/templates/ecs-disabled/1x.json
247
+ - lib/logstash/outputs/opensearch/templates/ecs-disabled/2x.json
227
248
  - lib/logstash/outputs/opensearch/templates/ecs-disabled/7x.json
249
+ - lib/logstash/outputs/opensearch/templates/ecs-v8/1x.json
250
+ - lib/logstash/outputs/opensearch/templates/ecs-v8/2x.json
251
+ - lib/logstash/outputs/opensearch/templates/ecs-v8/7x.json
228
252
  - lib/logstash/plugin_mixins/opensearch/api_configs.rb
229
253
  - lib/logstash/plugin_mixins/opensearch/common.rb
230
254
  - logstash-output-opensearch.gemspec
@@ -282,8 +306,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
282
306
  - !ruby/object:Gem::Version
283
307
  version: '0'
284
308
  requirements: []
285
- rubyforge_project:
286
- rubygems_version: 2.7.10
309
+ rubygems_version: 3.3.20
287
310
  signing_key:
288
311
  specification_version: 4
289
312
  summary: Stores logs in OpenSearch
metadata.gz.sig CHANGED
Binary file