fluent-plugin-cloudwatch-logs 0.9.3 → 0.9.4

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: aa72486196ed38595f884945613e076fecd8f66c6d77046e118a8fc24301dc06
4
- data.tar.gz: 1076cb96661bf6d89d3a958989c04a9f690fae9b5ac6aae33a7d9231e5cbb8d5
3
+ metadata.gz: 0b2918da30191dd56e19d14043de953c649cb6207226df51a4721b8dda6af464
4
+ data.tar.gz: a6a6def2e408711e723f6cec2f5fb706981f23479dd8cb9a3a1a674d859c1cbf
5
5
  SHA512:
6
- metadata.gz: c21965fb1e9c340a92cc2d482ce5fed0590736f14df03da1d6706ae039f74f2e767f897e693fafdba644306b9ab4dde178a11abcbb23fb138b7b64f6b3ba08cc
7
- data.tar.gz: 93b8ec018eeffa3229b12f9daf312ec660eafb39d4159c42c92863c0150a3d29c43b93ff55dfda46e4f03917a96eb92ef4f59f358e23eda2e37facb0572ecfce
6
+ metadata.gz: 3aa61613b097ff349ba56fd9a5b7e0ee4f87ed3fa23bfa816c35decc193d1161a1771b6985c745f751cc0d05e8e0be606326e145ec19a509f1d2ebd2698f7d71
7
+ data.tar.gz: ffca6e46ee0c87dc22cd60c4cd724bdf22421daaff0338f245436edce33a8f0397f3f08daa4dd0f929cfabb6d73a2718feff15d304b5e79ca6762c0808aebd93
data/README.md CHANGED
@@ -193,6 +193,7 @@ Please refer to [the PutRetentionPolicy column in documentation](https://docs.aw
193
193
  * `log_group_name`: name of log group to fetch logs
194
194
  * `log_stream_name`: name of log stream to fetch logs
195
195
  * `region`: AWS Region. See [Authentication](#authentication) for more information.
196
+ * `throttling_retry_seconds`: time period in seconds to retry a request when aws CloudWatch rate limit exceeds (default: nil)
196
197
  * `state_file`: file to store current state (e.g. next\_forward\_token)
197
198
  * `tag`: fluentd tag
198
199
  * `use_log_stream_name_prefix`: to use `log_stream_name` as log stream name prefix (default false)
@@ -2,7 +2,7 @@ module Fluent
2
2
  module Plugin
3
3
  module Cloudwatch
4
4
  module Logs
5
- VERSION = "0.9.3"
5
+ VERSION = "0.9.4"
6
6
  end
7
7
  end
8
8
  end
@@ -30,6 +30,7 @@ module Fluent::Plugin
30
30
  config_param :start_time, :string, default: nil
31
31
  config_param :end_time, :string, default: nil
32
32
  config_param :time_range_format, :string, default: "%Y-%m-%d %H:%M:%S"
33
+ config_param :throttling_retry_seconds, :time, default: nil
33
34
 
34
35
  config_section :parse do
35
36
  config_set_default :@type, 'none'
@@ -183,6 +184,15 @@ module Fluent::Plugin
183
184
  end
184
185
 
185
186
  response.events
187
+ rescue Aws::CloudWatchLogs::Errors::ThrottlingException => err
188
+ if throttling_retry_seconds
189
+ log.warn "ThrottlingException in get_log_events (#{log_stream_name}). Waiting #{throttling_retry_seconds} seconds to retry."
190
+ sleep throttling_retry_seconds
191
+
192
+ get_events(log_stream_name)
193
+ else
194
+ raise err
195
+ end
186
196
  end
187
197
 
188
198
  def describe_log_streams(log_stream_name_prefix, log_streams = nil, next_token = nil)
@@ -28,6 +28,7 @@ class CloudwatchLogsInputTest < Test::Unit::TestCase
28
28
  start_time "2019-06-18 00:00:00Z"
29
29
  end_time "2020-01-18 00:00:00Z"
30
30
  time_range_format "%Y-%m-%d %H:%M:%S%z"
31
+ throttling_retry_seconds 30
31
32
  EOC
32
33
 
33
34
  assert_equal('test_id', d.instance.aws_key_id)
@@ -43,6 +44,7 @@ class CloudwatchLogsInputTest < Test::Unit::TestCase
43
44
  assert_equal(1560816000000, d.instance.start_time)
44
45
  assert_equal(1579305600000, d.instance.end_time)
45
46
  assert_equal("%Y-%m-%d %H:%M:%S%z", d.instance.time_range_format)
47
+ assert_equal(30, d.instance.throttling_retry_seconds)
46
48
  end
47
49
 
48
50
  test 'invalid time range' do
@@ -608,6 +610,36 @@ class CloudwatchLogsInputTest < Test::Unit::TestCase
608
610
  assert_equal(["test", ((time_ms + 7000) / 1000), { "cloudwatch" => "logs7" }], events[6])
609
611
  assert_equal(["test", ((time_ms + 8000) / 1000), { "cloudwatch" => "logs8" }], events[7])
610
612
  end
613
+
614
+ test "retry on Aws::CloudWatchLogs::Errors::ThrottlingException" do
615
+ config = <<-CONFIG
616
+ tag test
617
+ @type cloudwatch_logs
618
+ log_group_name #{log_group_name}
619
+ state_file /tmp/state
620
+ fetch_interval 0.1
621
+ throttling_retry_seconds 0.2
622
+ CONFIG
623
+
624
+ # it will raises the error 2 times
625
+ counter = 0
626
+ times = 2
627
+ stub(@client).get_log_events(anything) {
628
+ counter += 1
629
+ counter <= times ? raise(Aws::CloudWatchLogs::Errors::ThrottlingException.new(nil, "error")) : OpenStruct.new(events: [], next_forward_token: nil)
630
+ }
631
+
632
+ d = create_driver(config)
633
+
634
+ # so, it is expected to valid_next_token once
635
+ mock(d.instance).valid_next_token(nil, nil).once
636
+
637
+ log_stream = Aws::CloudWatchLogs::Types::LogStream.new(log_stream_name: "stream_name")
638
+ @client.stub_responses(:describe_log_streams, { log_streams: [log_stream], next_token: nil })
639
+
640
+ d.run
641
+ assert_equal(2, d.logs.select {|l| l =~ /Waiting 0.2 seconds to retry/ }.size)
642
+ end
611
643
  end
612
644
 
613
645
  private
@@ -42,10 +42,7 @@ module CloudwatchLogsTestHelper
42
42
  end
43
43
 
44
44
  def log_stream_name(log_stream_name_prefix = nil)
45
- if !@log_stream_name
46
- new_log_stream(log_stream_name_prefix)
47
- end
48
- @log_stream_name
45
+ @log_stream_name ||= new_log_stream(log_stream_name_prefix)
49
46
  end
50
47
 
51
48
  def new_log_stream(log_stream_name_prefix = nil)
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.9.3
4
+ version: 0.9.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ryota Arai
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-04-03 00:00:00.000000000 Z
11
+ date: 2020-04-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: fluentd