fluent-plugin-kubernetes-log-level 0.1.4 → 0.2.0

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: fa5fbdac4fd2fb30a485ec9778a610236ff8ca45
4
- data.tar.gz: 28eecfbe678c87ece3dc3410d26d7a6a5696f0b5
3
+ metadata.gz: a8d151fecafb83c99cc458d6033eed3434173d07
4
+ data.tar.gz: 8f3e9ac1599e8dfb0a66c40021ece373005faaff
5
5
  SHA512:
6
- metadata.gz: 07f6c6347ab0742a03841ed9fb727818b1857bf3975a930a2d5a074900a4a2ce9a1edeef7c05a81aa51711253f44f4db4e95963403e3ffe93165190bca734464
7
- data.tar.gz: 03d6fa7591ced17ecdde113a3939dfe169683d9b325710e0e54253583879366e39d0db69df6ca9e5d8ff2d1095f6fa462f2ad1647e49a4bd00a874865fbc1c04
6
+ metadata.gz: 27a4af560a7f25cde3b84b2fa9bdcab549d127232bb8f8ad05bf488e7a6b22723c4d1cb1d8998f78b1adf8732ae40c631c8513f02e488cc3f22094039df88770
7
+ data.tar.gz: 698d60e02afaa5d4bce6cf866862914c86ff438950093b425f66455310e42173390accf43f94d27e2e68bf905c70f677b5baa0663467d06230960540d6cfe48d
data/README.md CHANGED
@@ -33,7 +33,8 @@ $ bundle
33
33
  Configuration options for fluent.conf are:
34
34
 
35
35
  * `log_level_label` - kubernetes label name for setting current log level
36
- * `log_level_key` - key in log record to indicate the current record's level
36
+ * `log_level_key_label` - kubernetes label name for getting current log level from record
37
+ * `default_log_level_key` - default key in log record to indicate the current record's level
37
38
  * `default_logging_level` - default logging levels for kubernetes services missing a `log_level_label`
38
39
 
39
40
  ## Copyright
@@ -3,7 +3,7 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
3
3
 
4
4
  Gem::Specification.new do |spec|
5
5
  spec.name = "fluent-plugin-kubernetes-log-level"
6
- spec.version = "0.1.4"
6
+ spec.version = "0.2.0"
7
7
  spec.authors = ["yaron-idan"]
8
8
  spec.email = ["yaronidan@gmail.com"]
9
9
 
@@ -20,28 +20,28 @@ module Fluent
20
20
  class KubernetesLogLevelFilter < Fluent::Plugin::Filter
21
21
  Fluent::Plugin.register_filter("kubernetes_log_level", self)
22
22
 
23
- # TODO - solve default values problem
24
- config_param :log_level_label, :string
25
- config_param :log_level_key, :string
26
- config_param :default_logging_level, :string
23
+ config_param :log_level_label, :string, :default => 'logging-level'
24
+ config_param :log_level_key_label, :string, :default => 'logging-level-key'
25
+ config_param :default_log_level_key, :string, :default => 'level'
26
+ config_param :default_logging_level, :string, :default => ''
27
27
 
28
28
  def configure(conf)
29
29
  super
30
30
  end
31
31
 
32
32
  def level_to_num(level)
33
- case level
34
- when 'trace', 'Verbose'
33
+ case level.downcase
34
+ when 'trace', 'verbose'
35
35
  10
36
- when 'debug', 'Debug'
36
+ when 'debug'
37
37
  20
38
- when 'info', 'Information'
38
+ when 'info', 'information'
39
39
  30
40
- when 'warning', 'Warning'
40
+ when 'warning'
41
41
  40
42
- when 'error', 'Error'
42
+ when 'error'
43
43
  50
44
- when 'fatal', 'Fatal'
44
+ when 'fatal'
45
45
  60
46
46
  else
47
47
  0
@@ -51,40 +51,45 @@ module Fluent
51
51
  def filter(tag, time, record)
52
52
 
53
53
  log.trace "Start to process record"
54
- is_logging_label_exist = false
54
+
55
+ log_level_key = @default_log_level_key
56
+ logging_level = @default_logging_level
57
+ app = 'app'
58
+
55
59
  if record.has_key?("kubernetes")
56
60
  if record["kubernetes"].has_key?("labels")
61
+ if record["kubernetes"]["labels"].has_key?('app')
62
+ app = record['kubernetes']['labels']['app']
63
+ end
64
+
65
+ if record["kubernetes"]["labels"].has_key?(@log_level_key_label)
66
+ log_level_key = record['kubernetes']['labels'][@log_level_key_label]
67
+ log.debug "[App: #{app}]: kubernetes.labels.#{@log_level_key_label} found with the value #{log_level_key}"
68
+ end
69
+
57
70
  if record["kubernetes"]["labels"].has_key?(@log_level_label)
58
- log.debug "[App: #{record['kubernetes']['labels']['app']}]: kubernetes.labels.logging-level found with the value #{record['kubernetes']['labels'][@log_level_label]}"
59
- numeric_logging_level = level_to_num(record['kubernetes']['labels'][@log_level_label])
60
- is_logging_label_exist = true
71
+ logging_level = record['kubernetes']['labels'][@log_level_label]
72
+ log.debug "[App: #{app}]: kubernetes.labels.#{@log_level_label} found with the value #{logging_level}"
61
73
  end
62
74
  end
63
75
  end
