logstash-output-awslogs 1.1.0 → 1.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 35a2986de71192feddeed31243d6df14b3529466c3d9322247f5636b5d281a37
4
- data.tar.gz: 54bfbc0840676ec0c6d61d7c55cb6f657af2132d1e7bdee988361db0ebc33758
3
+ metadata.gz: 3f29bdc8b680f033bac338ae4613bc72e73403fbc7664c4c8eba78a0f497fdf3
4
+ data.tar.gz: 9b1e38924b1a1994ef71b69a4475f01d99e72345182b5aa1e8a0194b84cf98d6
5
5
  SHA512:
6
- metadata.gz: ee764d98dbcb421e69765f516374c574204674a56f3e348f62b3656135ba8509ae3ff10a1550ed60152bb4579e3a959d2474ab6701069f36f9ad5d3385b68fe4
7
- data.tar.gz: 48b68fbe90554fc9807d9fa3bea6b1504b721729d512df9e2f392fdd70b53ad9c78a69531a62e7fcda9700ae9b7d1e0d34f054d2e0bd8d89005b568c88885679
6
+ metadata.gz: 9900328521269d53376e645216989c7c01647f26c1290b8dc88edd5732521a0555fadeb00ad0f4b9674c8b5336b6b550bf62715e92e3be5cd4ec3b5142292cca
7
+ data.tar.gz: 51d83fb4c44a8850b848dbc4900f96db80c0fa2521b7b9cf4726bfed3cf97ef7cb72d45ea69413d8f54062fc81773789d58c07177349690fa3766f9b92a7c548
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,9 @@ 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
- Aws.eager_autoload!
9
9
 
10
- # An awslogs output that does nothing.
11
10
  class LogStash::Outputs::Awslogs < LogStash::Outputs::Base
12
11
  include LogStash::PluginMixins::AwsConfig::V2
13
12
 
@@ -18,19 +17,16 @@ class LogStash::Outputs::Awslogs < LogStash::Outputs::Base
18
17
  config :log_stream_name, validate: :string, required: true
19
18
 
20
19
  public
21
-
22
20
  def register
23
21
  @client = Aws::CloudWatchLogs::Client.new(aws_options_hash)
24
22
  @next_sequence_tokens = {}
25
23
  end # def register
26
24
 
27
25
  public
28
-
29
- def multi_receive_encoded(events_and_encoded)
26
+ def multi_receive(events)
30
27
  to_send = {}
31
- sequence_tokens = {}
32
28
 
33
- events_and_encoded.each do |event, encoded|
29
+ events.each do |event|
34
30
  event_log_stream_name = event.sprintf(log_stream_name)
35
31
  event_log_group_name = event.sprintf(log_group_name)
36
32
 
@@ -38,17 +34,10 @@ class LogStash::Outputs::Awslogs < LogStash::Outputs::Base
38
34
  unless to_send.keys.include? next_sequence_token_key
39
35
  to_send.store(next_sequence_token_key, [])
40
36
  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
37
+ to_send[next_sequence_token_key].push(
38
+ timestamp: (event.timestamp.time.to_f * 1000).to_int,
39
+ message: event.to_hash.sort.to_h.to_json
40
+ )
52
41
  end
53
42
 
54
43
 
@@ -57,6 +46,8 @@ class LogStash::Outputs::Awslogs < LogStash::Outputs::Base
57
46
  event_log_stream_name = event_log_names[1]
58
47
  next_sequence_token_key = [event_log_group_name, event_log_stream_name]
59
48
 
49
+ log_events.sort_by!{ |event| event[:timestamp] }
50
+
60
51
  ident_opts = {
61
52
  log_group_name: event_log_group_name,
62
53
  log_stream_name: event_log_stream_name
@@ -64,32 +55,31 @@ class LogStash::Outputs::Awslogs < LogStash::Outputs::Base
64
55
  send_opts = ident_opts.merge(
65
56
  log_events: log_events
66
57
  )
67
-
68
58
  if @next_sequence_tokens.keys.include? next_sequence_token_key
69
59
  send_opts[:sequence_token] = @next_sequence_tokens[next_sequence_token_key]
60
+ end
61
+ begin
62
+ resp = @client.put_log_events(send_opts)
63
+ @next_sequence_tokens.store(next_sequence_token_key, resp.next_sequence_token)
64
+ rescue Aws::CloudWatchLogs::Errors::ResourceNotFoundException
65
+ @logger.info('Will create log group/stream and retry')
66
+ begin
67
+ @client.create_log_group({log_group_name: send_opts[:log_group_name]})
68
+ rescue Aws::CloudWatchLogs::Errors::ResourceAlreadyExistsException
69
+ @logger.info("Log group #{send_opts[:log_group_name]} already exists")
70
+ end
70
71
  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
72
+ @client.create_log_stream({log_group_name: send_opts[:log_group_name], log_stream_name: send_opts[:log_stream_name]})
73
+ rescue Aws::CloudWatchLogs::Errors::ResourceAlreadyExistsException
74
+ @logger.info("Log stream #{send_opts[:log_stream_name]} already exists")
92
75
  end
76
+ retry
77
+ rescue Aws::CloudWatchLogs::Errors::InvalidSequenceTokenException => e
78
+ send_opts[:sequence_token] = e.expected_sequence_token
79
+ retry
80
+ rescue Aws::CloudWatchLogs::Errors::ThrottlingException
81
+ @logger.info('Logs throttling, retry')
82
+ retry
93
83
  end
94
84
  end
95
85
  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.2'
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,14 +1,14 @@
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.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Anton Klyba
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-06-17 00:00:00.000000000 Z
11
+ date: 2022-12-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: logstash-core-plugin-api
@@ -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