fluent-plugin-throttle 0.0.2 → 0.0.3

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