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:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a8d151fecafb83c99cc458d6033eed3434173d07
|
4
|
+
data.tar.gz: 8f3e9ac1599e8dfb0a66c40021ece373005faaff
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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
|
-
* `
|
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
|
@@ -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
|
-
|
24
|
-
config_param :
|
25
|
-
config_param :
|
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', '
|
33
|
+
case level.downcase
|
34
|
+
when 'trace', 'verbose'
|
35
35
|
10
|
36
|
-
when 'debug'
|
36
|
+
when 'debug'
|
37
37
|
20
|
38
|
-
when 'info', '
|
38
|
+
when 'info', 'information'
|
39
39
|
30
|
40
|
-
when 'warning'
|
40
|
+
when 'warning'
|
41
41
|
40
|
42
|
-
when 'error'
|
42
|
+
when 'error'
|
43
43
|
50
|
44
|
-
when '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
|
-
|
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
|
-
|
59
|
-
|
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
|
-
|
66
|
-
|
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?(
|
78
|
-
log.debug "[App: #{
|
79
|
-
|
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(
|
87
|
+
numeric_level = level_to_num(current_log_level)
|
83
88
|
if numeric_level >= numeric_logging_level
|
84
|
-
log.debug "[App: #{
|
89
|
+
log.debug "[App: #{app}]: Emitting record with #{current_log_level} level"
|
85
90
|
record
|
86
91
|
else
|
87
|
-
log.debug "[App: #{
|
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
|
-
|
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['
|
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.
|
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-
|
11
|
+
date: 2018-09-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|