fluentd 0.10.43 → 0.10.44

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of fluentd might be problematic. Click here for more details.

data/.travis.yml CHANGED
@@ -3,15 +3,20 @@ language: ruby
3
3
  rvm:
4
4
  - 1.9.3
5
5
  - 2.0.0
6
- - rbx-19mode
6
+ - 2.1.0
7
+ - rbx
7
8
 
8
9
  branches:
9
10
  only:
10
11
  - master
11
12
  - v11
12
13
 
14
+ gemfile:
15
+ - Gemfile
16
+ - Gemfile.cool.io.1.1.1
17
+
13
18
  script: bundle exec rake
14
19
 
15
20
  matrix:
16
21
  allow_failures:
17
- - rvm: rbx-19mode
22
+ - rvm: rbx
data/ChangeLog CHANGED
@@ -1,4 +1,13 @@
1
- Release 0.10.43 - 2013/02/03
1
+ Release 0.10.44 - 2014/02/26
2
+
3
+ * in_forward: Print remote address and port in trace log
4
+ * Remove several methods from fluentd-debug to call remote object method directly
5
+ * Add --gemfile option to manage Fluentd and plugins using Gemfile and Bundler
6
+ * Add <include path /> directive to include the configuration file under the elements
7
+ * Add 'ruby' keyword to call Kernel method in configuration DSL
8
+ * Relax Cool.io gem version to allow 1.2.x
9
+
10
+ Release 0.10.43 - 2014/02/03
2
11
 
3
12
  * Input/Output: Add 'log_level' option to plugins
