fluent-multi-format-parser 1.1.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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: c8a91fa22b9e9593dc63a93f6022c453b4c3c2070b6f993ecbfa3077ead19820
4
+ data.tar.gz: 490c2f7916f5b9eda4d5385c30131ef738933e134571756f2f8bd85576487f4e
5
+ SHA512:
6
+ metadata.gz: 5fde9c3e50455ed13de3597f99d5cf6195055031d34403e222ce8c49161a6b2e14f1f610274f8f66321db03d9371464fdba7ffc63a0864bde4a80993bcdcb4a7
7
+ data.tar.gz: d18a37810a9272b5b963bf7ebd8baab1f39f8416f54ffb78f1fd8ed60c21a84f8be2dd6ffcb1761266be16f1a202cc458ccf86d8a65d02110479e50d8577539e
data/.travis.yml ADDED
@@ -0,0 +1,17 @@
1
+ language: ruby
2
+
3
+ rvm:
4
+ - 2.1
5
+ - 2.2.4
6
+ - 2.3.1
7
+ - ruby-head
8
+
9
+ branches:
10
+ only:
11
+ - master
12
+
13
+ matrix:
14
+ allow_failures:
15
+ - rvm: ruby-head
16
+
17
+ script: bundle exec rake test
data/Gemfile ADDED
@@ -0,0 +1,3 @@
1
+ source "https://rubygems.org"
2
+
3
+ gemspec
data/README.md ADDED
@@ -0,0 +1,145 @@
1
+ # Multi format parser plugin for Fluentd
2
+
3
+ Parse format mixed logs.
4
+
5
+ ## Requirements
6
+
7
+ | fluent-plugin-multi-format-parser | fluentd | ruby |
8
+ |-------------------|---------|------|
9
+ | >= 1.0.0 | >= v0.14.0 | >= 2.1 |
10
+ | < 1.0.0 | >= v0.12.0 | >= 1.9 |
11
+
12
+ ## Installation
13
+
14
+ Use RubyGems:
15
+
16
+ fluent-gem install fluent-plugin-multi-format-parser
17
+
18
+ ## Configuration
19
+
20
+ This plugin is a parser plugin. After installed, you can use `multi_format` in `<parse>` supported plugins.
21
+ Use multiple `<pattern>`s to specify multiple parser formats.
22
+
23
+ <source>
24
+ @type udp
25
+ tag logs.multi
26
+
27
+ <parse>
28
+ @type multi_format
29
+ <pattern>
30
+ format apache
31
+ </pattern>
32
+ <pattern>
33
+ format json
34
+ time_key timestamp
35
+ </pattern>
36
+ <pattern>
37
+ format none
38
+ </pattern>
39
+ </parse>
40
+ </source>
41
+
42
+ `multi_format` tries pattern matching from top to bottom and returns parsed result when matched.
43
+
44
+ Available format patterns and parameters are depends on Fluentd parsers.
45
+ See [parser plugin document](http://docs.fluentd.org/v1.0/articles/parser-plugin-overview) for more details.
46
+
47
+ ### For v1.0
48
+
49
+ Put `<pattern>`s inside `<parse>`.
50
+
51
+ <filter app.**>
52
+ @type parser
53
+ key_name message
54
+ <parse>
55
+ @type multi_format
56
+ <pattern>
57
+ format json
58
+ </pattern>
59
+ <pattern>
60
+ format regexp
61
+ expression /...your regexp pattern.../
62
+ </pattern>
63
+ <pattern>
64
+ format none
65
+ </pattern>
66
+ </parse>
67
+ </filter>
68
+
69
+ ### For v0.12
70
+
71
+ Use `format` instead of `<parse></parse>`.
72
+
73
+ <filter app.**>
74
+ @type parser
75
+ key_name message
76
+
77
+ format multi_format
78
+ <pattern>
79
+ format json
80
+ </pattern>
81
+ <pattern>
82
+ format /...your regexp pattern.../
83
+ </pattern>
84
+ <pattern>
85
+ format none
86
+ </pattern>
87
+ </filter>
88
+
89
+ ### Adding format identity field
90
+
91
+ Sometimes it may be useful to know which pattern was used. Since pareser usage
92
+ may not support retagging, there is an option to add a format name field and/or
93
+ index field.
94
+
95
+ Example:
96
+
97
+
98
+ <filter app.**>
99
+ @type parser
100
+ key_name message
101
+ <parse>
102
+ @type multi_format
103
+
104
+ # if set, add this key to record with value being pattern format name
105
+ # (format_name key)
106
+ format_key 'format'
107
+
108
+ # If set, add index of the matching pattern as this key (0-based)
109
+ index_key 'parser_index'
110
+
111
+ <pattern>
112
+ format json
113
+ # set format name for this pattern. If unset, uses format name
114
+ # followed by index (in this case would be 'json#0')
115
+ format_name 'json'
116
+ </pattern>
117
+ <pattern>
118
+ format regexp
119
+ format_name 'MyRefex'
120
+ expression /...your regexp pattern.../
121
+ </pattern>
122
+ <pattern>
123
+ format none
124
+ format_name 'unparsed'
125
+ </pattern>
126
+ </parse>
127
+ </filter>
128
+
129
+ ### NOTE
130
+
131
+ This plugin doesn't work with `multiline` parsers because parser itself doesn't store previous lines.
132
+
133
+ ## Copyright
134
+
135
+ <table>
136
+ <tr>
137
+ <td>Author</td><td>Masahiro Nakagawa <repeatedly@gmail.com></td>
138
+ </tr>
139
+ <tr>
140
+ <td>Copyright</td><td>Copyright (c) 2014- Masahiro Nakagawa</td>
141
+ </tr>
142
+ <tr>
143
+ <td>License</td><td>Apache License (2.0)</td>
144
+ </tr>
145
+ </table>
data/Rakefile ADDED
@@ -0,0 +1,14 @@
1
+
2
+ require 'bundler'
3
+ Bundler::GemHelper.install_tasks
4
+
5
+ require 'rake/testtask'
6
+
7
+ Rake::TestTask.new(:test) do |test|
8
+ test.libs << 'lib' << 'test'
9
+ test.test_files = FileList['test/*.rb']
10
+ test.verbose = true
11
+ end
12
+
13
+ task :default => [:build]
14
+
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 1.1.0
@@ -0,0 +1,22 @@
1
+ # encoding: utf-8
2
+ $:.push File.expand_path('../lib', __FILE__)
3
+
4
+ Gem::Specification.new do |gem|
5
+ gem.name = "fluent-multi-format-parser"
6
+ gem.description = "Multi format parser plugin for Fluentd"
7
+ gem.homepage = "https://github.com/masterashu-motorq/fluentd-multi-parser"
8
+ gem.summary = gem.description
9
+ gem.version = File.read("VERSION").strip
10
+ gem.authors = ["Ashutosh Chauhan"]
11
+ gem.email = "ashutosh@motorq.com"
12
+ #gem.has_rdoc = false
13
+ #gem.platform = Gem::Platform::RUBY
14
+ gem.license = 'Apache-2.0'
15
+ gem.files = `git ls-files`.split("\n")
16
+ gem.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
17
+ gem.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
18
+ gem.require_paths = ['lib']
19
+
20
+ gem.add_dependency "fluentd", [">= 0.14.0", "< 2"]
21
+ gem.add_development_dependency "rake", ">= 0.9.2"
22
+ end
@@ -0,0 +1,60 @@
1
+ require 'fluent/plugin/parser'
2
+
3
+ SubParser = Struct.new(:parser, :index, :name)
4
+ FORMAT_NAME = "format_name"
5
+
6
+ module Fluent
7
+ module Plugin
8
+ class MultiFormatParser < Parser
9
+ Plugin.register_parser('multi_format', self)
10
+ config_param :format_key, :string, default: ''
11
+ config_param :index_key, :string, default: ''
12
+
13
+ def initialize
14
+ super
15
+
16
+ @parsers = []
17
+ @format_key = ''
18
+ @index_key = ''
19
+ end
20
+
21
+ def configure(conf)
22
+ super
23
+
24
+ conf.elements.each_with_index { |e, i|
25
+ next unless ['pattern', 'format'].include?(e.name)
26
+ next if e['format'].nil? && (e['@type'] == 'multi_format')
27
+ parser = SubParser.new
28
+ format_name = e.delete(FORMAT_NAME) || ""+e['format']+"#"+i.to_s
29
+ parser.parser = Plugin.new_parser(e['format'])
30
+ parser.index = i
31
+ parser.name = format_name
32
+ parser.parser.configure(e)
33
+ @parsers << parser
34
+ }
35
+ end
36
+
37
+ def parse(text)
38
+ @parsers.each { |subparser|
39
+ begin
40
+ subparser.parser.parse(text) { |time, record|
41
+ if time && record
42
+ if ! (@format_key.nil? || @format_key.empty?)
43
+ record[@format_key] = subparser.name
44
+ end
45
+ if ! (@index_key.nil? || @index_key.empty?)
46
+ record[@index_key] = subparser.index
47
+ end
48
+ yield time, record
49
+ return
50
+ end
51
+ }
52
+ rescue # ignore parser error
53
+ end
54
+ }
55
+
56
+ yield nil, nil
57
+ end
58
+ end
59
+ end
60
+ end
metadata ADDED
@@ -0,0 +1,83 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: fluent-multi-format-parser
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Ashutosh Chauhan
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2022-09-02 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.14.0
20
+ - - "<"
21
+ - !ruby/object:Gem::Version
22
+ version: '2'
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - ">="
28
+ - !ruby/object:Gem::Version
29
+ version: 0.14.0
30
+ - - "<"
31
+ - !ruby/object:Gem::Version
32
+ version: '2'
33
+ - !ruby/object:Gem::Dependency
34
+ name: rake
35
+ requirement: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - ">="
38
+ - !ruby/object:Gem::Version
39
+ version: 0.9.2
40
+ type: :development
41
+ prerelease: false
42
+ version_requirements: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - ">="
45
+ - !ruby/object:Gem::Version
46
+ version: 0.9.2
47
+ description: Multi format parser plugin for Fluentd
48
+ email: ashutosh@motorq.com
49
+ executables: []
50
+ extensions: []
51
+ extra_rdoc_files: []
52
+ files:
53
+ - ".travis.yml"
54
+ - Gemfile
55
+ - README.md
56
+ - Rakefile
57
+ - VERSION
58
+ - fluent-plugin-multi-format-parser.gemspec
59
+ - lib/fluent/plugin/parser_multi_format.rb
60
+ homepage: https://github.com/masterashu-motorq/fluentd-multi-parser
61
+ licenses:
62
+ - Apache-2.0
63
+ metadata: {}
64
+ post_install_message:
65
+ rdoc_options: []
66
+ require_paths:
67
+ - lib
68
+ required_ruby_version: !ruby/object:Gem::Requirement
69
+ requirements:
70
+ - - ">="
71
+ - !ruby/object:Gem::Version
72
+ version: '0'
73
+ required_rubygems_version: !ruby/object:Gem::Requirement
74
+ requirements:
75
+ - - ">="
76
+ - !ruby/object:Gem::Version
77
+ version: '0'
78
+ requirements: []
79
+ rubygems_version: 3.3.7
80
+ signing_key:
81
+ specification_version: 4
82
+ summary: Multi format parser plugin for Fluentd
83
+ test_files: []