fluent-plugin-cloudwatch-logs 0.4.1 → 0.4.2.pre

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: 9e629c8fa1e69f1fc25b63be72d3891bed73eb92
4
- data.tar.gz: cf4b8011d1c17117e09e00c421540717fb02064a
3
+ metadata.gz: b61338555b31dcd2adc46c2942735ec5f06e3adb
4
+ data.tar.gz: e7fb2aa5337980e1f417577f920ee209f8692f41
5
5
  SHA512:
6
- metadata.gz: 56f19ed188cfae7f5672a2b3ac425c5c03ff43a454bdfa4a920df6ca368871b79c646e55dd8429340735c91c802b1740d74982430bc0dba084bf4df90b292db6
7
- data.tar.gz: 05d706f093a4d4815b510df65730e85cabb5915adc66db0b7513596d936f05ad10651d2d8c3687f7da8125ff860ac719f1cd7c7ac4d03339ad968ab7127a175d
6
+ metadata.gz: d762517f069ed20970b7cae2c7ed5f7969c8a917136de6a0327fa7375789886f42225e794faa01340cf99b6ec063fb9d2a8ee3793ead4ca9a32425bdb1819d65
7
+ data.tar.gz: 9a6373471d2d97b995de4c8911756ea7f6cc87702d4454c25de77f0c6ad75d8d31e88289867e1b7b73033f20dc546fd691b1b07bcfd634329dd702ba05097921
@@ -2,7 +2,7 @@ module Fluent
2
2
  module Plugin
3
3
  module Cloudwatch
4
4
  module Logs
5
- VERSION = "0.4.1"
5
+ VERSION = "0.4.2.pre"
6
6
  end
7
7
  end
8
8
  end
@@ -102,8 +102,8 @@ module Fluent
102
102
 
103
103
  if @use_log_stream_name_prefix
104
104
  log_streams = describe_log_streams
105
- log_streams.each do |log_stram|
106
- log_stream_name = log_stram.log_stream_name
105
+ log_streams.each do |log_stream|
106
+ log_stream_name = log_stream.log_stream_name
107
107
  events = get_events(log_stream_name)
108
108
  events.each do |event|
109
109
  emit(log_stream_name, event)
@@ -151,7 +151,7 @@ module Fluent
151
151
  request[:log_stream_name_prefix] = @log_stream_name
152
152
  response = @logs.describe_log_streams(request)
153
153
  if log_streams
154
- log_streams << response.log_streams
154
+ log_streams.concat(response.log_streams)
155
155
  else
156
156
  log_streams = response.log_streams
157
157
  end
@@ -1,4 +1,5 @@
1
1
  require 'fluent/output'
2
+ require 'thread'
2
3
 
3
4
  module Fluent
4
5
  require 'fluent/mixin/config_placeholders'
@@ -28,6 +29,7 @@ module Fluent
28
29
  config_param :put_log_events_retry_wait, :time, default: 1.0
29
30
  config_param :put_log_events_retry_limit, :integer, default: 17
30
31
  config_param :put_log_events_disable_retry_limit, :bool, default: false
32
+ config_param :concurrency, :integer, default: 1
31
33
 
32
34
  MAX_EVENTS_SIZE = 1_048_576
33
35
  MAX_EVENT_SIZE = 256 * 1024
@@ -68,6 +70,7 @@ module Fluent
68
70
  options[:http_proxy] = @http_proxy if @http_proxy
69
71
  @logs ||= Aws::CloudWatchLogs::Client.new(options)
70
72
  @sequence_tokens = {}
73
+ @store_next_sequence_token_mutex = Mutex.new
71
74
  end
72
75
 
73
76
  def format(tag, time, record)
@@ -75,6 +78,8 @@ module Fluent
75
78
  end
76
79
 
77
80
  def write(chunk)
81
+ queue = Thread::Queue.new
82
+
78
83
  chunk.enum_for(:msgpack_each).select {|tag, time, record|
79
84
  if record.nil?
80
85
  log.warn "record is nil (tag=#{tag})"
@@ -156,8 +161,22 @@ module Fluent
156
161
  # The log events in the batch must be in chronological ordered by their timestamp.
157
162
  # http://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_PutLogEvents.html
158
163
  events = events.sort_by {|e| e[:timestamp] }
159
- put_events_by_chunk(group_name, stream_name, events)
164
+
165
+ queue << [group_name, stream_name, events]
160
166
  }
167
+
168
+ @concurrency.times do
169
+ queue << nil
170
+ end
171
+ threads = @concurrency.times.map do |i|
172
+ Thread.start do
173
+ while job = queue.shift
174
+ group_name, stream_name, events = job
175
+ put_events_by_chunk(group_name, stream_name, events)
176
+ end
177
+ end
178
+ end
179
+ threads.each(&:join)
161
180
  end
162
181
 
163
182
  private
@@ -177,7 +196,9 @@ module Fluent
177
196
  end
178
197
 
179
198
  def store_next_sequence_token(group_name, stream_name, token)
180
- @sequence_tokens[group_name][stream_name] = token
199
+ @store_next_sequence_token_mutex.synchronize do
200
+ @sequence_tokens[group_name][stream_name] = token
201
+ end
181
202
  end
182
203
 
183
204
  def put_events_by_chunk(group_name, stream_name, events)
@@ -224,17 +245,20 @@ module Fluent
224
245
  response = nil
225
246
  retry_count = 0
226
247
  until response
227
- log.debug "Calling PutLogEvents API", {
228
- "group" => group_name,
229
- "stream" => stream_name,
230
- "events_count" => events.size,
231
- "events_bytesize" => events_bytesize,
232
- "sequence_token" => token,
233
- }
234
-
235
248
  args[:sequence_token] = token if token
249
+
236
250
  begin
251
+ t = Time.now
237
252
  response = @logs.put_log_events(args)
253
+ log.debug "Called PutLogEvents API", {
254
+ "group" => group_name,
255
+ "stream" => stream_name,
256
+ "events_count" => events.size,
257
+ "events_bytesize" => events_bytesize,
258
+ "sequence_token" => token,
259
+ "thread" => Thread.current.object_id,
260
+ "request_sec" => Time.now - t,
261
+ }
238
262
  rescue Aws::CloudWatchLogs::Errors::InvalidSequenceTokenException, Aws::CloudWatchLogs::Errors::DataAlreadyAcceptedException => err
239
263
  sleep 1 # to avoid too many API calls
240
264
  log_stream = find_log_stream(group_name, stream_name)
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fluent-plugin-cloudwatch-logs
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.1
4
+ version: 0.4.2.pre
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ryota Arai
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-10-07 00:00:00.000000000 Z
11
+ date: 2017-11-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: fluentd
@@ -144,12 +144,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
144
144
  version: '0'
145
145
  required_rubygems_version: !ruby/object:Gem::Requirement
146
146
  requirements:
147
- - - ">="
147
+ - - ">"
148
148
  - !ruby/object:Gem::Version
149
- version: '0'
149
+ version: 1.3.1
150
150
  requirements: []
151
151
  rubyforge_project:
152
- rubygems_version: 2.6.11
152
+ rubygems_version: 2.6.8
153
153
  signing_key:
154
154
  specification_version: 4
155
155
  summary: CloudWatch Logs Plugin for Fluentd