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:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b61338555b31dcd2adc46c2942735ec5f06e3adb
|
4
|
+
data.tar.gz: e7fb2aa5337980e1f417577f920ee209f8692f41
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d762517f069ed20970b7cae2c7ed5f7969c8a917136de6a0327fa7375789886f42225e794faa01340cf99b6ec063fb9d2a8ee3793ead4ca9a32425bdb1819d65
|
7
|
+
data.tar.gz: 9a6373471d2d97b995de4c8911756ea7f6cc87702d4454c25de77f0c6ad75d8d31e88289867e1b7b73033f20dc546fd691b1b07bcfd634329dd702ba05097921
|
@@ -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 |
|
106
|
-
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
|
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
|
-
|
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
|
-
@
|
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.
|
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
|
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:
|
149
|
+
version: 1.3.1
|
150
150
|
requirements: []
|
151
151
|
rubyforge_project:
|
152
|
-
rubygems_version: 2.6.
|
152
|
+
rubygems_version: 2.6.8
|
153
153
|
signing_key:
|
154
154
|
specification_version: 4
|
155
155
|
summary: CloudWatch Logs Plugin for Fluentd
|