fluent-plugin-record-modifier 0.4.1 → 0.5.0
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 +4 -4
- data/.travis.yml +3 -2
- data/ChangeLog +5 -0
- data/README.md +19 -24
- data/VERSION +1 -1
- data/fluent-plugin-record-modifier.gemspec +0 -1
- data/lib/fluent/plugin/filter_record_modifier.rb +13 -3
- data/lib/fluent/plugin/out_record_modifier.rb +12 -2
- data/test/test_filter_record_modifier.rb +4 -4
- data/test/test_out_record_modifier.rb +4 -4
- metadata +3 -17
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: df0680e5b52d63630e68ce5c1179c10703c5c3d6
|
4
|
+
data.tar.gz: 3ee9b91266f11bbccd1958a768963089a11516e9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: cbcfd4bade6ee3779c2d37675a6f33ae10a6362a50d3449121f8fe4fcd3b3cf065f72007b88b19dd5fd4b97cf8e4063c8bb2ffb481962bee58d22092e5ebeea8
|
7
|
+
data.tar.gz: 053673498e8c4091ef80a83c3c5da0eebaf3fd29c35a03055ee36a70ebd9125ecd89a2ed8eafe1d7bc3775d9840b3b25e028a504be69d6965edd79705fdf1c75
|
data/.travis.yml
CHANGED
@@ -3,8 +3,8 @@ language: ruby
|
|
3
3
|
rvm:
|
4
4
|
- 2.0.0
|
5
5
|
- 2.1
|
6
|
-
- 2.2.
|
7
|
-
- 2.3.
|
6
|
+
- 2.2.5
|
7
|
+
- 2.3.1
|
8
8
|
- ruby-head
|
9
9
|
- rbx
|
10
10
|
|
@@ -19,6 +19,7 @@ matrix:
|
|
19
19
|
allow_failures:
|
20
20
|
- rvm: ruby-head
|
21
21
|
- rvm: rbx
|
22
|
+
- rvm: 2.0.0
|
22
23
|
|
23
24
|
before_install: gem update bundler
|
24
25
|
script: bundle exec rake test
|
data/ChangeLog
CHANGED
data/README.md
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# Filter plugin for modifying each event record for [Fluentd](http://fluentd.org)
|
2
2
|
|
3
|
-
Adding arbitary field to event record without
|
3
|
+
Adding arbitary field to event record without customizing existence plugin.
|
4
4
|
|
5
5
|
For example, generated event from *in_tail* doesn't contain "hostname" of running machine.
|
6
6
|
In this case, you can use *record_modifier* to add "hostname" field to event record.
|
@@ -19,7 +19,7 @@ Use `record_modifier` filter.
|
|
19
19
|
@type record_modifier
|
20
20
|
|
21
21
|
<record>
|
22
|
-
gen_host
|
22
|
+
gen_host "#{Socket.gethostname}"
|
23
23
|
foo bar
|
24
24
|
</record>
|
25
25
|
</filter>
|
@@ -55,28 +55,16 @@ But unlike `record_transformer`, `record_modifier` doesn't support following fea
|
|
55
55
|
- tag_suffix and tag_prefix
|
56
56
|
- dynamic key placeholder
|
57
57
|
|
58
|
-
### record_modifier output
|
59
|
-
|
60
|
-
In v0.10, you can use `record_modifier` output to emulate filter. `record_modifier` output doesn't support `<record>` way.
|
61
|
-
|
62
|
-
<match pattern>
|
63
|
-
type record_modifier
|
64
|
-
tag foo.filtered
|
65
|
-
|
66
|
-
gen_host ${hostname}
|
67
|
-
foo bar
|
68
|
-
</match>
|
69
|
-
|
70
58
|
### char_encoding
|
71
59
|
|
72
|
-
Fluentd including some plugins treats
|
73
|
-
But
|
60
|
+
Fluentd including some plugins treats logs as a BINARY by default to forward.
|
61
|
+
But a user sometimes wants to process logs depends on their requirements, e.g. handling char encoding correctly.
|
74
62
|
|
75
63
|
`char_encoding` parameter is useful for this case.
|
76
64
|
|
77
65
|
```conf
|
78
66
|
<filter pattern>
|
79
|
-
type record_modifier
|
67
|
+
@type record_modifier
|
80
68
|
|
81
69
|
# set UTF-8 encoding information to string.
|
82
70
|
char_encoding utf-8
|
@@ -86,6 +74,8 @@ But an user sometimes processes the logs depends on their requirements, e.g. han
|
|
86
74
|
</filter>
|
87
75
|
```
|
88
76
|
|
77
|
+
In `char_encoding from:to` case, it replaces invalid character with safe character.
|
78
|
+
|
89
79
|
### remove_keys
|
90
80
|
|
91
81
|
The logs include needless record keys in some cases.
|
@@ -93,7 +83,7 @@ You can remove it by using `remove_keys` parameter.
|
|
93
83
|
|
94
84
|
```conf
|
95
85
|
<filter pattern>
|
96
|
-
type record_modifier
|
86
|
+
@type record_modifier
|
97
87
|
|
98
88
|
# remove key1 and key2 keys from record
|
99
89
|
remove_keys key1,key2
|
@@ -118,7 +108,7 @@ If you want to handle the set of explicitly specified keys, you can use `whiteli
|
|
118
108
|
|
119
109
|
```conf
|
120
110
|
<filter pattern>
|
121
|
-
type record_modifier
|
111
|
+
@type record_modifier
|
122
112
|
|
123
113
|
# remove all keys except for key1 and key2
|
124
114
|
whitelist_keys key1,key2
|
@@ -137,19 +127,24 @@ then you got new record like below:
|
|
137
127
|
{"key1":"hoge", "key2":"foo"}
|
138
128
|
```
|
139
129
|
|
140
|
-
###
|
130
|
+
### record_modifier output
|
131
|
+
|
132
|
+
In v0.10, you can use `record_modifier` output to emulate filter. `record_modifier` output doesn't support `<record>` way.
|
141
133
|
|
142
|
-
|
134
|
+
<match pattern>
|
135
|
+
type record_modifier
|
136
|
+
tag foo.filtered
|
137
|
+
|
138
|
+
gen_host "#{Socket.gethostname}"
|
139
|
+
foo bar
|
140
|
+
</match>
|
143
141
|
|
144
142
|
## TODO
|
145
143
|
|
146
144
|
* Adding following features if needed
|
147
145
|
|
148
|
-
* Use HandleTagNameMixin to keep original tag
|
149
|
-
|
150
146
|
* Replace record value
|
151
147
|
|
152
|
-
|
153
148
|
## Copyright
|
154
149
|
|
155
150
|
<table>
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.5.0
|
@@ -18,7 +18,6 @@ Gem::Specification.new do |gem|
|
|
18
18
|
gem.require_paths = ['lib']
|
19
19
|
|
20
20
|
gem.add_dependency "fluentd", [">= 0.10.58", "< 2"]
|
21
|
-
gem.add_dependency "fluent-mixin-config-placeholders", ">= 0.3.0"
|
22
21
|
gem.add_development_dependency "rake", ">= 0.9.2"
|
23
22
|
gem.add_development_dependency("test-unit", ["~> 3.1.4"])
|
24
23
|
end
|
@@ -1,4 +1,4 @@
|
|
1
|
-
require 'fluent/
|
1
|
+
require 'fluent/filter'
|
2
2
|
|
3
3
|
module Fluent
|
4
4
|
class RecordModifierFilter < Filter
|
@@ -26,8 +26,6 @@ Modified events will have only specified keys (if exist in original events).
|
|
26
26
|
This option is exclusive with `remove_keys`.
|
27
27
|
DESC
|
28
28
|
|
29
|
-
include Fluent::Mixin::ConfigPlaceholders
|
30
|
-
|
31
29
|
BUILTIN_CONFIGURATIONS = %W(type @type log_level @log_level id @id char_encoding remove_keys whitelist_keys)
|
32
30
|
|
33
31
|
def configure(conf)
|
@@ -40,6 +38,7 @@ DESC
|
|
40
38
|
@map = {}
|
41
39
|
conf.each_pair { |k, v|
|
42
40
|
unless BUILTIN_CONFIGURATIONS.include?(k)
|
41
|
+
check_config_placeholders(k, v);
|
43
42
|
conf.has_key?(k)
|
44
43
|
$log.warn "top level definition is deprecated. Please put parameters inside <record>: '#{k} #{v}'"
|
45
44
|
@map[k] = DynamicExpander.new(k, v)
|
@@ -65,6 +64,7 @@ DESC
|
|
65
64
|
@has_tag_parts = false
|
66
65
|
conf.elements.select { |element| element.name == 'record' }.each do |element|
|
67
66
|
element.each_pair do |k, v|
|
67
|
+
check_config_placeholders(k, v)
|
68
68
|
element.has_key?(k) # to suppress unread configuration warning
|
69
69
|
@has_tag_parts = true if v.include?('tag_parts')
|
70
70
|
@map[k] = DynamicExpander.new(k, v)
|
@@ -133,6 +133,16 @@ DESC
|
|
133
133
|
end
|
134
134
|
end
|
135
135
|
|
136
|
+
HOSTNAME_PLACEHOLDERS = %W(__HOSTNAME__ ${hostname})
|
137
|
+
|
138
|
+
def check_config_placeholders(k, v)
|
139
|
+
HOSTNAME_PLACEHOLDERS.each { |ph|
|
140
|
+
if v.include?(ph)
|
141
|
+
raise ConfigError, %!#{ph} placeholder in #{k} is removed. Use "\#{Socket.gethostname}" instead.!
|
142
|
+
end
|
143
|
+
}
|
144
|
+
end
|
145
|
+
|
136
146
|
class DynamicExpander
|
137
147
|
def initialize(param_key, param_value)
|
138
148
|
if param_value.include?('${')
|
@@ -1,4 +1,4 @@
|
|
1
|
-
require 'fluent/
|
1
|
+
require 'fluent/output'
|
2
2
|
|
3
3
|
module Fluent
|
4
4
|
class RecordModifierOutput < Output
|
@@ -30,7 +30,6 @@ This option is exclusive with `remove_keys`.
|
|
30
30
|
DESC
|
31
31
|
|
32
32
|
include SetTagKeyMixin
|
33
|
-
include Fluent::Mixin::ConfigPlaceholders
|
34
33
|
|
35
34
|
BUILTIN_CONFIGURATIONS = %W(type tag include_tag_key tag_key char_encoding remove_keys whitelist_keys)
|
36
35
|
|
@@ -40,6 +39,7 @@ DESC
|
|
40
39
|
@map = {}
|
41
40
|
conf.each_pair { |k, v|
|
42
41
|
unless BUILTIN_CONFIGURATIONS.include?(k)
|
42
|
+
check_config_placeholders(k, v)
|
43
43
|
conf.has_key?(k)
|
44
44
|
@map[k] = v
|
45
45
|
end
|
@@ -83,6 +83,16 @@ DESC
|
|
83
83
|
|
84
84
|
private
|
85
85
|
|
86
|
+
HOSTNAME_PLACEHOLDERS = %W(__HOSTNAME__ ${hostname})
|
87
|
+
|
88
|
+
def check_config_placeholders(k, v)
|
89
|
+
HOSTNAME_PLACEHOLDERS.each { |ph|
|
90
|
+
if v.include?(ph)
|
91
|
+
raise ConfigError, %!#{ph} placeholder in #{k} is removed. Use "\#{Socket.gethostname}" instead.!
|
92
|
+
end
|
93
|
+
}
|
94
|
+
end
|
95
|
+
|
86
96
|
def modify_record(record)
|
87
97
|
@map.each_pair { |k, v|
|
88
98
|
record[k] = v
|
@@ -10,20 +10,20 @@ class RecordModifierFilterTest < Test::Unit::TestCase
|
|
10
10
|
@tag = 'test.tag'
|
11
11
|
end
|
12
12
|
|
13
|
-
CONFIG = %
|
13
|
+
CONFIG = %q!
|
14
14
|
type record_modifier
|
15
15
|
remove_keys hoge
|
16
16
|
|
17
17
|
<record>
|
18
|
-
gen_host
|
18
|
+
gen_host "#{Socket.gethostname}"
|
19
19
|
foo bar
|
20
20
|
included_tag ${tag}
|
21
21
|
tag_wrap -${tag_parts[0]}-${tag_parts[1]}-
|
22
22
|
</record>
|
23
|
-
|
23
|
+
!
|
24
24
|
|
25
25
|
def create_driver(conf = CONFIG)
|
26
|
-
Fluent::Test::FilterTestDriver.new(Fluent::RecordModifierFilter, @tag).configure(conf)
|
26
|
+
Fluent::Test::FilterTestDriver.new(Fluent::RecordModifierFilter, @tag).configure(conf, true)
|
27
27
|
end
|
28
28
|
|
29
29
|
def get_hostname
|
@@ -7,19 +7,19 @@ class RecordModifierOutputTest < Test::Unit::TestCase
|
|
7
7
|
Fluent::Test.setup
|
8
8
|
end
|
9
9
|
|
10
|
-
CONFIG = %
|
10
|
+
CONFIG = %q!
|
11
11
|
type record_modifier
|
12
12
|
tag foo.filtered
|
13
13
|
|
14
|
-
gen_host
|
14
|
+
gen_host "#{Socket.gethostname}"
|
15
15
|
foo bar
|
16
16
|
include_tag_key
|
17
17
|
tag_key included_tag
|
18
18
|
remove_keys hoge
|
19
|
-
|
19
|
+
!
|
20
20
|
|
21
21
|
def create_driver(conf = CONFIG)
|
22
|
-
Fluent::Test::OutputTestDriver.new(Fluent::RecordModifierOutput, tag='test_tag').configure(conf)
|
22
|
+
Fluent::Test::OutputTestDriver.new(Fluent::RecordModifierOutput, tag='test_tag').configure(conf, true)
|
23
23
|
end
|
24
24
|
|
25
25
|
def get_hostname
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fluent-plugin-record-modifier
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Masahiro Nakagawa
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-08-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: fluentd
|
@@ -30,20 +30,6 @@ dependencies:
|
|
30
30
|
- - "<"
|
31
31
|
- !ruby/object:Gem::Version
|
32
32
|
version: '2'
|
33
|
-
- !ruby/object:Gem::Dependency
|
34
|
-
name: fluent-mixin-config-placeholders
|
35
|
-
requirement: !ruby/object:Gem::Requirement
|
36
|
-
requirements:
|
37
|
-
- - ">="
|
38
|
-
- !ruby/object:Gem::Version
|
39
|
-
version: 0.3.0
|
40
|
-
type: :runtime
|
41
|
-
prerelease: false
|
42
|
-
version_requirements: !ruby/object:Gem::Requirement
|
43
|
-
requirements:
|
44
|
-
- - ">="
|
45
|
-
- !ruby/object:Gem::Version
|
46
|
-
version: 0.3.0
|
47
33
|
- !ruby/object:Gem::Dependency
|
48
34
|
name: rake
|
49
35
|
requirement: !ruby/object:Gem::Requirement
|
@@ -109,7 +95,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
109
95
|
version: '0'
|
110
96
|
requirements: []
|
111
97
|
rubyforge_project:
|
112
|
-
rubygems_version: 2.
|
98
|
+
rubygems_version: 2.5.1
|
113
99
|
signing_key:
|
114
100
|
specification_version: 4
|
115
101
|
summary: Filter plugin for modifying event record
|