fluent-plugin-cloudwatch-logs 0.4.4 → 0.4.5

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
  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