fluentd 0.10.0

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.

Files changed (54) hide show
  1. data/AUTHORS +1 -0
  2. data/COPYING +14 -0
  3. data/ChangeLog +178 -0
  4. data/README.rdoc +57 -0
  5. data/Rakefile +62 -0
  6. data/VERSION +1 -0
  7. data/bin/fluent-cat +6 -0
  8. data/bin/fluent-gem +10 -0
  9. data/bin/fluentd +6 -0
  10. data/fluent.conf +78 -0
  11. data/fluentd.gemspec +116 -0
  12. data/lib/fluent/buffer.rb +274 -0
  13. data/lib/fluent/command/cat.rb +299 -0
  14. data/lib/fluent/command/fluentd.rb +245 -0
  15. data/lib/fluent/config.rb +304 -0
  16. data/lib/fluent/engine.rb +224 -0
  17. data/lib/fluent/env.rb +6 -0
  18. data/lib/fluent/event.rb +159 -0
  19. data/lib/fluent/input.rb +41 -0
  20. data/lib/fluent/load.rb +23 -0
  21. data/lib/fluent/log.rb +277 -0
  22. data/lib/fluent/match.rb +189 -0
  23. data/lib/fluent/mixin.rb +170 -0
  24. data/lib/fluent/output.rb +466 -0
  25. data/lib/fluent/parser.rb +115 -0
  26. data/lib/fluent/plugin.rb +145 -0
  27. data/lib/fluent/plugin/buf_file.rb +181 -0
  28. data/lib/fluent/plugin/buf_memory.rb +97 -0
  29. data/lib/fluent/plugin/buf_zfile.rb +84 -0
  30. data/lib/fluent/plugin/in_http.rb +282 -0
  31. data/lib/fluent/plugin/in_stream.rb +187 -0
  32. data/lib/fluent/plugin/in_syslog.rb +174 -0
  33. data/lib/fluent/plugin/in_tail.rb +150 -0
  34. data/lib/fluent/plugin/out_copy.rb +72 -0
  35. data/lib/fluent/plugin/out_file.rb +111 -0
  36. data/lib/fluent/plugin/out_null.rb +44 -0
  37. data/lib/fluent/plugin/out_roundrobin.rb +72 -0
  38. data/lib/fluent/plugin/out_stdout.rb +34 -0
  39. data/lib/fluent/plugin/out_stream.rb +128 -0
  40. data/lib/fluent/plugin/out_test.rb +68 -0
  41. data/lib/fluent/test.rb +8 -0
  42. data/lib/fluent/test/base.rb +63 -0
  43. data/lib/fluent/test/input_test.rb +89 -0
  44. data/lib/fluent/test/output_test.rb +93 -0
  45. data/lib/fluent/version.rb +5 -0
  46. data/test/helper.rb +6 -0
  47. data/test/match.rb +115 -0
  48. data/test/plugin/in_http.rb +84 -0
  49. data/test/plugin/in_stream.rb +136 -0
  50. data/test/plugin/out_copy.rb +55 -0
  51. data/test/plugin/out_file.rb +82 -0
  52. data/test/plugin/out_roundrobin.rb +65 -0
  53. data/test/plugin/out_stream.rb +74 -0
  54. metadata +224 -0