64
-
65
- log.trace "Check for logging level existence"
66
- if is_logging_label_exist == false
67
- log.debug "No logging-level label was found"
68
- if @default_logging_level.nil?
69
- record
70
- else
71
- numeric_logging_level = level_to_num(@default_logging_level)
72
- log.debug "[App: #{record['kubernetes']['labels']['app']}]: Logging level set to #{@default_logging_level}"
73
- end
74
- end
75
-
76
+
77
+ numeric_logging_level = level_to_num(logging_level)
78
+
76
79
  log.trace "Process current log level"
77
- if record.has_key?(@log_level_key.capitalize)
78
- log.debug "[App: #{record['kubernetes']['labels']['app']}]: Downcasing capitalized log_level from #{@log_level_key.capitalize}"
79
- record[@log_level_key] = record[@log_level_key.capitalize]
80
+ if record.has_key?(log_level_key.capitalize)
81
+ log.debug "[App: #{app}]: Downcasing capitalized log_level from #{log_level_key.capitalize}"
82
+ current_log_level = record[log_level_key.capitalize]
83
+ else
84
+ current_log_level = record[log_level_key]
80
85
  end
81
86
 
82
- numeric_level = level_to_num(record[@log_level_key])
87
+ numeric_level = level_to_num(current_log_level)
83
88
  if numeric_level >= numeric_logging_level
84
- log.debug "[App: #{record['kubernetes']['labels']['app']}]: Emitting record with #{record[@log_level_key]} level"
89
+ log.debug "[App: #{app}]: Emitting record with #{current_log_level} level"
85
90
  record
86
91
  else
87
- log.debug "[App: #{record['kubernetes']['labels']['app']}]: Dropping record with #{record[@log_level_key]} level"
92
+ log.debug "[App: #{app}]: Dropping record with #{current_log_level} level"
88
93
  nil
89
94
  end
90
95
  end
@@ -38,7 +38,6 @@ class KubernetesLogLevelFilterTest < Test::Unit::TestCase
38
38
 
39
39
  @expected_static_capital_level = [{
40
40
  'Level' => 'Warning',
41
- 'level' => 'Warning',
42
41
  'kubernetes' => {
43
42
  'labels' => {
44
43
  'app' => 'demo'
@@ -55,11 +54,28 @@ class KubernetesLogLevelFilterTest < Test::Unit::TestCase
55
54
  }
56
55
  }
57
56
  }]
57
+
58
+ @expected_no_default_log_level = [{
59
+ 'level' => 'error',
60
+ 'kubernetes' => {
61
+ 'labels' => {
62
+ 'app' => 'demo'
63
+ }
64
+ }
65
+ }]
66
+
67
+ @expected_log_level_key = [{
68
+ 'levelname' => 'error',
69
+ 'kubernetes' => {
70
+ 'labels' => {
71
+ 'logging-level-key' => 'levelname',
72
+ 'app' => 'demo'
73
+ }
74
+ }
75
+ }]
58
76
  end
59
77
 
60
78
  CONFIG = %[
61
- log_level_label logging-level
62
- log_level_key level
63
79
  default_logging_level warning
64
80
  ]
65
81
 
@@ -69,16 +85,24 @@ class KubernetesLogLevelFilterTest < Test::Unit::TestCase
69
85
  Fluent::Test::Driver::Filter.new(Fluent::Plugin::KubernetesLogLevelFilter).configure(conf)
70
86
  end
71
87
 
72
- def filter(msg, time = event_time("2017-07-12 19:20:21 UTC"))
73
- d = create_driver
88
+ def filter(msg, conf = CONFIG, time = event_time("2017-07-12 19:20:21 UTC"))
89
+ d = create_driver(conf)
74
90
  d.run { d.feed('kubernetes', time, msg) }
75
91
  d.filtered_records
76
92
  end
77
93
 
78
94
  def test_default_configuration
79
- d = create_driver
95
+ conf = %[
96
+ log_level_label logging-level
97
+ log_level_key_label logging-level-key
98
+ default_log_level_key level
99
+ default_logging_level warning
100
+ ]
101
+
102
+ d = create_driver(conf)
80
103
  assert_equal 'logging-level', d.instance.config['log_level_label']
81
- assert_equal 'level', d.instance.config['log_level_key']
104
+ assert_equal 'logging-level-key', d.instance.config['log_level_key_label']
105
+ assert_equal 'level', d.instance.config['default_log_level_key']
82
106
  assert_equal 'warning', d.instance.config['default_logging_level']
83
107
  end
84
108
 
@@ -101,4 +125,13 @@ class KubernetesLogLevelFilterTest < Test::Unit::TestCase
101
125
  def test_serilog_structure
102
126
  assert_equal @expected_static_capital_level, filter({"Level"=>"Warning", "kubernetes"=>{"labels"=>{"app"=>"demo"}}})
103
127
  end
128
+
129
+ def test_no_default_log_level
130
+ conf = %[]
131
+ assert_equal @expected_no_default_log_level, filter({"level"=>"error", "kubernetes"=>{"labels"=>{"app"=>"demo"}}}, conf)
132
+ end
133
+
134
+ def test_custom_log_level
135
+ assert_equal @expected_log_level_key, filter({"levelname"=>"error", "kubernetes"=>{"labels"=>{"logging-level-key"=>"levelname","app"=>"demo"}}})
136
+ end
104
137
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fluent-plugin-kubernetes-log-level
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.4
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - yaron-idan
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-06-20 00:00:00.000000000 Z
11
+ date: 2018-09-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler