logstash-output-awslogs 1.1.0 → 1.1.1

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
  SHA256:
3
- metadata.gz: 35a2986de71192feddeed31243d6df14b3529466c3d9322247f5636b5d281a37
4
- data.tar.gz: 54bfbc0840676ec0c6d61d7c55cb6f657af2132d1e7bdee988361db0ebc33758
3
+ metadata.gz: b0e70a243f0906f2799aab77d0dbf1f29b7e07c6bea94485c37aa681dccf8b8f
4
+ data.tar.gz: 0f1621ab83b6955c5844857a82e58ec03581dbc0782c345d63cb4a9665dbd09f
5
5
  SHA512:
6
- metadata.gz: ee764d98dbcb421e69765f516374c574204674a56f3e348f62b3656135ba8509ae3ff10a1550ed60152bb4579e3a959d2474ab6701069f36f9ad5d3385b68fe4
7
- data.tar.gz: 48b68fbe90554fc9807d9fa3bea6b1504b721729d512df9e2f392fdd70b53ad9c78a69531a62e7fcda9700ae9b7d1e0d34f054d2e0bd8d89005b568c88885679
6
+ metadata.gz: c9dbad4911570e8f125209a616f91ec835b2b7b339041068d7521db71c220058a11da0853b0108df0201d8c59656383f427ca450f4610f584d0298b548f1ed5d
7
+ data.tar.gz: 47fd4a9f146e9c42051b3744164f64d6cbfd3c651e4c7128926f9e48035a097ac9824d171c668edd03b357b65b8fbfee4d3a0c7305328ece96129135dafc33a5
data/CHANGELOG.md CHANGED
@@ -1,2 +1,5 @@
1
1
  ## 0.1.0
2
2
  - Plugin created with the logstash plugin generator
3
+
4
+ ## 1.1.1
5
+ - First fully working version.
data/CONTRIBUTORS CHANGED
@@ -3,6 +3,7 @@ reports, or in general have helped logstash along its way.
3
3
 
4
4
  Contributors:
5
5
  * - Ricky Cook (rickycook)
6
+ * - Anton Klyba (anarhyst266)
6
7
 
7
8
  Note: If you've sent us patches, bug reports, or otherwise contributed to
8
9
  Logstash, and you aren't on the list above and want to be, please let us know
data/Gemfile CHANGED
@@ -1,2 +1,3 @@
1
1
  source 'https://rubygems.org'
2
- gemspec
2
+ gemspec
3
+ gem 'rubocop', group: 'development'
@@ -4,10 +4,10 @@ require 'logstash/outputs/base'
4
4
  require 'logstash/namespace'
5
5
  require 'logstash/plugin_mixins/aws_config'
6
6
  require 'aws-sdk-cloudwatchlogs'
7
+ require 'json'
7
8
 
8
9
  Aws.eager_autoload!
9
10
 
10
- # An awslogs output that does nothing.
11
11
  class LogStash::Outputs::Awslogs < LogStash::Outputs::Base
12
12
  include LogStash::PluginMixins::AwsConfig::V2
13
13
 
@@ -18,19 +18,16 @@ class LogStash::Outputs::Awslogs < LogStash::Outputs::Base
18
18
  config :log_stream_name, validate: :string, required: true
19
19
 
20
20
  public
21
-
22
21
  def register
23
22
  @client = Aws::CloudWatchLogs::Client.new(aws_options_hash)
24
23
  @next_sequence_tokens = {}
25
24
  end # def register
26
25
 
27
26
  public
28
-
29
- def multi_receive_encoded(events_and_encoded)
27
+ def multi_receive(events)
30
28
  to_send = {}
31
- sequence_tokens = {}
32
29
 
33
- events_and_encoded.each do |event, encoded|
30
+ events.each do |event|
34
31
  event_log_stream_name = event.sprintf(log_stream_name)
35
32
  event_log_group_name = event.sprintf(log_group_name)
36
33
 
@@ -38,17 +35,10 @@ class LogStash::Outputs::Awslogs < LogStash::Outputs::Base
38
35
  unless to_send.keys.include? next_sequence_token_key
39
36
  to_send.store(next_sequence_token_key, [])
40
37
  end
41
- if event.get('message') && !event.get('message').empty?
42
- to_send[next_sequence_token_key].push(
43
- timestamp: (event.timestamp.time.to_f * 1000).to_int,
44
- message: event.get('message')
45
- )
46
- else
47
- to_send[next_sequence_token_key].push(
48
- timestamp: (event.timestamp.time.to_f * 1000).to_int,
49
- message: encoded
50
- )
51
- end
38
+ to_send[next_sequence_token_key].push(
39
+ timestamp: (event.timestamp.time.to_f * 1000).to_int,
40
+ message: event.to_hash.sort.to_h.to_json
41
+ )
52
42
  end
53
43
 
54
44
 
@@ -57,6 +47,8 @@ class LogStash::Outputs::Awslogs < LogStash::Outputs::Base
57
47
  event_log_stream_name = event_log_names[1]
58
48
  next_sequence_token_key = [event_log_group_name, event_log_stream_name]
59
49
 
50
+ log_events.sort_by!{ |event| event[:timestamp] }
51
+
60
52
  ident_opts = {
61
53
  log_group_name: event_log_group_name,
62
54
  log_stream_name: event_log_stream_name
@@ -64,32 +56,31 @@ class LogStash::Outputs::Awslogs < LogStash::Outputs::Base
64
56
  send_opts = ident_opts.merge(
65
57
  log_events: log_events
66
58
  )
67
-
68
59
  if @next_sequence_tokens.keys.include? next_sequence_token_key
69
60
  send_opts[:sequence_token] = @next_sequence_tokens[next_sequence_token_key]
61
+ end
62
+ begin
63
+ resp = @client.put_log_events(send_opts)
64
+ @next_sequence_tokens.store(next_sequence_token_key, resp.next_sequence_token)
65
+ rescue Aws::CloudWatchLogs::Errors::ResourceNotFoundException
66
+ @logger.info('Will create log group/stream and retry')
67
+ begin
68
+ @client.create_log_group({log_group_name: send_opts[:log_group_name]})
69
+ rescue Aws::CloudWatchLogs::Errors::ResourceAlreadyExistsException
70
+ @logger.info("Log group #{send_opts[:log_group_name]} already exists")
71
+ end
70
72
  begin
71
- resp = @client.put_log_events(send_opts)
72
- @next_sequence_tokens.store(next_sequence_token_key, resp.next_sequence_token)
73
- rescue Aws::CloudWatchLogs::Errors::ResourceNotFoundException => e
74
- @logger.info('Will create log group/stream and retry')
75
- begin
76
- @client.create_log_group({log_group_name: send_opts[:log_group_name]})
77
- rescue Aws::CloudWatchLogs::Errors::ResourceAlreadyExistsException => e
78
- @logger.info("Log group #{send_opts[:log_group_name]} already exists")
79
- end
80
- begin
81
- @client.create_log_stream({log_group_name: send_opts[:log_group_name], log_stream_name: send_opts[:log_stream_name]})
82
- rescue Aws::CloudWatchLogs::Errors::ResourceAlreadyExistsException => e
83
- @logger.info("Log stream #{send_opts[:log_stream_name]} already exists")
84
- end
85
- retry
86
- rescue Aws::CloudWatchLogs::Errors::InvalidSequenceTokenException => e
87
- send_opts[:sequence_token] = e.expected_sequence_token
88
- retry
89
- rescue Aws::CloudWatchLogs::Errors::ThrottlingException => e
90
- @logger.info('Logs throttling, retry')
91
- retry
73
+ @client.create_log_stream({log_group_name: send_opts[:log_group_name], log_stream_name: send_opts[:log_stream_name]})
74
+ rescue Aws::CloudWatchLogs::Errors::ResourceAlreadyExistsException
75
+ @logger.info("Log stream #{send_opts[:log_stream_name]} already exists")
92
76
  end
77
+ retry
78
+ rescue Aws::CloudWatchLogs::Errors::InvalidSequenceTokenException => e
79
+ send_opts[:sequence_token] = e.expected_sequence_token
80
+ retry
81
+ rescue Aws::CloudWatchLogs::Errors::ThrottlingException
82
+ @logger.info('Logs throttling, retry')
83
+ retry
93
84
  end
94
85
  end
95
86
  end # def multi_receive_encodeds
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = 'logstash-output-awslogs'
3
- s.version = '1.1.0'
3
+ s.version = '1.1.1'
4
4
  s.licenses = ['Apache-2.0']
5
5
  s.summary = 'Writes events to AWS CloudWatch logs.'
6
6
  s.homepage = 'https://github.com/Anarhyst266/logstash-output-awslogs'
@@ -21,5 +21,6 @@ Gem::Specification.new do |s|
21
21
  s.add_runtime_dependency "logstash-codec-plain"
22
22
  s.add_runtime_dependency "aws-sdk-cloudwatchlogs", '~> 1'
23
23
  s.add_runtime_dependency "logstash-integration-aws"
24
+ s.add_runtime_dependency "json"
24
25
  s.add_development_dependency "logstash-devutils"
25
26
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: logstash-output-awslogs
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.0
4
+ version: 1.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Anton Klyba
@@ -66,6 +66,20 @@ dependencies:
66
66
  - - ">="
67
67
  - !ruby/object:Gem::Version
68
68
  version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: json
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
69
83
  - !ruby/object:Gem::Dependency
70
84
  name: logstash-devutils
71
85
  requirement: !ruby/object:Gem::Requirement