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

Sign up to get free protection for your applications and to get access to all the features.
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