fluent-plugin-throttle 0.0.2 → 0.0.3

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: 65759b9fff6dd920e4d1963a9d7ef7d786cd4708
4
- data.tar.gz: fce8128e0943af6ce0dcb412658dcebdb426ea00
3
+ metadata.gz: 96baca37d87b547aadf4ef128d973f5605477242
4
+ data.tar.gz: bb0ec1c1d81b4db2048dafac99d7b795caf2fc68
5
5
  SHA512:
6
- metadata.gz: 32ac8f613190595a760cb2bdc44c7e1e270824c86ebcff96179751df63325798a2384eb8f4f4557455db6020698acf950de5f51b375be802177a504e6da671c1
7
- data.tar.gz: fc74e2b98c362d0428ae9b24464a5466bec1ec17cef2827bf206ce707450f8700ffbb70453fc8b8c45338ded45879299695ec795404a4d6a9405000f2662299b
6
+ metadata.gz: a85cdcbdae70af12c549012a58a2e640727c8fb9dbb12e0753499ee0091a124bd8ac90097bf89193293849de9aea6cdab4e0e3b986856aab6396f18759dfe88b
7
+ data.tar.gz: 21482c46242a78e2d7d2150cead76734afdaf937be5c2d714c1d2c6ac8afa79472a89ced7cffcea7a44ab0e6807c6d17bd9b4b5c5dab6adc54a851243a2dfacd
data/README.md CHANGED
@@ -26,7 +26,7 @@ $ gem install fluent-plugin-throttle
26
26
 
27
27
  ## Configuration
28
28
 
29
- ### group\_key
29
+ #### group\_key
30
30
 
31
31
  Default: `kubernetes.container_name`.
32
32
 
@@ -40,13 +40,13 @@ the group key resolve to "random":
40
40
 
41
41
  If the group cannot be resolved, am anonymous group is used.
42
42
 
43
- ## group\_bucket\_period\_s
43
+ #### group\_bucket\_period\_s
44
44
 
45
45
  Default: `60` (60 second).
46
46
 
47
47
  This is the period of of time over which `group_bucket_limit` applies.
48
48
 
49
- ## group\_bucket\_limit
49
+ #### group\_bucket\_limit
50
50
 
51
51
  Default: `6000` (logs per `group_bucket_period_s`).
52
52
 
@@ -69,10 +69,10 @@ logs per minute. However `60/60s` will readily emit 60 logs within the first
69
69
  second then nothing for the remaining 59 seconds. While the `1/1s` will only
70
70
  emit the first log of every second.
71
71
 
72
- ## group\_reset\_rate\_s
72
+ #### group\_reset\_rate\_s
73
73
 
74
74
  Default: `group_bucket_limit/group_bucket_period_s` (logs per `group_bucket_period_s`).
75
- Max: `group_bucket_limit`.
75
+ Maximum: `group_bucket_limit/group_bucket_period_s`.
76
76
 
77
77
  After a group has exceeded its bucket limit, logs are dropped until the rate
78
78
  per second falls below or equal to `group_reset_rate_s`.
@@ -105,12 +105,13 @@ after a single breach of the limit until the next restart of fluentd.
105
105
 
106
106
  A value of `-1` disables the feature.
107
107
 
108
- ## group\_warning\_hz
108
+ #### group\_warning\_delay\_s
109
109
 
110
- Default: `0.1` (10 seconds).
110
+ Default: `10` (seconds).
111
111
 
112
112
  When a group reaches its limit and as long as it is not reset, a warning
113
- message with the current log rate for the group is logged at this frequency.
113
+ message with the current log rate of the group is emitted repeatedly. This is
114
+ the delay between every repetition.
114
115
 
115
116
  ## Copyright
116
117
 
@@ -4,11 +4,11 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
4
 
5
5
  Gem::Specification.new do |spec|
6
6
  spec.name = "fluent-plugin-throttle"
7
- spec.version = "0.0.2"
7
+ spec.version = "0.0.3"
8
8
  spec.authors = ["François-Xavier Bourlet"]
9
9
  spec.email = ["fx.bourlet@rubrik.com"]
10
10
  spec.summary = %q{Fluentd filter for throttling logs based on a configurable key.}
