logstash-input-s3sqs 1.0.2 → 1.0.3

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: dc2abca41f6c8e2391970c664e12e20a41ec3c86
4
- data.tar.gz: 31fd27a7048dafe8f5ee6b9ef57aa2674f53336d
3
+ metadata.gz: 0bc3f016a0e987f5299a013d717f89f92b36cc66
4
+ data.tar.gz: 41ff3344f0114535e7bf699ba99f2770889e9e4d
5
5
  SHA512:
6
- metadata.gz: e174ca0a264e7788135d224157a5bd06ef886dae4640472d12707417352c2afc002134ffe03e7d481e9b4b579a138c5f7d295ea993b6644fe5a9f7a7f6388563
7
- data.tar.gz: 69c44afedd3714bafb341ce72b3c188e6e6d5682ce91bd19cb1079fcb46e66a71cdfad9c7a72b33899069fa80ec57c094a779e3a3e7fad8de8880fd64b48e4a4
6
+ metadata.gz: cd6ceebadbfe378d7e83c55c1d8912ee5dbf294e9ea1dce5f16be8455797a6aed5d35e1cf78ea8cc2371ce16d3392e5ee2bdacdb05db0600878fe87204ee2acf
7
+ data.tar.gz: 97ca5b6b89bca7631e74b1377c9cf52526c3bff12aaddd827eda3cf773257dcbccaade6f60fabc394d88c9265bf0a63a7b1ad6da0540cbed5d172086460da9b6
data/CHANGELOG.md CHANGED
@@ -1,6 +1,16 @@
1
1
  # 1.0.0
2
+
2
3
  - Initial Release
4
+
3
5
  # 1.0.1
6
+
4
7
  - same (because of screwed up rubygems.org release)
8
+
5
9
  # 1.0.2
10
+
6
11
  - fix for broken UTF-8 (so we won't lose a whole s3 log file because of a single invalid line, ruby's split will die on those)
12
+
13
+ # 1.0.3
14
+
15
+ - added some metadata to the event (bucket and object name as commited by joshuaspence)
16
+ - also try to unzip files ending with ".gz" (ALB logs are zipped but not marked with proper Content-Encoding)
data/CONTRIBUTORS CHANGED
@@ -2,7 +2,8 @@ The following is a list of people who have contributed ideas, code, bug
2
2
  reports, or in general have helped logstash along its way.
3
3
 
4
4
  Contributors:
5
- * Heiko Finzel (Heiko-san)
5
+ * joshuaspence (event metadata)
6
+ * Heiko-san (initial contributor)
6
7
  * logstash-input-sqs plugin as code base
7
8
 
8
9
  Note: If you've sent us patches, bug reports, or otherwise contributed to
@@ -26,7 +26,7 @@ require "logstash/errors"
26
26
  # This plugin is meant for high availability setups, in contrast to logstash-input-s3 you can safely
27
27
  # use multiple logstash nodes, since the usage of sqs will ensure that each logfile is processed
28
28
  # only once and no file will get lost on node failure or downscaling for auto-scaling groups.
29
- # (You should use a "Message Retention Period" >= 4 days for your sqs to ensure you can survive
29
+ # (You should use a "Message Retention Period" >= 4 days for your sqs to ensure you can survive
30
30
  # a weekend of faulty log file processing)
31
31
  # The plugin will not delete objects from s3 buckets, so make sure to have a reasonable "Lifecycle"
32
32
  # configured for your buckets, which should keep the files at least "Message Retention Period" days.
@@ -37,7 +37,7 @@ require "logstash/errors"
37
37
  # (The plugin supports gzipped content if it is marked with "contend-encoding: gzip" as it is the
38
38
  # case for cloudtrail logs)
39
39
  #
40
- # The logstash node therefore must have sqs permissions + the permissions to download objects
40
+ # The logstash node therefore must have sqs permissions + the permissions to download objects
41
41
  # from the s3 buckets that send events to the queue.
42
42
  # (If logstash nodes are running on EC2 you should use a ServerRole to provide permissions)
43
43
  # [source,json]
@@ -107,20 +107,20 @@ class LogStash::Inputs::S3SQS < LogStash::Inputs::Threadable
107
107
  end
108
108
 
109
109
  def polling_options
110
- {
110
+ {
111
111
  # we will query 1 message at a time, so we can ensure correct error handling if we can't download a single file correctly
112
112
  # (we will throw :skip_delete if download size isn't correct to process the event again later
113
113
  # -> set a reasonable "Default Visibility Timeout" for your queue, so that there's enough time to process the log files)
114
- :max_number_of_messages => 1,
114
+ :max_number_of_messages => 1,
115
115
  # we will use the queue's setting, a good value is 10 seconds
116
116
  # (to ensure fast logstash shutdown on the one hand and few api calls on the other hand)
117
- :wait_time_seconds => nil,
117
+ :wait_time_seconds => nil,
118
118
  }
119
119
  end
120
120
 
121
121
  def handle_message(message, queue)
122
122
  hash = JSON.parse message.body
123
- # there may be test events sent from the s3 bucket which won't contain a Records array,
123
+ # there may be test events sent from the s3 bucket which won't contain a Records array,
124
124
  # we will skip those events and remove them from queue
125
125
  if hash['Records'] then
126
126
  # typically there will be only 1 record per event, but since it is an array we will
@@ -143,7 +143,7 @@ class LogStash::Inputs::S3SQS < LogStash::Inputs::Threadable
143
143
  if response.content_length == record['s3']['object']['size'] then
144
144
  body = response.body
145
145
  # if necessary unzip
146
- if response.content_encoding == "gzip" then
146
+ if response.content_encoding == "gzip" or record['s3']['object']['key'].end_with?(".gz") then
147
147
  begin
148
148
  temp = Zlib::GzipReader.new(body)
149
149
  rescue => e
@@ -158,6 +158,10 @@ class LogStash::Inputs::S3SQS < LogStash::Inputs::Threadable
158
158
  lines.each do |line|
159
159
  @codec.decode(line) do |event|
160
160
  decorate(event)
161
+
162
+ event['[@metadata][s3_bucket_name]'] = record['s3']['bucket']['name']
163
+ event['[@metadata][s3_object_key]'] = record['s3']['object']['key']
164
+
161
165
  queue << event
162
166
  end
163
167
  end
@@ -208,7 +212,7 @@ class LogStash::Inputs::S3SQS < LogStash::Inputs::Threadable
208
212
  rescue Aws::SQS::Errors::ServiceError => e
209
213
  @logger.warn("Aws::SQS::Errors::ServiceError ... retrying SQS request with exponential backoff", :queue => @queue, :sleep_time => sleep_time, :error => e)
210
214
  sleep(next_sleep)
211
- next_sleep = next_sleep > max_time ? sleep_time : sleep_time * BACKOFF_FACTOR
215
+ next_sleep = next_sleep > max_time ? sleep_time : sleep_time * BACKOFF_FACTOR
212
216
  retry
213
217
  end
214
218
  end
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = 'logstash-input-s3sqs'
3
- s.version = '1.0.2'
3
+ s.version = '1.0.3'
4
4
  s.licenses = ['Apache License (2.0)']
5
5
  s.summary = "Get logs from AWS s3 buckets as issued by an object-created event via 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"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: logstash-input-s3sqs
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.2
4
+ version: 1.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Heiko Finzel
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-04-03 00:00:00.000000000 Z
11
+ date: 2016-11-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  requirement: !ruby/object:Gem::Requirement