fluent-plugin-cloudwatch-logs 0.9.3 → 0.9.4

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