data/AUTHORS ADDED
@@ -0,0 +1 @@
1
+ FURUHASHI Sadayuki <frsyuki _at_ gmail.com>
data/COPYING ADDED
@@ -0,0 +1,14 @@
1
+ Copyright (C) 2011 FURUHASHI Sadayuki
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.
14
+
@@ -0,0 +1,178 @@
1
+
2
+ Release 0.10.0 - 2011/10/16
3
+
4
+ * Removed Event class
5
+ * def format(tag, event) -> format(time, tag, record)
6
+ * def emit(tag, event) -> emit(tag, time, record)
7
+ * Added plugin APIs
8
+ * Added Configurable
9
+ * Added TimeFormatter
10
+ * Added SetTimeKeyMixin
11
+ * Added SetTagKeyMixin
12
+ * Added InputTestDriver
13
+ * Added Gemfile, gemspec and .rvmrc files
14
+
15
+
16
+ Release 0.9.20 - 2011/10/07
17
+
18
+ * Config#has_key? sets used flag not to show warning
19
+ * in_tcp supports JSON
20
+ * Depends on Yajl
21
+ * Fixed fluentd -r option
22
+ * Fixed autogen.sh to create plugins directory
23
+
24
+
25
+ Release 0.9.19 - 2011/10/07
26
+
27
+ * Secondary outputs work only when error count exceededs retry_limit
28
+ * Secondary outputs retry upto secondary_limit
29
+ * Added Output#secondary_init
30
+ * Added unit test driver for output plugins
31
+ * Added Fluent::Test.test? method
32
+ * Added comparision methods (<=>, ==, eql? and hash) to Event class
33
+ * Added test cases for out_copy, out_roundrobin and out_file
34
+
35
+
36
+ Release 0.9.18 - 2011/10/04
37
+
38
+ * Performance improvements
39
+ * in_tcp uses lazy deserialization
40
+ * Engine caches results of Match#match
41
+ * out_file caches results of strftime
42
+ * Fixed TextParser.register_template
43
+
44
+
45
+ Release 0.9.17 - 2011/10/03
46
+
47
+ * TimeSlicedOutput caches results of strftime() for performance
48
+ * Fixed TextParser.register_template (thanks eiichiroi)
49
+ * Fixed fluent-cat --port argument to work
50
+
51
+
52
+ Release 0.9.16 - 2011/10/01
53
+
54
+ * Fixed it can't use relative path for --plugin command line argument
55
+ * Fixed out_copy to work with non-repeatable event streams
56
+
57
+
58
+ Release 0.9.15 - 2011/09/21
59
+
60
+ * Set default encoding to ASCII-8BIT
61
+ * Fixed thread issues in BasicBuffer
62
+ * Performance improvements
63
+
64
+
65
+ Release 0.9.14 - 2011/09/21
66
+
67
+ * Fixed to write unexpected error to log files
68
+ * Plugin loader uses GemSpec if it is available to load newer plugin
69
+ * Added Config.bool_value method for plugins
70
+
71
+
72
+ Release 0.9.13 - 2011/09/21
73
+
74
+ * Updated out_file plugin
75
+ * Uses localtime by default
76
+ * Uses \t to separate time, tag and JSON.
77
+ * Uses ISO-8601 for the time format
78
+
79
+
80
+ Release 0.9.12 - 2011/09/20
81
+
82
+ * Updated out_file plugin
83
+ * Supports log compression
84
+ * Slices log files every day by default
85
+
86
+
87
+ Release 0.9.11 - 2011/09/19
88
+
89
+ * Added out_null plugin
90
+ * Added out_roundrobin plugin
91
+ * in_http supports keep-alive
92
+ * in_tcp and in_unix detect network failure
93
+
94
+
95
+ Release 0.9.10 - 2011/09/07
96
+
97
+ * Periodic timer enqueues buffer chunks only when queue is empty
98
+
99
+
100
+ Release 0.9.9 - 2011/09/06
101
+
102
+ * in_tail strips \n at the end of log line
103
+ * Uses newer one if multiple plugins are found
104
+
105
+
106
+ Release 0.9.8 - 2011/08/16
107
+
108
+ * in_http plugin supports 'Expect: 100-continue' header
109
+ * Added --user and --group command line arguments to change privilege
110
+ * Changed default retry_limit parameter from 8 to 17
111
+ * Changed default buffer_chunk_limit parameter from 1m to 16m
112
+ * Changed default buffer_queue_limit parameter from 100 to 64
113
+
114
+
115
+ Release 0.9.7 - 2011/08/06
116
+
117
+ * Load plugins named fluent_plugin.rb installed by RubyGems
118
+ * Load plugins located on fluent/plugin/{buf,in,out}_{type} installed by RubyGems
119
+ * Removed out_tdlog plugin to fluent-plugin-td gem
120
+
121
+
122
+ Release 0.9.6 - 2011/08/06
123
+
124
+ * Force flush buffered events on SIGUSR1
125
+ * out_tdlog uses event tag for the database and table name
126
+ * Fluent can log Fluent logs
127
+ * Colorize Fluent logs on console
128
+ * Changed default unix domain socket path to /var/run/fluent/fluent.sock
129
+ * Makefile.am and configure.in aware fakeroot
130
+
131
+
132
+ Release 0.9.5 - 2011/07/23
133
+
134
+ * Added <secondary> tag that fallbacks to secondary output when it can't
135
+ write to primary output.
136
+ * <match> pattern supports **; matches any fragments recursively.
137
+ * <match> pattern supports {x,y,...}; matches any of the inner patterns.
138
+
139
+
140
+ Release 0.9.4 - 2011/07/22
141
+
142
+ * Switched EventMachine to Cool.io
143
+ * in_tail continues to follow file if it is deleted on Linux
144
+ * Added fluentd --setup option that installs sample configuration file
145
+ * Added out_tdlog plugin
146
+
147
+
148
+ Release 0.9.3 - 2011/07/05
149
+
150
+ * Disable EventMachine.epoll because it doesn't work correctly on
151
+ Ruby 1.9 with threads
152
+ * in_tcp and in_unix uses EventMachine instead of threads
153
+ * Set BasicSocket.do_not_reverse_lookup = true
154
+
155
+
156
+ Release 0.9.2 - 2011/07/03
157
+
158
+ * Added TimeSlicedOutput that splits buffer chunk exactly based on the time
159
+ * Changed structure of buffers from queue to map + queue
160
+ * Show waring if configuration parameters are not used
161
+ * Added out_time_file plugin
162
+
163
+
164
+ Release 0.9.1 - 2011/06/26
165
+
166
+ * Added in_tail plugin
167
+ * Added in_syslog plugin
168
+ * Added out_stdout plugin
169
+ * Added out_tcp plugin
170
+ * Added out_unix plugin
171
+ * Improved performance of in_http plugin by replacing WEBrick + thread
172
+ with EventMachine
173
+
174
+
175
+ Release 0.9.0 - 2011/06/20
176
+
177
+ * First release
178
+
@@ -0,0 +1,57 @@
1
+ = Fluent
2
+
3
+ Fluent is an event collector system. It's said that Fluent is generalized version of syslogd, which can deal with JSON object for the log message.
4
+
5
+ == Archtecture
6
+
7
+ Fluent collects events from various data sources and write them to files, database or other storages:
8
+
9
+
10
+ Web apps ---+ +--> file
11
+ | |
12
+ +--> ---+
13
+ /var/log ------> fluentd ------> mail
14
+ +--> ---+
15
+ | |
16
+ apache ---- +--> fluentd
17
+
18
+
19
+ Fluent also supports log transfer:
20
+
21
+
22
+ Web server
23
+ +---------+
24
+ | fluentd -------
25
+ +---------+| |
26
+ +---------+ |
27
+ |
28
+ Proxy server | Log server, Amazon S3, HDFS, ...
29
+ +---------+ +--> +---------+
30
+ | fluentd ----------> | fluentd ||
31
+ +---------+| +--> +---------+|
32
+ +---------+ | +---------+
33
+ |
34
+ Database server |
35
+ +---------+ |
36
+ | fluentd ---------> mail
37
+ +---------+|
38
+ +---------+
39
+
40
+
41
+ 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 when the event occurs. Record is a JSON object.
42
+
43
+
44
+ == Quick Start
45
+
46
+ $ gem install fluentd
47
+ $ fluentd &
48
+ $ echo '{"json":"message"}' | fluent-cat debug.test
49
+
50
+
51
+ Web site:: http://fluentd.org/
52
+ Documents:: http://fluentd.org/doc/
53
+ Source repository:: http://github.com/fluent
54
+ Author:: Sadayuki Furuhashi
55
+ Copyright:: (c) 2011 FURUHASHI Sadayuki
56
+ License:: Apache License, Version 2.0
57
+
@@ -0,0 +1,62 @@
1
+ require 'rake'
2
+ require 'rake/testtask'
3
+ require 'rake/clean'
4
+
5
+ begin
6
+ require 'jeweler'
7
+ Jeweler::Tasks.new do |gemspec|
8
+ gemspec.name = "fluentd"
9
+ gemspec.summary = "Fluent event collector"
10
+ gemspec.author = "Sadayuki Furuhashi"
11
+ gemspec.email = "frsyuki@gmail.com"
12
+ gemspec.homepage = "http://fluentd.org/"
13
+ gemspec.has_rdoc = false
14
+ gemspec.require_paths = ["lib"]
15
+ gemspec.add_dependency "msgpack", "~> 0.4.4"
16
+ gemspec.add_dependency "json", ">= 1.4.3"
17
+ gemspec.add_dependency "yajl-ruby", "~> 1.0.0"
18
+ gemspec.add_dependency "cool.io", "~> 1.0.0"
19
+ gemspec.add_dependency "http_parser.rb", "~> 0.5.1"
20
+ gemspec.add_dependency "rake", ">= 0.9.2"
21
+ gemspec.test_files = Dir["test/**/*.rb"]
22
+ gemspec.files = Dir["bin/**/*", "lib/**/*", "test/**/*.rb"] +
23
+ %w[fluent.conf VERSION AUTHORS Rakefile COPYING fluentd.gemspec]
24
+ gemspec.executables = ['fluentd', 'fluent-cat', 'fluent-gem']
25
+ end
26
+ Jeweler::GemcutterTasks.new
27
+ rescue LoadError
28
+ puts "Jeweler not available. Install it with: gem install jeweler"
29
+ end
30
+
31
+ Rake::TestTask.new(:test) do |t|
32
+ t.test_files = Dir['test/*_test.rb']
33
+ t.ruby_opts = ['-rubygems'] if defined? Gem
34
+ t.ruby_opts << '-I.'
35
+ end
36
+
37
+ VERSION_FILE = "lib/fluent/version.rb"
38
+
39
+ file VERSION_FILE => ["VERSION"] do |t|
40
+ version = File.read("VERSION").strip
41
+ File.open(VERSION_FILE, "w") {|f|
42
+ f.write <<EOF
43
+ module Fluent
44
+
45
+ VERSION = '#{version}'
46
+
47
+ end
48
+ EOF
49
+ }
50
+ end
51
+
52
+ task :test => [:base_test]
53
+
54
+ Rake::TestTask.new(:base_test) do |t|
55
+ t.libs << "test"
56
+ t.test_files = (Dir["test/*.rb"] + Dir["test/plugin/*.rb"] - ["helper.rb"]).sort
57
+ t.verbose = true
58
+ #t.warning = true
59
+ end
60
+
61
+ task :default => [VERSION_FILE, :build, :gemspec]
62
+
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 0.10.0
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env ruby
2
+ # -*- coding: utf-8 -*-
3
+ require 'rubygems' unless defined?(gem)
4
+ here = File.dirname(__FILE__)
5
+ $LOAD_PATH << File.expand_path(File.join(here, '..', 'lib'))
6
+ require 'fluent/command/cat'
@@ -0,0 +1,10 @@
1
+ #!/usr/bin/env ruby
2
+ # -*- coding: utf-8 -*-
3
+ require 'rubygems' unless defined?(gem)
4
+ require 'rubygems/gem_runner'
5
+ require 'rubygems/exceptions'
6
+ begin
7
+ Gem::GemRunner.new.run ARGV
8
+ rescue Gem::SystemExitException => e
9
+ exit e.exit_code
10
+ end
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env ruby
2
+ # -*- coding: utf-8 -*-
3
+ require 'rubygems' unless defined?(gem)
4
+ here = File.dirname(__FILE__)
5
+ $LOAD_PATH << File.expand_path(File.join(here, '..', 'lib'))
6
+ require 'fluent/command/fluentd'
@@ -0,0 +1,78 @@
1
+
2
+ ## built-in TCP input
3
+ ## $ echo <json> | fluent-cat <tag>
4
+ <source>
5
+ type tcp
6
+ </source>
7
+
8
+ ## built-in UNIX socket input
9
+ #<source>
10
+ # type unix
11
+ #</source>
12
+
13
+ # HTTP input
14
+ # http://localhost:8888/<tag>?json=<json>
15
+ <source>
16
+ type http
17
+ port 8888
18
+ </source>
19
+
20
+ ## File input
21
+ ## read apache logs with tag=apache.access
22
+ #<source>
23
+ # type tail
24
+ # format apache
25
+ # path /var/log/httpd-access.log
26
+ # tag apache.access
27
+ #</source>
28
+
29
+
30
+ ## match tag=apache.access and write to file
31
+ #<match apache.access>
32
+ # type file
33
+ # path /var/log/fluent/access
34
+ #</match>
35
+
36
+ ## match tag=debug.** and dump to console
37
+ <match debug.**>
38
+ type stdout
39
+ </match>
40
+
41
+ ## match tag=system.** and forward to another fluent server
42
+ #<match system.**>
43
+ # type tcp
44
+ # host 192.168.0.11
45
+ # <secondary>
46
+ # host 192.168.0.12
47
+ # </secondary>
48
+ #</match>
49
+
50
+ ## match tag=myapp.** and forward and write to file
51
+ #<match myapp.**>
52
+ # type copy
53
+ # <store>
54
+ # type tcp
55
+ # host 192.168.0.13
56
+ # buffer_type file
57
+ # buffer_path /var/log/fluent/myapp-forward
58
+ # retry_limit 50
59
+ # flush_interval 10s
60
+ # </store>
61
+ # <store>
62
+ # type file
63
+ # path /var/log/fluent/myapp
64
+ # </store>
65
+ #</match>
66
+
67
+ ## match fluent's internal events
68
+ #<match fluent.**>
69
+ # type null
70
+ #</match>
71
+
72
+ ## match not matched logs and write to file
73
+ #<match **>
74
+ # type file
75
+ # path /var/log/fluent/else
76
+ # compress gz
77
+ #</match>
78
+
@@ -0,0 +1,116 @@
1
+ # Generated by jeweler
2
+ # DO NOT EDIT THIS FILE DIRECTLY
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
4
+ # -*- encoding: utf-8 -*-
5
+
6
+ Gem::Specification.new do |s|
7
+ s.name = %q{fluentd}
8
+ s.version = "0.10.0"
9
+
10
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
+ s.authors = ["Sadayuki Furuhashi"]
12
+ s.date = %q{2011-10-16}
13
+ s.email = %q{frsyuki@gmail.com}
14
+ s.executables = ["fluentd", "fluent-cat", "fluent-gem"]
15
+ s.extra_rdoc_files = [
16
+ "ChangeLog",
17
+ "README.rdoc"
18
+ ]
19
+ s.files = [
20
+ "AUTHORS",
21
+ "COPYING",
22
+ "Rakefile",
23
+ "VERSION",
24
+ "bin/fluent-cat",
25
+ "bin/fluent-gem",
26
+ "bin/fluentd",
27
+ "fluent.conf",
28
+ "fluentd.gemspec",
29
+ "lib/fluent/buffer.rb",
30
+ "lib/fluent/command/cat.rb",
31
+ "lib/fluent/command/fluentd.rb",
32
+ "lib/fluent/config.rb",
33
+ "lib/fluent/engine.rb",
34
+ "lib/fluent/env.rb",
35
+ "lib/fluent/event.rb",
36
+ "lib/fluent/input.rb",
37
+ "lib/fluent/load.rb",
38
+ "lib/fluent/log.rb",
39
+ "lib/fluent/match.rb",
40
+ "lib/fluent/mixin.rb",
41
+ "lib/fluent/output.rb",
42
+ "lib/fluent/parser.rb",
43
+ "lib/fluent/plugin.rb",
44
+ "lib/fluent/plugin/buf_file.rb",
45
+ "lib/fluent/plugin/buf_memory.rb",
46
+ "lib/fluent/plugin/buf_zfile.rb",
47
+ "lib/fluent/plugin/in_http.rb",
48
+ "lib/fluent/plugin/in_stream.rb",
49
+ "lib/fluent/plugin/in_syslog.rb",
50
+ "lib/fluent/plugin/in_tail.rb",
51
+ "lib/fluent/plugin/out_copy.rb",
52
+ "lib/fluent/plugin/out_file.rb",
53
+ "lib/fluent/plugin/out_null.rb",
54
+ "lib/fluent/plugin/out_roundrobin.rb",
55
+ "lib/fluent/plugin/out_stdout.rb",
56
+ "lib/fluent/plugin/out_stream.rb",
57
+ "lib/fluent/plugin/out_test.rb",
58
+ "lib/fluent/test.rb",
59
+ "lib/fluent/test/base.rb",
60
+ "lib/fluent/test/input_test.rb",
61
+ "lib/fluent/test/output_test.rb",
62
+ "lib/fluent/version.rb",
63
+ "test/helper.rb",
64
+ "test/match.rb",
65
+ "test/plugin/in_http.rb",
66
+ "test/plugin/in_stream.rb",
67
+ "test/plugin/out_copy.rb",
68
+ "test/plugin/out_file.rb",
69
+ "test/plugin/out_roundrobin.rb",
70
+ "test/plugin/out_stream.rb"
71
+ ]
72
+ s.homepage = %q{http://fluentd.org/}
73
+ s.rdoc_options = ["--charset=UTF-8"]
74
+ s.require_paths = ["lib"]
75
+ s.rubygems_version = %q{1.3.7}
76
+ s.summary = %q{Fluent event collector}
77
+ s.test_files = [
78
+ "test/helper.rb",
79
+ "test/match.rb",
80
+ "test/plugin/in_http.rb",
81
+ "test/plugin/in_stream.rb",
82
+ "test/plugin/out_copy.rb",
83
+ "test/plugin/out_file.rb",
84
+ "test/plugin/out_roundrobin.rb",
85
+ "test/plugin/out_stream.rb"
86
+ ]
87
+
88
+ if s.respond_to? :specification_version then
89
+ current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
90
+ s.specification_version = 3
91
+
92
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
93
+ s.add_runtime_dependency(%q<msgpack>, ["~> 0.4.4"])
94
+ s.add_runtime_dependency(%q<json>, [">= 1.4.3"])
95
+ s.add_runtime_dependency(%q<yajl-ruby>, ["~> 1.0.0"])
96
+ s.add_runtime_dependency(%q<cool.io>, ["~> 1.0.0"])
97
+ s.add_runtime_dependency(%q<http_parser.rb>, ["~> 0.5.1"])
98
+ s.add_runtime_dependency(%q<rake>, [">= 0.9.2"])
99
+ else
100
+ s.add_dependency(%q<msgpack>, ["~> 0.4.4"])
101
+ s.add_dependency(%q<json>, [">= 1.4.3"])
102
+ s.add_dependency(%q<yajl-ruby>, ["~> 1.0.0"])
103
+ s.add_dependency(%q<cool.io>, ["~> 1.0.0"])
104
+ s.add_dependency(%q<http_parser.rb>, ["~> 0.5.1"])
105
+ s.add_dependency(%q<rake>, [">= 0.9.2"])
106
+ end
107
+ else
108
+ s.add_dependency(%q<msgpack>, ["~> 0.4.4"])
109
+ s.add_dependency(%q<json>, [">= 1.4.3"])
110
+ s.add_dependency(%q<yajl-ruby>, ["~> 1.0.0"])
111
+ s.add_dependency(%q<cool.io>, ["~> 1.0.0"])
112
+ s.add_dependency(%q<http_parser.rb>, ["~> 0.5.1"])
113
+ s.add_dependency(%q<rake>, [">= 0.9.2"])
114
+ end
115
+ end
116
+