11
- spec.homepage = "https://github.com/bombela/fluent-plugin-throttle"
11
+ spec.homepage = "https://github.com/rubrikinc/fluent-plugin-throttle"
12
12
  spec.license = "Apache-2.0"
13
13
 
14
14
  spec.files = `git ls-files`.split($/)
@@ -8,9 +8,8 @@ module Fluent
8
8
  config_param :group_bucket_period_s, :integer, :default => 60
9
9
  config_param :group_bucket_limit, :integer, :default => 6000
10
10
  config_param :group_reset_rate_s, :integer, :default => nil
11
- config_param :warning_hz, :float, :default => 0.1
11
+ config_param :group_warning_delay_s, :integer, :default => 10
12
12
 
13
- Bucket = Struct.new(:emitted, :last_reset)
14
13
  Group = Struct.new(
15
14
  :rate_count,
16
15
  :rate_last_reset,
@@ -40,7 +39,8 @@ module Fluent
40
39
  raise "group_reset_rate_s must be <= group_bucket_limit / group_bucket_period_s" \
41
40
  unless @group_reset_rate_s <= @group_rate_limit
42
41
 
43
- @warning_delay = (1.0 / @warning_hz)
42
+ raise "group_warning_delay_s must be >= 1" \
43
+ unless @group_warning_delay_s >= 1
44
44
  end
45
45
 
46
46
  def start
@@ -73,35 +73,34 @@ module Fluent
73
73
 
74
74
  if (now.to_i / @group_bucket_period_s) \
75
75
  > (counter.bucket_last_reset.to_i / @group_bucket_period_s)
76
- # next time period reached, reset limit.
76
+ # next time period reached.
77
77
 
78
+ # wait until rate drops back down (if enabled).
78
79
  if counter.bucket_count == -1 and @group_reset_rate_s != -1
79
- # wait until rate drops back down if needed.
80
80
  if counter.aprox_rate < @group_reset_rate_s
81
81
  log_rate_back_down(now, group, counter)
82
82
  else
83
- since_last_warning = now - counter.last_warning
84
- if since_last_warning >= @warning_delay
85
- log_rate_limit_exceeded(now, group, counter)
86
- counter.last_warning = now
87
- end
83
+ log_rate_limit_exceeded(now, group, counter)
88
84
  return nil
89
85
  end
90
86
  end
91
87
 
88
+ # reset counter for the rest of time period.
92
89
  counter.bucket_count = 0
93
90
  counter.bucket_last_reset = now
94
- end
95
-
96
- if counter.bucket_count == -1
97
- return nil
91
+ else
92
+ # if current time period credit is exhausted, drop the record.
93
+ if counter.bucket_count == -1
94
+ log_rate_limit_exceeded(now, group, counter)
95
+ return nil
96
+ end
98
97
  end
99
98
 
100
99
  counter.bucket_count += 1
101
100
 
101
+ # if we are out of credit, we drop logs for the rest of the time period.
102
102
  if counter.bucket_count > @group_bucket_limit
103
103
  log_rate_limit_exceeded(now, group, counter)
104
- counter.last_warning = now
105
104
  counter.bucket_count = -1
106
105
  return nil
107
106
  end
@@ -114,7 +113,12 @@ module Fluent
114
113
  end
115
114
 
116
115
  def log_rate_limit_exceeded(now, group, counter)
117
- $log.warn("rate exceeded", log_items(now, group, counter))
116
+ emit = counter.last_warning == nil ? true \
117
+ : (now - counter.last_warning) >= @group_warning_delay_s
118
+ if emit
119
+ $log.warn("rate exceeded", log_items(now, group, counter))
120
+ counter.last_warning = now
121
+ end
118
122
  end
119
123
 
120
124
  def log_rate_back_down(now, group, counter)
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fluent-plugin-throttle
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - François-Xavier Bourlet
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-03-20 00:00:00.000000000 Z
11
+ date: 2018-03-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -105,7 +105,7 @@ files:
105
105
  - README.md
106
106
  - fluent-plugin-throttle.gemspec
107
107
  - lib/fluent/plugin/filter_throttle.rb
108
- homepage: https://github.com/bombela/fluent-plugin-throttle
108
+ homepage: https://github.com/rubrikinc/fluent-plugin-throttle
109
109
  licenses:
110
110
  - Apache-2.0
111
111
  metadata: {}