logstash-input-s3-sns-sqs 2.1.1 → 2.1.2
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 +5 -0
- data/lib/logstash/inputs/s3/client_factory.rb +1 -1
- data/lib/logstash/inputs/s3snssqs.rb +3 -1
- data/lib/logstash/inputs/s3snssqs/log_processor.rb +12 -11
- data/lib/logstash/inputs/sqs/poller.rb +20 -4
- data/logstash-input-s3-sns-sqs.gemspec +1 -1
- data/spec/inputs/s3sqs_spec.rb +15 -9
- 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: 805cb772fda649de4273d9c86799255bc31b7f18b847983c1a1bacfee2eb0224
|
4
|
+
data.tar.gz: ef65ac96355cb246b493836323e7998e485ddf30ceb5df780d17b1f6d080451b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 338e687d52f65a484ca75c091cf003f263e8e80f00b545f3f6b36b7a3fc584ea29807233436c75a3189fdf075d7386aa1415f34a1996349b2a41f4b274cb6f75
|
7
|
+
data.tar.gz: abc6194b248640de99f8ed6f41304fff760b1667a08426dea2ee98d773f19d9b01010438c633452fc60e8c23b31c201b3000deab07e4cf4da630a7f4770cd0d1
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,8 @@
|
|
1
|
+
##2.1.2
|
2
|
+
- FEATURE: Now it´s possible to use queue urls and names.
|
3
|
+
- FEATURE: Add sqs long polling config parameter: sqs_wait_time_seconds
|
4
|
+
- FIX: Valid UTF-8 byte sequences in logs are munged
|
5
|
+
- CLEANUP: Remove tests. (as a begin for clean testing)
|
1
6
|
##2.1.1
|
2
7
|
- FEATURE: Enable Multiregion Support for included S3 client.
|
3
8
|
- Add region by bucket feature
|
@@ -52,7 +52,7 @@ class S3ClientFactory
|
|
52
52
|
)
|
53
53
|
elsif credentials.key?('access_key_id') && credentials.key?('secret_access_key')
|
54
54
|
@logger.debug("Fetch credentials", :access_key => credentials['access_key_id'])
|
55
|
-
return Aws::Credentials.new(credentials)
|
55
|
+
return Aws::Credentials.new(credentials['access_key_id'], credentials['secret_access_key'])
|
56
56
|
end
|
57
57
|
end
|
58
58
|
|
@@ -173,6 +173,7 @@ class LogStash::Inputs::S3SNSSQS < LogStash::Inputs::Threadable
|
|
173
173
|
# Whether the event is processed though an SNS to SQS. (S3>SNS>SQS = true |S3>SQS=false)
|
174
174
|
config :from_sns, :validate => :boolean, :default => true
|
175
175
|
config :sqs_skip_delete, :validate => :boolean, :default => false
|
176
|
+
config :sqs_wait_time_seconds, :validate => :number, :required => false
|
176
177
|
config :sqs_delete_on_failure, :validate => :boolean, :default => true
|
177
178
|
|
178
179
|
config :visibility_timeout, :validate => :number, :default => 120
|
@@ -251,7 +252,8 @@ class LogStash::Inputs::S3SNSSQS < LogStash::Inputs::Threadable
|
|
251
252
|
@sqs_poller = SqsPoller.new(@logger, @received_stop,
|
252
253
|
{
|
253
254
|
visibility_timeout: @visibility_timeout,
|
254
|
-
skip_delete: @sqs_skip_delete
|
255
|
+
skip_delete: @sqs_skip_delete,
|
256
|
+
wait_time_seconds: @sqs_wait_time_seconds
|
255
257
|
},
|
256
258
|
{
|
257
259
|
sqs_queue: @queue,
|
@@ -26,17 +26,18 @@ module LogProcessor
|
|
26
26
|
@logger.warn("[#{Thread.current[:name]}] Abort reading in the middle of the file, we will read it again when logstash is started")
|
27
27
|
throw :skip_delete
|
28
28
|
end
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
29
|
+
begin
|
30
|
+
codec.decode(line) do |event|
|
31
|
+
event_count += 1
|
32
|
+
decorate_event(event, metadata, type, record[:key], record[:bucket], record[:s3_data])
|
33
|
+
#event_time = Time.now #PROFILING
|
34
|
+
#event.set("[@metadata][progress][begin]", start_time)
|
35
|
+
#event.set("[@metadata][progress][index_time]", event_time)
|
36
|
+
#event.set("[@metadata][progress][line]", line_count)
|
37
|
+
logstash_event_queue << event
|
38
|
+
end
|
39
|
+
rescue Exception => e
|
40
|
+
@logger.error("[#{Thread.current[:name]}] Unable to decode line", :line => line, :error => e)
|
40
41
|
end
|
41
42
|
end
|
42
43
|
file_t1 = Process.clock_gettime(Process::CLOCK_MONOTONIC) #PROFILING
|
@@ -46,13 +46,19 @@ class SqsPoller
|
|
46
46
|
begin
|
47
47
|
@logger.info("Registering SQS input", :queue => @queue)
|
48
48
|
sqs_client = Aws::SQS::Client.new(aws_options_hash)
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
49
|
+
if uri?(@queue)
|
50
|
+
queue_url = @queue
|
51
|
+
else
|
52
|
+
queue_url = sqs_client.get_queue_url({
|
53
|
+
queue_name: @queue,
|
54
|
+
queue_owner_aws_account_id: client_options[:queue_owner_aws_account_id]
|
55
|
+
}).queue_url
|
56
|
+
end
|
57
|
+
|
53
58
|
@poller = Aws::SQS::QueuePoller.new(queue_url,
|
54
59
|
:client => sqs_client
|
55
60
|
)
|
61
|
+
@logger.info("[#{Thread.current[:name]}] connected to queue.", :queue_url => queue_url)
|
56
62
|
rescue Aws::SQS::Errors::ServiceError => e
|
57
63
|
@logger.error("Cannot establish connection to Amazon SQS", :error => e)
|
58
64
|
raise LogStash::ConfigurationError, "Verify the SQS queue name and your credentials"
|
@@ -185,6 +191,16 @@ class SqsPoller
|
|
185
191
|
end
|
186
192
|
end
|
187
193
|
|
194
|
+
def uri?(string)
|
195
|
+
uri = URI.parse(string)
|
196
|
+
%w( http https ).include?(uri.scheme)
|
197
|
+
rescue URI::BadURIError
|
198
|
+
false
|
199
|
+
rescue URI::InvalidURIError
|
200
|
+
false
|
201
|
+
end
|
202
|
+
|
203
|
+
|
188
204
|
def get_object_path(key)
|
189
205
|
folder = ::File.dirname(key)
|
190
206
|
return '' if folder == '.'
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Gem::Specification.new do |s|
|
2
2
|
s.name = 'logstash-input-s3-sns-sqs'
|
3
|
-
s.version = '2.1.
|
3
|
+
s.version = '2.1.2'
|
4
4
|
s.licenses = ['Apache-2.0']
|
5
5
|
s.summary = "Get logs from AWS s3 buckets as issued by an object-created event via sns -> sqs."
|
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/plugin install gemname. This gem is not a stand-alone program"
|
data/spec/inputs/s3sqs_spec.rb
CHANGED
@@ -15,11 +15,13 @@ require 'rspec/expectations'
|
|
15
15
|
|
16
16
|
describe LogStash::Inputs::S3SNSSQS do
|
17
17
|
class LogStash::Inputs::S3SNSSQS
|
18
|
-
public :
|
18
|
+
public :process # use method without error logging for better visibility of errors
|
19
19
|
end
|
20
20
|
let(:codec_options) { {} }
|
21
21
|
|
22
22
|
let(:input) { LogStash::Inputs::S3SNSSQS.new(config) }
|
23
|
+
|
24
|
+
let(:codec_factory) { CodecFactory.new(@logger, { default_codec: @codec, codec_by_folder: @codec_by_folder }) }
|
23
25
|
subject { input }
|
24
26
|
|
25
27
|
context "default parser choice" do
|
@@ -28,11 +30,11 @@ describe LogStash::Inputs::S3SNSSQS do
|
|
28
30
|
end
|
29
31
|
end
|
30
32
|
|
31
|
-
let(:
|
33
|
+
let(:record) {{"local_file" => File.join(File.dirname(__FILE__), '..', '..', 'fixtures', 'log-stream.real-formatted') }}
|
32
34
|
let(:key) { "arn:aws:iam::123456789012:role/AuthorizedRole" }
|
33
35
|
let(:folder) { "arn:aws:iam::123456789012:role/AuthorizedRole" }
|
34
36
|
let(:instance_codec) { "json" }
|
35
|
-
let(:
|
37
|
+
let(:logstash_event_queue) { "arn:aws:iam::123456789012:role/AuthorizedRole" }
|
36
38
|
let(:bucket) { "arn:aws:iam::123456789012:role/AuthorizedRole" }
|
37
39
|
let(:message) { "arn:aws:iam::123456789012:role/AuthorizedRole" }
|
38
40
|
let(:size) { "123344" }
|
@@ -43,18 +45,22 @@ describe LogStash::Inputs::S3SNSSQS do
|
|
43
45
|
subject do
|
44
46
|
LogStash::Inputs::S3SNSSQS.new(config)
|
45
47
|
end
|
48
|
+
# end
|
46
49
|
let(:queue) { [] }
|
47
50
|
before do
|
48
51
|
@codec = LogStash::Codecs::JSONStream.new
|
49
52
|
@codec.charset = "UTF-8"
|
50
|
-
|
53
|
+
@codec_factory = CodecFactory.new(@logger, {
|
54
|
+
default_codec: @codec,
|
55
|
+
codec_by_folder: @codec_by_folder
|
56
|
+
})
|
57
|
+
expect( subject.process(record, logstash_event_queue) ).to be true
|
51
58
|
$stderr.puts "method #{queue.to_s}"
|
52
59
|
end
|
53
60
|
|
54
|
-
it '.process_local_log => process compressed log file and verfied logstash event queue with the correct number of events' do
|
55
|
-
|
56
|
-
|
57
|
-
end
|
58
|
-
|
61
|
+
#it '.process_local_log => process compressed log file and verfied logstash event queue with the correct number of events' do
|
62
|
+
# expect( queue.size ).to eq(38)
|
63
|
+
# expect( queue.clear).to be_empty
|
64
|
+
#end
|
59
65
|
end
|
60
66
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: logstash-input-s3-sns-sqs
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.1.
|
4
|
+
version: 2.1.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Christian Herweg
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-
|
11
|
+
date: 2020-08-31 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
requirement: !ruby/object:Gem::Requirement
|