4
13
  * parser/in_tail: Fix RegexpParser forget to call configure method
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org/'
2
+
3
+ gem 'cool.io', '= 1.1.1'
4
+ gemspec
data/README.md ADDED
@@ -0,0 +1,39 @@
1
+ Fluentd: Open-Source Data Collector
2
+ ===================================
3
+
4
+ [<img src="https://travis-ci.org/fluent/fluentd.png" />](https://travis-ci.org/fluent/fluentd) [<img src="https://codeclimate.com/github/fluent/fluentd.png " />](https://codeclimate.com/github/fluent/fluentd)
5
+
6
+
7
+ [Fluentd](http://fluentd.org/) collects events from various data sources and writes them to files, database or other types of storages. You can simplify your data stream, and have robust data collection mechanism instantly:
8
+
9
+ <p align="center">
10
+ <img src="http://docs.fluentd.org/images/fluentd-architecture.png" width="500px"/>
11
+ </p>
12
+
13
+ An event consists of *tag*, *time* and *record*. Tag is a string separated with '.' (e.g. myapp.access). It is used to categorize events. Time is a UNIX time recorded at occurrence of an event. Record is a JSON object.
14
+
15
+
16
+ ## Quick Start
17
+
18
+ $ gem install fluentd
19
+ $ fluentd -s conf
20
+ $ fluentd -c conf/fluent.conf &
21
+ $ echo '{"json":"message"}' | fluent-cat debug.test
22
+
23
+ ## More Information
24
+
25
+ - Web site: http://fluentd.org/
26
+ - Documents: http://docs.fluentd.org/
27
+ - Source repository: http://github.com/fluent
28
+ - Discussion: http://groups.google.com/group/fluentd
29
+ - News Letters: http://go.treasuredata.com/Fluentd_education
30
+ - Author: Sadayuki Furuhashi
31
+ - Copyright: (c) 2011 FURUHASHI Sadayuki
32
+ - License: Apache License, Version 2.0
33
+
34
+ ## Contributors:
35
+
36
+ Patches contributed by [great developers](https://github.com/fluent/fluentd/contributors).
37
+
38
+ [<img src="https://ga-beacon.appspot.com/UA-24890265-6/fluent/fluentd" />](https://github.com/fluent/fluentd)
39
+
data/fluentd.gemspec CHANGED
@@ -18,15 +18,15 @@ Gem::Specification.new do |gem|
18
18
 
19
19
  gem.required_ruby_version = '>= 1.9.2'
20
20
 
21
- gem.add_runtime_dependency(%q<msgpack>, [">= 0.4.4", "!= 0.5.0", "!= 0.5.1", "!= 0.5.2", "!= 0.5.3", "< 0.6.0"])
22
- gem.add_runtime_dependency(%q<json>, [">= 1.4.3"])
23
- gem.add_runtime_dependency(%q<yajl-ruby>, ["~> 1.0"])
24
- gem.add_runtime_dependency(%q<cool.io>, ["~> 1.1.1"])
25
- gem.add_runtime_dependency(%q<http_parser.rb>, ["~> 0.5.1"])
26
- gem.add_runtime_dependency(%q<sigdump>, ["~> 0.2.2"])
21
+ gem.add_runtime_dependency("msgpack", [">= 0.4.4", "!= 0.5.0", "!= 0.5.1", "!= 0.5.2", "!= 0.5.3", "< 0.6.0"])
22
+ gem.add_runtime_dependency("json", [">= 1.4.3"])
23
+ gem.add_runtime_dependency("yajl-ruby", ["~> 1.0"])
24
+ gem.add_runtime_dependency("cool.io", [">= 1.1.1", "!= 1.2.0", "< 2.0.0"])
25
+ gem.add_runtime_dependency("http_parser.rb", ["~> 0.5.1"])
26
+ gem.add_runtime_dependency("sigdump", ["~> 0.2.2"])
27
27
 
28
- gem.add_development_dependency(%q<rake>, [">= 0.9.2"])
29
- gem.add_development_dependency(%q<parallel_tests>, [">= 0.15.3"])
30
- gem.add_development_dependency(%q<rr>, [">= 1.0.0"])
31
- gem.add_development_dependency(%q<timecop>, [">= 0.3.0"])
28
+ gem.add_development_dependency("rake", [">= 0.9.2"])
29
+ gem.add_development_dependency("parallel_tests", [">= 0.15.3"])
30
+ gem.add_development_dependency("rr", [">= 1.0.0"])
31
+ gem.add_development_dependency("timecop", [">= 0.3.0"])
32
32
  end
@@ -0,0 +1,31 @@
1
+ #
2
+ # Fluentd
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+ #
16
+
17
+ system("bundle install")
18
+ unless $?.success?
19
+ exit $?.exitstatus
20
+ end
21
+
22
+ cmdline = [
23
+ 'bundle',
24
+ 'exec',
25
+ RbConfig.ruby,
26
+ File.expand_path(File.join(File.dirname(__FILE__), 'fluentd.rb')),
27
+ ] + ARGV
28
+
29
+ exec *cmdline
30
+ exit! 127
31
+
@@ -59,6 +59,13 @@ require 'fluent/load'
59
59
  $log = Fluent::Log.new(STDERR, Fluent::Log::LEVEL_TRACE)
60
60
  Fluent::Engine.init
61
61
 
62
+ DRb::DRbObject.class_eval do
63
+ undef_method :methods
64
+ undef_method :instance_eval
65
+ undef_method :instance_variables
66
+ undef_method :instance_variable_get
67
+ end
68
+
62
69
  remote_engine = DRb::DRbObject.new_with_uri(uri)
63
70
 
64
71
  Fluent.module_eval do
@@ -107,6 +107,14 @@ op.on('--suppress-config-dump', "suppress config dumping when fluentd starts", T
107
107
  opts[:suppress_config_dump] = b
108
108
  }
109
109
 
110
+ op.on('-g', '--gemfile GEMFILE', "Gemfile path") {|s|
111
+ opts[:gemfile] = s
112
+ }
113
+
114
+ op.on('-G', '--gem-path GEM_INSTALL_PATH', "Gemfile install path (default: $(dirname $gemfile)/vendor/bundle)") {|s|
115
+ opts[:gem_install_path] = s
116
+ }
117
+
110
118
  (class<<self;self;end).module_eval do
111
119
  define_method(:usage) do |msg|
112
120
  puts op.to_s
@@ -116,9 +124,9 @@ op.on('--suppress-config-dump', "suppress config dumping when fluentd starts", T
116
124
  end
117
125
 
118
126
  begin
119
- op.parse!(ARGV)
127
+ rest = op.parse(ARGV)
120
128
 
121
- if ARGV.length != 0
129
+ if rest.length != 0
122
130
  usage nil
123
131
  end
124
132
  rescue
@@ -126,6 +134,20 @@ rescue
126
134
  end
127
135
 
128
136
 
137
+ ##
138
+ ## Bundler injection
139
+ #
140
+ if ENV['FLUENTD_DISABLE_BUNDLER_INJECTION'] != '1' && gemfile = opts[:gemfile]
141
+ ENV['BUNDLE_GEMFILE'] = gemfile
142
+ if path = opts[:gem_install_path]
143
+ ENV['BUNDLE_PATH'] = path
144
+ else
145
+ ENV['BUNDLE_PATH'] = File.expand_path(File.join(File.dirname(gemfile), 'vendor/bundle'))
146
+ end
147
+ ENV['FLUENTD_DISABLE_BUNDLER_INJECTION'] = '1'
148
+ load File.expand_path(File.join(File.dirname(__FILE__), 'bundler_injection.rb'))
149
+ end
150
+
129
151
  if setup_path = opts[:setup_path]
130
152
  require 'fileutils'
131
153
  FileUtils.mkdir_p File.join(setup_path, "plugin")
data/lib/fluent/config.rb CHANGED
@@ -171,6 +171,9 @@ module Fluent
171
171
  line.gsub!(/\s*(?:\#.*)?$/,'')
172
172
  if line.empty?
173
173
  next
174
+ elsif m = /^\<include\s*(.*)\s*\/\>$/.match(line)
175
+ value = m[1].strip
176
+ process_include(attrs, elems, value, allow_include)
174
177
  elsif m = /^\<([a-zA-Z0-9_]+)\s*(.+?)?\>$/.match(line)
175
178
  e_name = m[1]
176
179
  e_arg = m[2] || ""
@@ -197,7 +200,7 @@ module Fluent
197
200
  return attrs, elems
198
201
  end
199
202
 
200
- def process_include(attrs, elems, uri)
203
+ def process_include(attrs, elems, uri, allow_include = true)
201
204
  u = URI.parse(uri)
202
205
  if u.scheme == 'file' || u.path == uri # file path
203
206
  path = u.path
@@ -207,11 +210,11 @@ module Fluent
207
210
  pattern = path
208
211
  end
209
212
 
210
- Dir.glob(pattern).each {|path|
213
+ Dir.glob(pattern).sort.each {|path|
211
214
  basepath = File.dirname(path)
212
215
  fname = File.basename(path)
213
216
  File.open(path) {|f|
214
- Parser.new(basepath, f.each_line, fname).parse!(true, nil, attrs, elems)
217
+ Parser.new(basepath, f.each_line, fname).parse!(allow_include, nil, attrs, elems)
215
218
  }
216
219
  }
217
220
 
@@ -220,7 +223,7 @@ module Fluent
220
223
  fname = path
221
224
  require 'open-uri'
222
225
  open(uri) {|f|
223
- Parser.new(basepath, f.each_line, fname).parse!(true, nil, attrs, elems)
226
+ Parser.new(basepath, f.each_line, fname).parse!(allow_include, nil, attrs, elems)
224
227
  }
225
228
  end
226
229
 
@@ -81,6 +81,24 @@ module Fluent
81
81
  ::Kernel.raise ::ArgumentError, "#{name} block requires arguments for match pattern" if args.nil? || args.size != 1
82
82
  @proxy.add_element('match', args.first, block)
83
83
  end
84
+
85
+ def self.const_missing(name)
86
+ return ::Kernel.const_get(name) if ::Kernel.const_defined?(name)
87
+
88
+ if name.to_s =~ /^Fluent::Config::DSL::Element::(.*)$/
89
+ name = "#{$1}".to_sym
90
+ return ::Kernel.const_get(name) if ::Kernel.const_defined?(name)
91
+ end
92
+ ::Kernel.eval("#{name}")
93
+ end
94
+
95
+ def ruby(&block)
96
+ if block
97
+ @proxy.instance_exec(&block)
98
+ else
99
+ ::Kernel
100
+ end
101
+ end
84
102
  end
85
103
  end
86
104
  end
@@ -55,7 +55,9 @@ module Fluent
55
55
  @loop.stop
56
56
  @usock.close
57
57
  listen_address = (@bind == '0.0.0.0' ? '127.0.0.1' : @bind)
58
- TCPSocket.open(listen_address, @port) {|sock| } # FIXME @thread.join blocks without this line
58
+ # This line is for connecting listen socket to stop the event loop.
59
+ # We should use more better approach, e.g. using pipe, fixing cool.io with timeout, etc.
60
+ TCPSocket.open(listen_address, @port) {|sock| } # FIXME @thread.join blocks without this line
59
61
  @thread.join
60
62
  @lsock.close
61
63
  end
@@ -151,7 +153,10 @@ module Fluent
151
153
  end
152
154
  @on_message = on_message
153
155
  @log = log
154
- @log.trace { "accepted fluent socket object_id=#{self.object_id}" }
156
+ @log.trace {
157
+ remote_port, remote_addr = *Socket.unpack_sockaddr_in(@_io.getpeername) rescue nil
158
+ "accepted fluent socket from '#{remote_addr}:#{remote_port}': object_id=#{self.object_id}"
159
+ }
155
160
  end
156
161
 
157
162
  def on_connect
@@ -112,7 +112,10 @@ module Fluent
112
112
  end
113
113
  @on_message = on_message
114
114
  @log = log
115
- @log.trace { "accepted fluent socket object_id=#{self.object_id}" }
115
+ @log.trace {
116
+ remote_port, remote_addr = *Socket.unpack_sockaddr_in(@_io.getpeername) rescue nil
117
+ "accepted fluent socket from '#{remote_addr}:#{remote_port}': object_id=#{self.object_id}"
118
+ }
116
119
  end
117
120
 
118
121
  def on_connect
@@ -89,7 +89,7 @@ module Fluent
89
89
  def initialize
90
90
  super
91
91
  $log.warn "'tcp' output is obsoleted and will be removed. Use 'forward' instead."
92
- $log.warn "see 'forward' section in http://fluentd.org/doc/plugin.html for the high-availability configuration."
92
+ $log.warn "see 'forward' section in http://docs.fluentd.org/ for the high-availability configuration."
93
93
  end
94
94
 
95
95
  config_param :port, :integer, :default => DEFAULT_LISTEN_PORT
@@ -1,5 +1,5 @@
1
1
  module Fluent
2
2
 
3
- VERSION = '0.10.43'
3
+ VERSION = '0.10.44'
4
4
 
5
5
  end
data/test/config.rb CHANGED
@@ -15,7 +15,7 @@ class ConfigTest < Test::Unit::TestCase
15
15
  include dir/config_test_2.conf #
16
16
  include #{TMP_DIR}/config_test_4.conf
17
17
  include file://#{TMP_DIR}/config_test_5.conf
18
- include config.d/*.conf
18
+ <include config.d/*.conf />
19
19
  ]
20
20
  write_config "#{TMP_DIR}/dir/config_test_2.conf", %[
21
21
  k2 relative_path_include
@@ -32,13 +32,31 @@ class ConfigTest < Test::Unit::TestCase
32
32
  ]
33
33
  write_config "#{TMP_DIR}/config.d/config_test_6.conf", %[
34
34
  k6 wildcard_include_1
35
- <elem name>
35
+ <elem1 name>
36
36
  include normal_parameter
37
- </elem>
37
+ </elem1>
38
38
  ]
39
39
  write_config "#{TMP_DIR}/config.d/config_test_7.conf", %[
40
40
  k7 wildcard_include_2
41
41
  ]
42
+ write_config "#{TMP_DIR}/config.d/config_test_8.conf", %[
43
+ <elem2 name>
44
+ <include ../dir/config_test_9.conf />
45
+ </elem2>
46
+ ]
47
+ write_config "#{TMP_DIR}/dir/config_test_9.conf", %[
48
+ k9 embeded
49
+ <elem3 name>
50
+ nested nested_value
51
+ include hoge
52
+ </elem3>
53
+ ]
54
+ write_config "#{TMP_DIR}/config.d/00_config_test_8.conf", %[
55
+ k8 wildcard_include_3
56
+ <elem4 name>
57
+ include normal_parameter
58
+ </elem4>
59
+ ]
42
60
 
43
61
  end
44
62
 
@@ -52,10 +70,33 @@ class ConfigTest < Test::Unit::TestCase
52
70
  assert_equal 'uri_include', c['k5']
53
71
  assert_equal 'wildcard_include_1', c['k6']
54
72
  assert_equal 'wildcard_include_2', c['k7']
55
- assert_equal 'elem', c.elements.first.name
56
- assert_equal 'name', c.elements.first.arg
57
- assert_equal 'normal_parameter', c.elements.first['include']
58
-
73
+ assert_equal 'wildcard_include_3', c['k8']
74
+ assert_equal [
75
+ 'k1',
76
+ 'k2',
77
+ 'k3',
78
+ 'k4',
79
+ 'k5',
80
+ 'k8', # Because of the file name this comes first.
81
+ 'k6',
82
+ 'k7',
83
+ ], c.keys
84
+
85
+ elem1 = c.elements.find { |e| e.name == 'elem1' }
86
+ assert_not_nil elem1
87
+ assert_equal 'name', elem1.arg
88
+ assert_equal 'normal_parameter', elem1['include']
89
+
90
+ elem2 = c.elements.find { |e| e.name == 'elem2' }
91
+ assert_not_nil elem2
92
+ assert_equal 'name', elem2.arg
93
+ assert_equal 'embeded', elem2['k9']
94
+ assert !elem2.has_key?('include')
95
+
96
+ elem3 = elem2.elements.find { |e| e.name == 'elem3' }
97
+ assert_not_nil elem3
98
+ assert_equal 'nested_value', elem3['nested']
99
+ assert_equal 'hoge', elem3['include']
59
100
  end
60
101
 
61
102
  def test_check_not_fetchd
data/test/configdsl.rb CHANGED
@@ -104,4 +104,45 @@ match('aa')
104
104
  Fluent::Config::DSL::Parser.parse(TEST_DSL_CONFIG5)
105
105
  }
106
106
  end
107
+
108
+ def test_with_ruby_keyword
109
+ uname_string = `uname -a`
110
+ root1 = Fluent::Config::DSL::Parser.parse(<<DSL)
111
+ uname_str = ruby.open('|uname -a'){|out| out.read}
112
+ source {
113
+ uname uname_str
114
+ }
115
+ DSL
116
+ source1 = root1.elements.first
117
+ assert_equal 'source', source1.name
118
+ assert_equal 1, source1.keys.size
119
+ assert_equal uname_string, source1['uname']
120
+
121
+ root2 = Fluent::Config::DSL::Parser.parse(<<DSL)
122
+ ruby_version = ruby {
123
+ require 'erb'
124
+ ERB.new('<%= RUBY_VERSION %> from erb').result
125
+ }
126
+ source {
127
+ version ruby_version
128
+ }
129
+ DSL
130
+ source2 = root2.elements.first
131
+ assert_equal 'source', source2.name
132
+ assert_equal 1, source2.keys.size
133
+ assert_equal "#{RUBY_VERSION} from erb", source2['version']
134
+
135
+ # Parser#parse raises NoMethodError when configuration dsl elements are written in ruby block
136
+ conf3 = <<DSL
137
+ ruby {
138
+ source {
139
+ type "tail"
140
+ }
141
+ }
142
+ source {
143
+ uname uname_str
144
+ }
145
+ DSL
146
+ assert_raise (NoMethodError) { Fluent::Config::DSL::Parser.parse(conf3) }
147
+ end
107
148
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fluentd
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.10.43
4
+ version: 0.10.44
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2014-02-03 00:00:00.000000000 Z
12
+ date: 2014-02-26 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: msgpack
@@ -94,17 +94,29 @@ dependencies:
94
94
  requirement: !ruby/object:Gem::Requirement
95
95
  none: false
96
96
  requirements:
97
- - - ~>
97
+ - - ! '>='
98
98
  - !ruby/object:Gem::Version
99
99
  version: 1.1.1
100
+ - - ! '!='
101
+ - !ruby/object:Gem::Version
102
+ version: 1.2.0
103
+ - - <
104
+ - !ruby/object:Gem::Version
105
+ version: 2.0.0
100
106
  type: :runtime
101
107
  prerelease: false
102
108
  version_requirements: !ruby/object:Gem::Requirement
103
109
  none: false
104
110
  requirements:
105
- - - ~>
111
+ - - ! '>='
106
112
  - !ruby/object:Gem::Version
107
113
  version: 1.1.1
114
+ - - ! '!='
115
+ - !ruby/object:Gem::Version
116
+ version: 1.2.0
117
+ - - <
118
+ - !ruby/object:Gem::Version
119
+ version: 2.0.0
108
120
  - !ruby/object:Gem::Dependency
109
121
  name: http_parser.rb
110
122
  requirement: !ruby/object:Gem::Requirement
@@ -220,7 +232,8 @@ files:
220
232
  - COPYING
221
233
  - ChangeLog
222
234
  - Gemfile
223
- - README.rdoc
235
+ - Gemfile.cool.io.1.1.1
236
+ - README.md
224
237
  - Rakefile
225
238
  - bin/fluent-cat
226
239
  - bin/fluent-debug
@@ -229,6 +242,7 @@ files:
229
242
  - fluent.conf
230
243
  - fluentd.gemspec
231
244
  - lib/fluent/buffer.rb
245
+ - lib/fluent/command/bundler_injection.rb
232
246
  - lib/fluent/command/cat.rb
233
247
  - lib/fluent/command/debug.rb
234
248
  - lib/fluent/command/fluentd.rb
@@ -324,7 +338,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
324
338
  version: '0'
325
339
  segments:
326
340
  - 0
327
- hash: -936965180993264578
341
+ hash: -3906480416745103078
328
342
  requirements: []
329
343
  rubyforge_project:
330
344
  rubygems_version: 1.8.23
data/README.rdoc DELETED
@@ -1,69 +0,0 @@
1
- = Fluentd
2
-
3
- {<img src="https://travis-ci.org/fluent/fluentd.png" />}[https://travis-ci.org/fluent/fluentd] {<img src="https://codeclimate.com/github/fluent/fluentd.png " />}[https://codeclimate.com/github/fluent/fluentd]
4
-
5
- Fluentd is an event collector system. It is a generalized version of syslogd, which handles JSON objects for its log messages.
6
-
7
- == Architecture
8
-
9
- Fluentd collects events from various data sources and writes them to files, database or other types of storages:
10
-
11
-
12
- Web apps ---+ +--> file
13
- | |
14
- +--> ---+
15
- /var/log ------> Fluentd ------> mail
16
- +--> ---+
17
- | |
18
- Apache ---- +--> Fluentd
19
-
20
-
21
- Fluent also supports log transfer:
22
-
23
-
24
- Web server
25
- +---------+
26
- | Fluentd -------
27
- +---------+| |
28
- +---------+ |
29
- |
30
- Proxy server | Log server, Amazon S3, HDFS, ...
31
- +---------+ +--> +---------+
32
- | Fluentd ----------> | Fluentd ||
33
- +---------+| +--> +---------+|
34
- +---------+ | +---------+
35
- |
36
- Database server |
37
- +---------+ |
38
- | Fluentd ---------> mail
39
- +---------+|
40
- +---------+
41
-
42
-
43
- An event consists of *tag*, *time* and *record*. Tag is a string separated with '.' (e.g. myapp.access). It is used to categorize events. Time is a UNIX time recorded at occurrence of an event. Record is a JSON object.
44
-
45
-
46
- == Quick Start
47
-
48
- $ gem install fluentd
49
- $ # install sample configuration file to the directory
50
- $ fluentd -s conf
51
- $ fluentd -c conf/fluent.conf &
52
- $ echo '{"json":"message"}' | fluent-cat debug.test
53
-
54
- == Meta
55
-
56
- Web site:: http://fluentd.org/
57
- Documents:: http://docs.fluentd.org/
58
- Source repository:: http://github.com/fluent
59
- Discussion:: http://groups.google.com/group/fluentd
60
- Author:: Sadayuki Furuhashi
61
- Copyright:: (c) 2011 FURUHASHI Sadayuki
62
- License:: Apache License, Version 2.0
63
-
64
- == Contributors:
65
-
66
- Patches contributed by {those people}[https://github.com/fluent/fluentd/contributors].
67
-
68
- {<img src="https://ga-beacon.appspot.com/UA-24890265-6/fluent/fluentd" />}[https://github.com/fluent/fluentd]
69
-