fluent-plugin-ignore-filter 0.0.1

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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 3d4cf2ef31feba7b2c627763e85a6cdf79c30638
4
+ data.tar.gz: 154bc489133878d9ce4a16670f63ca56c3c6a2cf
5
+ SHA512:
6
+ metadata.gz: 23b1337498454df67d5a6df97e374bbae395289413440af6960d85b584d04c3acbef156965bb0587b74ad70d31cfaf7993080bc969a890701dbaed180cbc65a2
7
+ data.tar.gz: 54f946d0416d126bcdf7f98090a2a55882f4dd51ad0e4b8ee6212b636089543d7239c4f7ceaad926d6c2aecdda0a99e5d253c34bc17099007461efcc97704f00
data/.gitignore ADDED
@@ -0,0 +1,22 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
18
+ *.bundle
19
+ *.so
20
+ *.o
21
+ *.a
22
+ mkmf.log
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in fluent-plugin-ignore-filter.gemspec
4
+ gemspec
data/LICENSE ADDED
@@ -0,0 +1,13 @@
1
+ Copyright 2015 Yuri UMEZAKI
2
+
3
+ Licensed under the Apache License, Version 2.0 (the "License");
4
+ you may not use this file except in compliance with the License.
5
+ You may obtain a copy of the License at
6
+
7
+ http://www.apache.org/licenses/LICENSE-2.0
8
+
9
+ Unless required by applicable law or agreed to in writing, software
10
+ distributed under the License is distributed on an "AS IS" BASIS,
11
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ See the License for the specific language governing permissions and
13
+ limitations under the License.
data/README.md ADDED
@@ -0,0 +1,123 @@
1
+ # Fluent-plugin-ignore-filter
2
+
3
+ [Fluentd](http://fluentd.org) filter plugin to ignore messages.
4
+
5
+
6
+ ## Installation
7
+
8
+ ```bash
9
+ # for fluentd
10
+ $ gem install fluent-plugin-ignore-filter
11
+
12
+ # for td-agent2
13
+ $ sudo td-agent-gem install fluent-plugin-ignore-filter
14
+ ```
15
+
16
+
17
+ ## Usage
18
+
19
+ ### Example 1:
20
+
21
+ ```xml
22
+ <filter alert.messages.**>
23
+ @type ignore
24
+ regexp1 level info
25
+ </filter>
26
+ <filter alert.messages.**>
27
+ @type ignore
28
+ regexp1 server_name ^dev
29
+ </filter>
30
+ <filter alert.messages.**>
31
+ @type ignore
32
+ regexp1 level warning|warn
33
+ regexp2 ident kernel
34
+ </filter>
35
+ ```
36
+
37
+ Assuming following inputs are coming:
38
+
39
+ ```
40
+ alert.messages: {"level":"info","ident":"kernel","server_name":"prod-web",message":"some info"}
41
+ alert.messages: {"level":"warn","ident":"kernel","server_name":"prod-web","message":"failed to do something"}
42
+ alert.messages: {"level":"error","ident":"kernel","server_name":"prod-web",message":"I/O error"}
43
+ alert.messages: {"level":"warn","ident":"chronyd","server_name":"prod-web","message":"System clock wrong"}
44
+ alert.messages: {"level":"error","ident":"sudo","server_name":"prod-web","message":"conversation failed"}
45
+ alert.messages: {"level":"error","ident":"sudo","server_name":"dev-web","message":"conversation failed"}
46
+ ```
47
+
48
+ then output bocomes as belows:
49
+
50
+ ```
51
+ alert.messages: {"level":"error","ident":"kernel","server_name":"prod-web",message":"I/O error"}
52
+ alert.messages: {"level":"warn","ident":"chronyd","server_name":"prod-web","message":"System clock wrong"}
53
+ alert.messages: {"level":"error","ident":"sudo","server_name":"prod-web","message":"conversation failed"}
54
+ ```
55
+
56
+ ### Example 2:
57
+
58
+ ```xml
59
+ <filter alert.messages.**>
60
+ @type ignore
61
+ regexp1 level info|notice
62
+ exclude1 ident crmd
63
+ </filter>
64
+ <filter alert.messages.**>
65
+ @type ignore
66
+ regexp1 level info|notice
67
+ regexp2 ident crmd
68
+ exclude1 message process_lrm_event
69
+ </filter>
70
+ ```
71
+
72
+ Assuming following inputs are coming:
73
+
74
+ ```
75
+ alert.messages: {"level":"info","ident":"kernel","server_name":"prod-web",message":"some info"}
76
+ alert.messages: {"level":"info","ident":"crmd","server_name":"prod-web","message":"process_lrm_event: Operation rundeck_monitor_0: not running"}
77
+ alert.messages: {"level":"info","ident":"crmd","server_name":"prod-web","message":"Performing"}
78
+ alert.messages: {"level":"warn","ident":"chronyd","server_name":"prod-web","message":"System clock wrong"}
79
+ ```
80
+
81
+ then output bocomes as belows:
82
+
83
+ ```
84
+ alert.messages: {"level":"info","ident":"crmd","server_name":"prod-web","message":"process_lrm_event: Operation rundeck_monitor_0: not running"}
85
+ alert.messages: {"level":"warn","ident":"chronyd","server_name":"prod-web","message":"System clock wrong"}
86
+ ```
87
+
88
+
89
+ ## Parameters
90
+ - regexp[1-20] *field\_key* *regexp*
91
+
92
+ The target field key and the ignoring regular expression.
93
+
94
+ - exclude[1-20] *field_key* *regexp*
95
+
96
+ The target field key and the excluding regular expression.
97
+
98
+
99
+ ## TODO
100
+
101
+ * patches welcome!
102
+
103
+
104
+ ## Contributing
105
+
106
+ 1. Fork it ( https://github.com/bungoume/fluent-plugin-ignore-filter/fork )
107
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
108
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
109
+ 4. Push to the branch (`git push origin my-new-feature`)
110
+ 5. Create a new Pull Request
111
+
112
+
113
+ ## Copyright
114
+
115
+ Copyright (c) 2015 Yuri Umezaki
116
+
117
+
118
+ ## Thanks to
119
+ https://github.com/sonots/fluent-plugin-grep
120
+
121
+ ## License
122
+
123
+ Apache License, Version 2.0
data/Rakefile ADDED
@@ -0,0 +1,2 @@
1
+ require "bundler/gem_tasks"
2
+
@@ -0,0 +1,22 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+
5
+ Gem::Specification.new do |spec|
6
+ spec.name = "fluent-plugin-ignore-filter"
7
+ spec.version = "0.0.1"
8
+ spec.authors = ["Yuri Umezaki"]
9
+ spec.email = ["bungoume@gmail.com"]
10
+ spec.homepage = "https://github.com/bungoume/fluent-plugin-ignore-filter"
11
+ spec.summary = "Fluentd filter plugin to ignore messages"
12
+ spec.description = spec.summary
13
+ spec.license = "APLv2"
14
+
15
+ spec.files = `git ls-files -z`.split("\x0")
16
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
17
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
18
+ spec.require_paths = ["lib"]
19
+
20
+ spec.add_runtime_dependency "fluentd", ">= 0.12"
21
+ spec.add_development_dependency "rake"
22
+ end
@@ -0,0 +1,63 @@
1
+ module Fluent
2
+ class IgnoreFilter < Filter
3
+ Fluent::Plugin.register_filter('ignore', self)
4
+
5
+ REGEXP_MAX_NUM = 20
6
+
7
+ (1..REGEXP_MAX_NUM).each {|i| config_param :"regexp#{i}", :string, :default => nil }
8
+ (1..REGEXP_MAX_NUM).each {|i| config_param :"exclude#{i}", :string, :default => nil }
9
+
10
+ def configure(conf)
11
+ super
12
+
13
+ @regexps = []
14
+ (1..REGEXP_MAX_NUM).each do |i|
15
+ next unless conf["regexp#{i}"]
16
+ key, regexp = conf["regexp#{i}"].split(/ /, 2)
17
+ raise ConfigError, "regexp#{i} does not contain 2 parameters" unless regexp
18
+ @regexps.push({key: key, regexp: Regexp.compile(regexp)})
19
+ end
20
+
21
+ @excludes = []
22
+ (1..REGEXP_MAX_NUM).each do |i|
23
+ next unless conf["exclude#{i}"]
24
+ key, regexp = conf["exclude#{i}"].split(/ /, 2)
25
+ raise ConfigError, "exclude#{i} does not contain 2 parameters" unless regexp
26
+ @excludes.push({key: key, regexp: Regexp.compile(regexp)})
27
+ end
28
+ end
29
+
30
+ def filter(tag, time, record)
31
+ result = record
32
+ begin
33
+ catch(:break_loop) do
34
+ @regexps.each do |o|
35
+ throw :break_loop unless match(o[:regexp], record[o[:key]].to_s)
36
+ end
37
+ @excludes.each do |o|
38
+ throw :break_loop if match(o[:regexp], record[o[:key]].to_s)
39
+ end
40
+ result = nil
41
+ end
42
+ rescue => e
43
+ log.warn "failed to grep events", :error_class => e.class, :error => e.message
44
+ log.warn_backtrace
45
+ end
46
+ result
47
+ end
48
+
49
+ private
50
+
51
+ def match(regexp, string)
52
+ begin
53
+ return regexp.match(string.force_encoding('utf-8'))
54
+ rescue ArgumentError => e
55
+ raise e unless e.message.index("invalid byte sequence in".freeze).zero?
56
+ log.info "invalid byte sequence is replaced in `#{string}`"
57
+ string = string.scrub('?')
58
+ retry
59
+ end
60
+ return true
61
+ end
62
+ end if defined?(Filter) # Support only >= v0.12
63
+ end
metadata ADDED
@@ -0,0 +1,79 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: fluent-plugin-ignore-filter
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Yuri Umezaki
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-07-12 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: fluentd
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0.12'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0.12'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ description: Fluentd filter plugin to ignore messages
42
+ email:
43
+ - bungoume@gmail.com
44
+ executables: []
45
+ extensions: []
46
+ extra_rdoc_files: []
47
+ files:
48
+ - ".gitignore"
49
+ - Gemfile
50
+ - LICENSE
51
+ - README.md
52
+ - Rakefile
53
+ - fluent-plugin-ignore-filter.gemspec
54
+ - lib/fluent/plugin/filter_ignore.rb
55
+ homepage: https://github.com/bungoume/fluent-plugin-ignore-filter
56
+ licenses:
57
+ - APLv2
58
+ metadata: {}
59
+ post_install_message:
60
+ rdoc_options: []
61
+ require_paths:
62
+ - lib
63
+ required_ruby_version: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - ">="
66
+ - !ruby/object:Gem::Version
67
+ version: '0'
68
+ required_rubygems_version: !ruby/object:Gem::Requirement
69
+ requirements:
70
+ - - ">="
71
+ - !ruby/object:Gem::Version
72
+ version: '0'
73
+ requirements: []
74
+ rubyforge_project:
75
+ rubygems_version: 2.4.8
76
+ signing_key:
77
+ specification_version: 4
78
+ summary: Fluentd filter plugin to ignore messages
79
+ test_files: []