fluent-plugin-cloudwatch-logs 0.4.4 → 0.4.5

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
  SHA256:
3
- metadata.gz: 53b798f8ec98ca39cda1b3df0365abf99c396d64669f63ca95889e97ddbd2cb6
4
- data.tar.gz: bd1ee98498a8b0e438f2a4b78edb0489840fc63b9455c21467aa06c9a2757da6
3
+ metadata.gz: 7f8fe8ec7ee187171451b47e824e14f3c475663bad90624b20c575b9ba7fa9eb
4
+ data.tar.gz: 9adc8de66f127eb20aa14830d88bd6cbc08a684ce8e4bec14543317dd26028df
5
5
  SHA512:
6
- metadata.gz: 5538a8b50f47804f3b9792043c9b1b52128321778730fc39104046f80954510ba9459e6d54eddd9b73a8c76bc307857abd6b1d9eceba82817a2bf6f0dd5234ef
7
- data.tar.gz: cafb782f9b949114813324b0ce1c6be2517242c440a20b90466a7f06c6ce1ff035d4d5973c591229090b2849a1b6ac901456102bff5f2ea1e9b5b80c269dbc10
6
+ metadata.gz: 8ea28c6a7ba48d50891185c767ef5a3317d64964f89d809c643f191826cd092a77d99a12f80d3aafb3031941af1e25e12ea79a0fee374195d9882f3e3fe6bea7
7
+ data.tar.gz: c11a426c35c25ab35ddd066141c4c18e7df7b0f88482d4efd9544877376554001a1b1440e2068c8794bdbe12c7232bb4e07e7d7956e6b047986a68da33dcca1d
data/README.md CHANGED
@@ -65,7 +65,7 @@ Fetch sample log from CloudWatch Logs:
65
65
 
66
66
  ```
67
67
  <match tag>
68
- type cloudwatch_logs
68
+ @type cloudwatch_logs
69
69
  log_group_name log-group-name
70
70
  log_stream_name log-stream-name
71
71
  auto_create_stream true
@@ -107,7 +107,7 @@ Fetch sample log from CloudWatch Logs:
107
107
 
108
108
  ```
109
109
  <source>
110
- type cloudwatch_logs
110
+ @type cloudwatch_logs
111
111
  tag cloudwatch.in
112
112
  log_group_name group
113
113
  log_stream_name stream
@@ -235,7 +235,7 @@ In this case IAM can be used to allow the fluentd instance in one account ("A")
235
235
  ### Configuring the plugin for STS authentication
