logstash-output-awslogs 0.1.6 → 0.1.7

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: 20482395ce7059fb5ceb9939d94d8447fe351af6
4
- data.tar.gz: 67538d248b15197a75495e6642544bfbe3a92f38
3
+ metadata.gz: ca3b7070b91420f6888420798778b06f9e5b2c48
4
+ data.tar.gz: 426f9a963a1436da065a0559b774c66a19441ce9
5
5
  SHA512:
6
- metadata.gz: e07490bfb631acb80141119de3a34abc789eb3c4fb23e5cc71f5c070dbac11f21b254d54516d18f6ccd60383b9f94e35d4688d0ba79b0c47d70d50e7d3b6fe83
7
- data.tar.gz: 17ed32f2c494c398618054ce9ed2698848a717a9c1d444e3f82785110a172ea65e5889af1b0b80b79539bff258c57fc5952b67193ebc6ecb5eff01c65d398b8d
6
+ metadata.gz: 04e400162e510b16b01b6699052569304bbf496f4fdc7f9c7cca1d7a5fabd3051e59c34e032e130a4db2d454818fff923aa26d9c0176a68aaeedfbd2e91fe5b2
7
+ data.tar.gz: 75bb11ef3a4cf7651dedddc5d76b1b35bf245fdf7d846c5bc4510ab3a5dedd45b63b54f56662dd0281a51ecd6ac5752e7afd35a0eb2d1bda3b41dc193114b643
@@ -25,6 +25,7 @@ class LogStash::Outputs::Awslogs < LogStash::Outputs::Base
25
25
  public
26
26
  def multi_receive_encoded(events_and_encoded)
27
27
  to_send = {}
28
+ sequence_tokens = {}
28
29
 
29
30
  events_and_encoded.each do |event, encoded|
30
31
  event_log_stream_name = event.sprintf(log_stream_name)
@@ -39,6 +40,42 @@ class LogStash::Outputs::Awslogs < LogStash::Outputs::Base
39
40
  message: event.get("message"),
40
41
  })
41
42
  end
43
+
44
+ to_send.each do |event_log_names, _events|
45
+ event_log_group_name = event_log_names[0]
46
+ event_log_stream_name = event_log_names[1]
47
+ unless sequence_tokens.keys.include? event_log_group_name
48
+ begin
49
+ @client.describe_log_streams({log_group_name: event_log_group_name}).each do |response|
50
+ response.log_streams.each do |log_stream_data|
51
+ sequence_tokens[event_log_group_name].push({ "#{log_stream_data.log_stream_name}": "#{log_stream_data.upload_sequence_token}"})
52
+ end
53
+ end
54
+ rescue Aws::CloudWatchLogs::Errors::ResourceNotFoundException => e
55
+ @logger.info("Will create log group/stream and retry")
56
+ begin
57
+ @client.create_log_group(:log_group_name => send_opts[:log_group_name])
58
+ rescue Aws::CloudWatchLogs::Errors::ResourceAlreadyExistsException => e
59
+ @logger.info("Log group #{send_opts[:log_group_name]} already exists")
60
+ rescue Exception => e
61
+ @logger.error(e)
62
+ end
63
+ begin
64
+ @client.create_log_stream(:log_group_name => send_opts[:log_group_name], :log_stream_name => send_opts[:log_stream_name])
65
+ rescue Aws::CloudWatchLogs::Errors::ResourceAlreadyExistsException => e
66
+ @logger.info("Log stream #{send_opts[:log_stream_name]} already exists")
67
+ rescue Exception => e
68
+ @logger.error(e)
69
+ end
70
+ retry
71
+ rescue Aws::CloudWatchLogs::Errors::ThrottlingException => e
72
+ @logger.info("Logs throttling, retry")
73
+ retry
74
+ end
75
+ end
76
+ end
77
+
78
+
42
79
  to_send.each do |event_log_names, log_events|
43
80
  event_log_group_name = event_log_names[0]
44
81
  event_log_stream_name = event_log_names[1]
@@ -54,22 +91,11 @@ class LogStash::Outputs::Awslogs < LogStash::Outputs::Base
54
91
 
55
92
  if @next_sequence_tokens.keys.include? next_sequence_token_key
56
93
  send_opts[:sequence_token] = @next_sequence_tokens[next_sequence_token_key]
94
+ elsif sequence_tokens[event_log_group_name].keys.include? event_log_stream_name
95
+ send_opts[:sequence_token] = sequence_tokens[event_log_group_name][event_log_stream_name]
57
96
  else
58
97
  begin
59
- resp = @client.describe_log_streams({
60
- log_group_name: event_log_group_name,
61
- log_stream_name_prefix: event_log_stream_name,
62
- })
63
- if resp.log_streams.length < 1
64
98
  @client.create_log_stream(ident_opts)
65
- else
66
- resp.log_streams.each do |log_stream_data|
67
- if log_stream_data.log_stream_name == event_log_stream_name
68
- send_opts[:sequence_token] = log_stream_data.upload_sequence_token
69
- break
70
- end
71
- end
72
- end
73
99
  rescue Aws::CloudWatchLogs::Errors::ResourceNotFoundException => e
74
100
  @logger.info("Will create log group/stream and retry")
75
101
  begin
@@ -88,7 +114,7 @@ class LogStash::Outputs::Awslogs < LogStash::Outputs::Base
88
114
  end
89
115
  retry
90
116
  rescue Aws::CloudWatchLogs::Errors::ThrottlingException => e
91
- @logger.info("Logs throttling, wait 1 sec")
117
+ @logger.info("Logs throttling, retry")
92
118
  retry
93
119
  end
94
120
  end
@@ -114,7 +140,7 @@ class LogStash::Outputs::Awslogs < LogStash::Outputs::Base
114
140
  # TODO: handle rejected events with debug message
115
141
  @next_sequence_tokens.store(next_sequence_token_key, resp.next_sequence_token)
116
142
  rescue Aws::CloudWatchLogs::Errors::ThrottlingException => e
117
- @logger.info("Logs throttling, wait 1 sec")
143
+ @logger.info("Logs throttling, retry")
118
144
  retry
119
145
  end
120
146
  end
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = 'logstash-output-awslogs'
3
- s.version = '0.1.6'
3
+ s.version = '0.1.7'
4
4
  s.licenses = ['Apache-2.0']
5
5
  s.summary = 'Writes events to AWS CloudWatch logs.'
6
6
  s.homepage = 'https://github.com/rickycook/logstash-output-awslogs'
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: 0.1.6
4
+ version: 0.1.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Anton Klyba