236
236
  ```
237
237
  <source>
238
- type cloudwatch_logs
238
+ @type cloudwatch_logs
239
239
  region us-east-1 # You must supply a region
240
240
  aws_use_sts true
241
241
  aws_sts_role_arn arn:aws:iam::ACCOUNT-B:role/fluentd
@@ -1,9 +1,9 @@
1
1
  <source>
2
- type forward
2
+ @type forward
3
3
  </source>
4
4
 
5
5
  <source>
6
- type cloudwatch_logs
6
+ @type cloudwatch_logs
7
7
  tag test.cloudwatch_logs.in
8
8
  log_group_name fluent-plugin-cloudwatch-example
9
9
  log_stream_name fluent-plugin-cloudwatch-example
@@ -11,13 +11,13 @@
11
11
  </source>
12
12
 
13
13
  <match test.cloudwatch_logs.out>
14
- type cloudwatch_logs
14
+ @type cloudwatch_logs
15
15
  log_group_name fluent-plugin-cloudwatch-example
16
16
  log_stream_name fluent-plugin-cloudwatch-example
17
17
  auto_create_stream true
18
18
  </match>
19
19
 
20
20
  <match test.cloudwatch_logs.in>
21
- type stdout
21
+ @type stdout
22
22
  </match>
23
23
 
@@ -2,7 +2,7 @@ module Fluent
2
2
  module Plugin
3
3
  module Cloudwatch
4
4
  module Logs
5
- VERSION = "0.4.4"
5
+ VERSION = "0.4.5"
6
6
  end
7
7
  end
8
8
  end
@@ -12,6 +12,9 @@ module Fluent
12
12
 
13
13
  config_param :aws_key_id, :string, :default => nil, :secret => true
14
14
  config_param :aws_sec_key, :string, :default => nil, :secret => true
15
+ config_param :aws_use_sts, :bool, default: false
16
+ config_param :aws_sts_role_arn, :string, default: nil
17
+ config_param :aws_sts_session_name, :string, default: 'fluentd'
15
18
  config_param :region, :string, :default => nil
16
19
  config_param :log_group_name, :string, :default => nil
17
20
  config_param :log_stream_name, :string, :default => nil
@@ -30,6 +33,12 @@ module Fluent
30
33
  config_param :put_log_events_retry_limit, :integer, default: 17
31
34
  config_param :put_log_events_disable_retry_limit, :bool, default: false
32
35
  config_param :concurrency, :integer, default: 1
36
+ config_param :log_group_aws_tags, :hash, default: nil
37
+ config_param :log_group_aws_tags_key, :string, default: nil
38
+ config_param :remove_log_group_aws_tags_key, :bool, default: false
39
+ config_param :retention_in_days, :integer, default: nil
40
+ config_param :retention_in_days_key, :string, default: nil
41
+ config_param :remove_retention_in_days, :bool, default: false
33
42
 
34
43
  MAX_EVENTS_SIZE = 1_048_576
35
44
  MAX_EVENT_SIZE = 256 * 1024
@@ -59,14 +68,31 @@ module Fluent
59
68
  unless [conf['log_stream_name'], conf['use_tag_as_stream'], conf['log_stream_name_key']].compact.size == 1
60
69
  raise ConfigError, "Set only one of log_stream_name, use_tag_as_stream and log_stream_name_key"
61
70
  end
71
+
72
+ if [conf['log_group_aws_tags'], conf['log_group_aws_tags_key']].compact.size > 1
73
+ raise ConfigError, "Set only one of log_group_aws_tags, log_group_aws_tags_key"
74
+ end
75
+
76
+ if [conf['retention_in_days'], conf['retention_in_days_key']].compact.size > 1
77
+ raise ConfigError, "Set only one of retention_in_days, retention_in_days_key"
78
+ end
62
79
  end
63
80
 
64
81
  def start
65
82
  super
66
83
 
67
84
  options = {}
68
- options[:credentials] = Aws::Credentials.new(@aws_key_id, @aws_sec_key) if @aws_key_id && @aws_sec_key
69
85
  options[:region] = @region if @region
86
+
87
+ if @aws_use_sts
88
+ Aws.config[:region] = options[:region]
89
+ options[:credentials] = Aws::AssumeRoleCredentials.new(
90
+ role_arn: @aws_sts_role_arn,
91
+ role_session_name: @aws_sts_session_name
92
+ )
93
+ else
94
+ options[:credentials] = Aws::Credentials.new(@aws_key_id, @aws_sec_key) if @aws_key_id && @aws_sec_key
95
+ end
70
96
  options[:http_proxy] = @http_proxy if @http_proxy
71
97
  @logs ||= Aws::CloudWatchLogs::Client.new(options)
72
98
  @sequence_tokens = {}
@@ -124,8 +150,31 @@ module Fluent
124
150
  end
125
151
 
126
152
  unless log_group_exists?(group_name)
153
+ #rs = [[name, timestamp, record],[name,timestamp,record]]
154
+ #get tags and retention from first record
155
+ #as we create log group only once, values from first record will persist
156
+ record = rs[0][2]
157
+
158
+ awstags = @log_group_aws_tags
159
+ unless @log_group_aws_tags_key.nil?
160
+ if @remove_log_group_aws_tags_key
161
+ awstags = record.delete(@log_group_aws_tags_key)
162
+ else
163
+ awstags = record[@log_group_aws_tags_key]
164
+ end
165
+ end
166
+
167
+ retention_in_days = @retention_in_days
168
+ unless @retention_in_days_key.nil?
169
+ if @remove_retention_in_days_key
170
+ retention_in_days = record.delete(@retention_in_days_key)
171
+ else
172
+ retention_in_days = record[@retention_in_days_key]
173
+ end
174
+ end
175
+
127
176
  if @auto_create_stream
128
- create_log_group(group_name)
177
+ create_log_group(group_name, awstags, retention_in_days)
129
178
  else
130
179
  log.warn "Log group '#{group_name}' does not exist"
131
180
  next
@@ -200,7 +249,7 @@ module Fluent
200
249
  end
201
250
 
202
251
  def store_next_sequence_token(group_name, stream_name, token)
203
- @store_next_sequence_token_mutex.synchronize do
252
+ @store_next_sequence_token_mutex.synchronize do
204
253
  @sequence_tokens[group_name][stream_name] = token
205
254
  end
206
255
  end
@@ -255,6 +304,7 @@ module Fluent
255
304
  begin
256
305
  t = Time.now
257
306
  response = @logs.put_log_events(args)
307
+ log.warn response.rejected_log_events_info if response.rejected_log_events_info != nil
258
308
  log.debug "Called PutLogEvents API", {
259
309
  "group" => group_name,
260
310
  "stream" => stream_name,
@@ -314,15 +364,29 @@ module Fluent
314
364
  store_next_sequence_token(group_name, stream_name, response.next_sequence_token)
315
365
  end
316
366
 
317
- def create_log_group(group_name)
367
+ def create_log_group(group_name, log_group_aws_tags = nil, retention_in_days = nil)
318
368
  begin
319
- @logs.create_log_group(log_group_name: group_name)
369
+ @logs.create_log_group(log_group_name: group_name, tags: log_group_aws_tags)
370
+ unless retention_in_days.nil?
371
+ put_retention_policy(group_name, retention_in_days)
372
+ end
320
373
  @sequence_tokens[group_name] = {}
321
374
  rescue Aws::CloudWatchLogs::Errors::ResourceAlreadyExistsException
322
375
  log.debug "Log group '#{group_name}' already exists"
323
376
  end
324
377
  end
325
378
 
379
+ def put_retention_policy(group_name, retention_in_days)
380
+ begin
381
+ @logs.put_retention_policy({
382
+ log_group_name: group_name,
383
+ retention_in_days: retention_in_days
384
+ })
385
+ rescue Aws::CloudWatchLogs::Errors::InvalidParameterException => error
386
+ log.warn "failed to set retention policy for Log group '#{group_name}' with error #{error.backtrace}"
387
+ end
388
+ end
389
+
326
390
  def create_log_stream(group_name, stream_name)
327
391
  begin
328
392
  @logs.create_log_stream(log_group_name: group_name, log_stream_name: stream_name)
@@ -15,7 +15,7 @@ class CloudwatchLogsInputTest < Test::Unit::TestCase
15
15
 
16
16
  def test_configure
17
17
  d = create_driver(<<-EOC)
18
- type cloudwatch_logs
18
+ @type cloudwatch_logs
19
19
  aws_key_id test_id
20
20
  aws_sec_key test_key
21
21
  region us-east-1
@@ -71,7 +71,7 @@ class CloudwatchLogsInputTest < Test::Unit::TestCase
71
71
 
72
72
  d = create_driver(<<-EOC)
73
73
  tag test
74
- type cloudwatch_logs
74
+ @type cloudwatch_logs
75
75
  log_group_name #{log_group_name}
76
76
  log_stream_name #{log_stream_name}
77
77
  state_file /tmp/state
@@ -116,7 +116,7 @@ class CloudwatchLogsInputTest < Test::Unit::TestCase
116
116
 
117
117
  d = create_driver(<<-EOC)
118
118
  tag test
119
- type cloudwatch_logs
119
+ @type cloudwatch_logs
120
120
  log_group_name #{log_group_name}
121
121
  log_stream_name testprefix
122
122
  use_log_stream_name_prefix true
@@ -141,7 +141,7 @@ class CloudwatchLogsInputTest < Test::Unit::TestCase
141
141
  def default_config
142
142
  <<-EOC
143
143
  tag test
144
- type cloudwatch_logs
144
+ @type cloudwatch_logs
145
145
  log_group_name #{log_group_name}
146
146
  log_stream_name #{log_stream_name}
147
147
  state_file /tmp/state
@@ -17,13 +17,15 @@ class CloudwatchLogsOutputTest < Test::Unit::TestCase
17
17
 
18
18
  def test_configure
19
19
  d = create_driver(<<-EOC)
20
- type cloudwatch_logs
20
+ @type cloudwatch_logs
21
21
  aws_key_id test_id
22
22
  aws_sec_key test_key
23
23
  region us-east-1
24
24
  log_group_name test_group
25
25
  log_stream_name test_stream
26
26
  auto_create_stream false
27
+ log_group_aws_tags { "tagkey": "tagvalue", "tagkey_2": "tagvalue_2"}
28
+ retention_in_days 5
27
29
  EOC
28
30
 
29
31
  assert_equal('test_id', d.instance.aws_key_id)
@@ -32,6 +34,9 @@ class CloudwatchLogsOutputTest < Test::Unit::TestCase
32
34
  assert_equal('test_group', d.instance.log_group_name)
33
35
  assert_equal('test_stream', d.instance.log_stream_name)
34
36
  assert_equal(false, d.instance.auto_create_stream)
37
+ assert_equal("tagvalue", d.instance.log_group_aws_tags.fetch("tagkey"))
38
+ assert_equal("tagvalue_2", d.instance.log_group_aws_tags.fetch("tagkey_2"))
39
+ assert_equal(5, d.instance.retention_in_days)
35
40
  end
36
41
 
37
42
  def test_write
@@ -52,7 +57,7 @@ class CloudwatchLogsOutputTest < Test::Unit::TestCase
52
57
  assert_equal((time.to_i + 1) * 1000, events[1].timestamp)
53
58
  assert_equal('{"cloudwatch":"logs2"}', events[1].message)
54
59
 
55
- assert_match(/Calling PutLogEvents API/, d.instance.log.logs[0])
60
+ assert_match(/Called PutLogEvents API/, d.instance.log.logs[0])
56
61
  end
57
62
 
58
63
  def test_write_utf8
@@ -270,7 +275,7 @@ class CloudwatchLogsOutputTest < Test::Unit::TestCase
270
275
  d.run
271
276
 
272
277
  # Call API once for each stream
273
- assert_equal(2, d.instance.log.logs.select {|l| l =~ /Calling PutLogEvents API/ }.size)
278
+ assert_equal(2, d.instance.log.logs.select {|l| l =~ /Called PutLogEvents API/ }.size)
274
279
 
275
280
  sleep 10
276
281
 
@@ -310,6 +315,188 @@ class CloudwatchLogsOutputTest < Test::Unit::TestCase
310
315
  assert_equal({'cloudwatch' => 'logs1', 'message' => 'message1'}, JSON.parse(events[0].message))
311
316
  end
312
317
 
318
+ def test_log_group_aws_tags
319
+ clear_log_group
320
+
321
+ d = create_driver(<<-EOC)
322
+ #{default_config}
323
+ auto_create_stream true
324
+ use_tag_as_stream true
325
+ log_group_name_key group_name_key
326
+ log_group_aws_tags {"tag1": "value1", "tag2": "value2"}
327
+ EOC
328
+
329
+ records = [
330
+ {'cloudwatch' => 'logs1', 'message' => 'message1', 'group_name_key' => log_group_name},
331
+ {'cloudwatch' => 'logs2', 'message' => 'message1', 'group_name_key' => log_group_name},
332
+ {'cloudwatch' => 'logs3', 'message' => 'message1', 'group_name_key' => log_group_name},
333
+ ]
334
+
335
+ time = Time.now
336
+ records.each_with_index do |record, i|
337
+ d.emit(record, time.to_i + i)
338
+ end
339
+ d.run
340
+
341
+ awstags = get_log_group_tags
342
+ assert_equal("value1", awstags.fetch("tag1"))
343
+ assert_equal("value2", awstags.fetch("tag2"))
344
+ end
345
+
346
+ def test_retention_in_days
347
+ clear_log_group
348
+
349
+ d = create_driver(<<-EOC)
350
+ #{default_config}
351
+ auto_create_stream true
352
+ use_tag_as_stream true
353
+ log_group_name_key group_name_key
354
+ retention_in_days 7
355
+ EOC
356
+
357
+ records = [
358
+ {'cloudwatch' => 'logs1', 'message' => 'message1', 'group_name_key' => log_group_name},
359
+ {'cloudwatch' => 'logs2', 'message' => 'message1', 'group_name_key' => log_group_name},
360
+ {'cloudwatch' => 'logs3', 'message' => 'message1', 'group_name_key' => log_group_name},
361
+ ]
362
+
363
+ time = Time.now
364
+ records.each_with_index do |record, i|
365
+ d.emit(record, time.to_i + i)
366
+ end
367
+ d.run
368
+
369
+ retention = get_log_group_retention_days
370
+ assert_equal(d.instance.retention_in_days, retention)
371
+ end
372
+
373
+ def test_invalid_retention_in_days
374
+ clear_log_group
375
+
376
+ d = create_driver(<<-EOC)
377
+ #{default_config}
378
+ auto_create_stream true
379
+ use_tag_as_stream true
380
+ log_group_name_key group_name_key
381
+ retention_in_days 4
382
+ EOC
383
+
384
+ records = [
385
+ {'cloudwatch' => 'logs1', 'message' => 'message1', 'group_name_key' => log_group_name},
386
+ {'cloudwatch' => 'logs2', 'message' => 'message1', 'group_name_key' => log_group_name},
387
+ {'cloudwatch' => 'logs3', 'message' => 'message1', 'group_name_key' => log_group_name},
388
+ ]
389
+
390
+ time = Time.now
391
+ records.each_with_index do |record, i|
392
+ d.emit(record, time.to_i + i)
393
+ end
394
+ d.run
395
+
396
+ assert_match(/failed to set retention policy for Log group/, d.instance.log.logs[0])
397
+ end
398
+
399
+ def test_log_group_aws_tags_key
400
+ clear_log_group
401
+
402
+ d = create_driver(<<-EOC)
403
+ #{default_config}
404
+ auto_create_stream true
405
+ use_tag_as_stream true
406
+ log_group_name_key group_name_key
407
+ log_group_aws_tags_key aws_tags
408
+ EOC
409
+
410
+ records = [
411
+ {'cloudwatch' => 'logs1', 'message' => 'message1', 'group_name_key' => log_group_name, 'aws_tags' => {"tag1" => "value1", "tag2" => "value2"}},
412
+ {'cloudwatch' => 'logs2', 'message' => 'message1', 'group_name_key' => log_group_name, 'aws_tags' => {"tag1" => "value1", "tag2" => "value2"}},
413
+ {'cloudwatch' => 'logs3', 'message' => 'message1', 'group_name_key' => log_group_name, 'aws_tags' => {"tag1" => "value1", "tag2" => "value2"}}
414
+ ]
415
+
416
+ time = Time.now
417
+ records.each_with_index do |record, i|
418
+ d.emit(record, time.to_i + i)
419
+ end
420
+ d.run
421
+
422
+ awstags = get_log_group_tags
423
+ assert_equal("value1", awstags.fetch("tag1"))
424
+ assert_equal("value2", awstags.fetch("tag2"))
425
+ end
426
+
427
+ def test_log_group_aws_tags_key_same_group_diff_tags
428
+ clear_log_group
429
+
430
+ d = create_driver(<<-EOC)
431
+ #{default_config}
432
+ auto_create_stream true
433
+ use_tag_as_stream true
434
+ log_group_name_key group_name_key
435
+ log_group_aws_tags_key aws_tags
436
+ EOC
437
+
438
+ records = [
439
+ {'cloudwatch' => 'logs1', 'message' => 'message1', 'group_name_key' => log_group_name, 'aws_tags' => {"tag1" => "value1", "tag2" => "value2"}},
440
+ {'cloudwatch' => 'logs3', 'message' => 'message1', 'group_name_key' => log_group_name, 'aws_tags' => {"tag3" => "value3", "tag4" => "value4"}}
441
+ ]
442
+
443
+ time = Time.now
444
+ records.each_with_index do |record, i|
445
+ d.emit(record, time.to_i + i)
446
+ end
447
+ d.run
448
+
449
+ awstags = get_log_group_tags
450
+ assert_equal("value1", awstags.fetch("tag1"))
451
+ assert_equal("value2", awstags.fetch("tag2"))
452
+ assert_raise KeyError do
453
+ awstags.fetch("tag3")
454
+ end
455
+ assert_raise KeyError do
456
+ awstags.fetch("tag4")
457
+ end
458
+ end
459
+
460
+ def test_log_group_aws_tags_key_no_tags
461
+ clear_log_group
462
+
463
+ d = create_driver(<<-EOC)
464
+ #{default_config}
465
+ auto_create_stream true
466
+ log_group_name_key group_name_key
467
+ log_stream_name_key stream_name_key
468
+ remove_log_group_name_key true
469
+ remove_log_stream_name_key true
470
+ log_group_aws_tags_key aws_tags
471
+ EOC
472
+
473
+ stream = log_stream_name
474
+ records = [
475
+ {'cloudwatch' => 'logs1', 'message' => 'message1', 'group_name_key' => log_group_name, 'stream_name_key' => stream},
476
+ {'cloudwatch' => 'logs2', 'message' => 'message2', 'group_name_key' => log_group_name, 'stream_name_key' => stream}
477
+ ]
478
+
479
+ time = Time.now
480
+ records.each_with_index do |record, i|
481
+ d.emit(record, time.to_i + i)
482
+ end
483
+ d.run
484
+
485
+ sleep 10
486
+
487
+ awstags = get_log_group_tags
488
+
489
+ assert_raise KeyError do
490
+ awstags.fetch("tag1")
491
+ end
492
+
493
+ events = get_log_events(log_group_name, stream)
494
+ assert_equal(2, events.size)
495
+ assert_equal(time.to_i * 1000, events[0].timestamp)
496
+ assert_equal({'cloudwatch' => 'logs1', 'message' => 'message1'}, JSON.parse(events[0].message))
497
+ assert_equal({'cloudwatch' => 'logs2', 'message' => 'message2'}, JSON.parse(events[1].message))
498
+ end
499
+
313
500
  def test_retrying_on_throttling_exception
314
501
  resp = mock()
315
502
  resp.expects(:next_sequence_token)
@@ -323,10 +510,9 @@ class CloudwatchLogsOutputTest < Test::Unit::TestCase
323
510
  d.emit({'message' => 'message1'}, time.to_i)
324
511
  d.run
325
512
 
326
- assert_match(/Calling PutLogEvents/, d.instance.log.logs[0])
327
- assert_match(/failed to PutLogEvents/, d.instance.log.logs[1])
328
- assert_match(/Calling PutLogEvents/, d.instance.log.logs[2])
329
- assert_match(/retry succeeded/, d.instance.log.logs[3])
513
+ assert_match(/failed to PutLogEvents/, d.instance.log.logs[0])
514
+ assert_match(/Called PutLogEvents/, d.instance.log.logs[1])
515
+ assert_match(/retry succeeded/, d.instance.log.logs[2])
330
516
  end
331
517
 
332
518
  def test_retrying_on_throttling_exception_and_throw_away
@@ -345,12 +531,9 @@ put_log_events_retry_limit 1
345
531
  d.emit({'message' => 'message1'}, time.to_i)
346
532
  d.run
347
533
 
348
- assert_match(/Calling PutLogEvents/, d.instance.log.logs[0])
534
+ assert_match(/failed to PutLogEvents/, d.instance.log.logs[0])
349
535
  assert_match(/failed to PutLogEvents/, d.instance.log.logs[1])
350
- assert_match(/Calling PutLogEvents/, d.instance.log.logs[2])
351
- assert_match(/failed to PutLogEvents/, d.instance.log.logs[3])
352
- assert_match(/Calling PutLogEvents/, d.instance.log.logs[4])
353
- assert_match(/failed to PutLogEvents and throwing away/, d.instance.log.logs[5])
536
+ assert_match(/failed to PutLogEvents and discard logs/, d.instance.log.logs[2])
354
537
  end
355
538
 
356
539
  def test_too_large_event
@@ -388,7 +571,7 @@ log_stream_name #{log_stream_name}
388
571
  private
389
572
  def default_config
390
573
  <<-EOC
391
- type cloudwatch_logs
574
+ @type cloudwatch_logs
392
575
  auto_create_stream true
393
576
  #{aws_key_id}
394
577
  #{aws_sec_key}
@@ -43,6 +43,16 @@ module CloudwatchLogsTestHelper
43
43
  @log_stream_name = log_stream_name_prefix ? log_stream_name_prefix + uuid : uuid
44
44
  end
45
45
 
46
+ def get_log_group_tags(name = nil)
47
+ name ||= log_group_name
48
+ logs.list_tags_log_group(log_group_name: name).tags
49
+ end
50
+
51
+ def get_log_group_retention_days(name = nil)
52
+ name ||= log_group_name
53
+ logs.describe_log_groups(log_group_name_prefix: name, limit: 1).log_groups.first.retention_in_days
54
+ end
55
+
46
56
  def clear_log_group
47
57
  [log_group_name, fluentd_tag].each do |name|
48
58
  begin
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
4
+ version: 0.4.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ryota Arai
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-01-22 00:00:00.000000000 Z
11
+ date: 2018-03-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: fluentd