fluentd 0.14.4-x86-mingw32
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.
- checksums.yaml +7 -0
- data/.github/ISSUE_TEMPLATE.md +6 -0
- data/.gitignore +26 -0
- data/.travis.yml +45 -0
- data/AUTHORS +2 -0
- data/CONTRIBUTING.md +35 -0
- data/COPYING +14 -0
- data/ChangeLog +276 -0
- data/Gemfile +9 -0
- data/README.md +51 -0
- data/Rakefile +53 -0
- data/Vagrantfile +17 -0
- data/appveyor.yml +41 -0
- data/bin/fluent-debug +5 -0
- data/example/copy_roundrobin.conf +39 -0
- data/example/filter_stdout.conf +22 -0
- data/example/in_forward.conf +11 -0
- data/example/in_http.conf +14 -0
- data/example/in_out_forward.conf +17 -0
- data/example/in_syslog.conf +15 -0
- data/example/in_tail.conf +14 -0
- data/example/in_tcp.conf +13 -0
- data/example/in_udp.conf +13 -0
- data/example/multi_filters.conf +61 -0
- data/example/out_buffered_null.conf +32 -0
- data/example/out_copy.conf +20 -0
- data/example/out_file.conf +13 -0
- data/example/out_forward.conf +35 -0
- data/example/out_forward_buf_file.conf +23 -0
- data/example/v0_12_filter.conf +78 -0
- data/example/v1_literal_example.conf +36 -0
- data/fluent.conf +139 -0
- data/fluentd.gemspec +51 -0
- data/lib/fluent/agent.rb +194 -0
- data/lib/fluent/command/bundler_injection.rb +45 -0
- data/lib/fluent/command/cat.rb +319 -0
- data/lib/fluent/command/debug.rb +102 -0
- data/lib/fluent/command/fluentd.rb +273 -0
- data/lib/fluent/compat/call_super_mixin.rb +67 -0
- data/lib/fluent/compat/exec_util.rb +129 -0
- data/lib/fluent/compat/file_util.rb +54 -0
- data/lib/fluent/compat/filter.rb +68 -0
- data/lib/fluent/compat/formatter.rb +111 -0
- data/lib/fluent/compat/formatter_utils.rb +85 -0
- data/lib/fluent/compat/handle_tag_and_time_mixin.rb +62 -0
- data/lib/fluent/compat/handle_tag_name_mixin.rb +53 -0
- data/lib/fluent/compat/input.rb +49 -0
- data/lib/fluent/compat/output.rb +677 -0
- data/lib/fluent/compat/output_chain.rb +60 -0
- data/lib/fluent/compat/parser.rb +180 -0
- data/lib/fluent/compat/parser_utils.rb +40 -0
- data/lib/fluent/compat/propagate_default.rb +62 -0
- data/lib/fluent/compat/record_filter_mixin.rb +34 -0
- data/lib/fluent/compat/set_tag_key_mixin.rb +50 -0
- data/lib/fluent/compat/set_time_key_mixin.rb +69 -0
- data/lib/fluent/compat/socket_util.rb +165 -0
- data/lib/fluent/compat/string_util.rb +34 -0
- data/lib/fluent/compat/structured_format_mixin.rb +26 -0
- data/lib/fluent/compat/type_converter.rb +90 -0
- data/lib/fluent/config.rb +56 -0
- data/lib/fluent/config/basic_parser.rb +123 -0
- data/lib/fluent/config/configure_proxy.rb +366 -0
- data/lib/fluent/config/dsl.rb +149 -0
- data/lib/fluent/config/element.rb +218 -0
- data/lib/fluent/config/error.rb +26 -0
- data/lib/fluent/config/literal_parser.rb +251 -0
- data/lib/fluent/config/parser.rb +107 -0
- data/lib/fluent/config/section.rb +212 -0
- data/lib/fluent/config/types.rb +136 -0
- data/lib/fluent/config/v1_parser.rb +190 -0
- data/lib/fluent/configurable.rb +176 -0
- data/lib/fluent/daemon.rb +15 -0
- data/lib/fluent/engine.rb +220 -0
- data/lib/fluent/env.rb +27 -0
- data/lib/fluent/event.rb +287 -0
- data/lib/fluent/event_router.rb +259 -0
- data/lib/fluent/filter.rb +21 -0
- data/lib/fluent/formatter.rb +23 -0
- data/lib/fluent/input.rb +21 -0
- data/lib/fluent/label.rb +38 -0
- data/lib/fluent/load.rb +36 -0
- data/lib/fluent/log.rb +445 -0
- data/lib/fluent/match.rb +141 -0
- data/lib/fluent/mixin.rb +31 -0
- data/lib/fluent/msgpack_factory.rb +62 -0
- data/lib/fluent/output.rb +26 -0
- data/lib/fluent/output_chain.rb +23 -0
- data/lib/fluent/parser.rb +23 -0
- data/lib/fluent/plugin.rb +161 -0
- data/lib/fluent/plugin/bare_output.rb +63 -0
- data/lib/fluent/plugin/base.rb +130 -0
- data/lib/fluent/plugin/buf_file.rb +154 -0
- data/lib/fluent/plugin/buf_memory.rb +34 -0
- data/lib/fluent/plugin/buffer.rb +603 -0
- data/lib/fluent/plugin/buffer/chunk.rb +160 -0
- data/lib/fluent/plugin/buffer/file_chunk.rb +323 -0
- data/lib/fluent/plugin/buffer/memory_chunk.rb +90 -0
- data/lib/fluent/plugin/exec_util.rb +22 -0
- data/lib/fluent/plugin/file_util.rb +22 -0
- data/lib/fluent/plugin/file_wrapper.rb +120 -0
- data/lib/fluent/plugin/filter.rb +93 -0
- data/lib/fluent/plugin/filter_grep.rb +75 -0
- data/lib/fluent/plugin/filter_record_transformer.rb +342 -0
- data/lib/fluent/plugin/filter_stdout.rb +53 -0
- data/lib/fluent/plugin/formatter.rb +45 -0
- data/lib/fluent/plugin/formatter_csv.rb +47 -0
- data/lib/fluent/plugin/formatter_hash.rb +29 -0
- data/lib/fluent/plugin/formatter_json.rb +44 -0
- data/lib/fluent/plugin/formatter_ltsv.rb +41 -0
- data/lib/fluent/plugin/formatter_msgpack.rb +29 -0
- data/lib/fluent/plugin/formatter_out_file.rb +78 -0
- data/lib/fluent/plugin/formatter_single_value.rb +34 -0
- data/lib/fluent/plugin/formatter_stdout.rb +74 -0
- data/lib/fluent/plugin/in_debug_agent.rb +64 -0
- data/lib/fluent/plugin/in_dummy.rb +135 -0
- data/lib/fluent/plugin/in_exec.rb +149 -0
- data/lib/fluent/plugin/in_forward.rb +366 -0
- data/lib/fluent/plugin/in_gc_stat.rb +52 -0
- data/lib/fluent/plugin/in_http.rb +422 -0
- data/lib/fluent/plugin/in_monitor_agent.rb +401 -0
- data/lib/fluent/plugin/in_object_space.rb +90 -0
- data/lib/fluent/plugin/in_syslog.rb +204 -0
- data/lib/fluent/plugin/in_tail.rb +838 -0
- data/lib/fluent/plugin/in_tcp.rb +41 -0
- data/lib/fluent/plugin/in_udp.rb +37 -0
- data/lib/fluent/plugin/in_unix.rb +201 -0
- data/lib/fluent/plugin/input.rb +33 -0
- data/lib/fluent/plugin/multi_output.rb +95 -0
- data/lib/fluent/plugin/out_buffered_null.rb +59 -0
- data/lib/fluent/plugin/out_buffered_stdout.rb +70 -0
- data/lib/fluent/plugin/out_copy.rb +42 -0
- data/lib/fluent/plugin/out_exec.rb +114 -0
- data/lib/fluent/plugin/out_exec_filter.rb +393 -0
- data/lib/fluent/plugin/out_file.rb +167 -0
- data/lib/fluent/plugin/out_forward.rb +646 -0
- data/lib/fluent/plugin/out_null.rb +27 -0
- data/lib/fluent/plugin/out_relabel.rb +28 -0
- data/lib/fluent/plugin/out_roundrobin.rb +80 -0
- data/lib/fluent/plugin/out_stdout.rb +48 -0
- data/lib/fluent/plugin/out_stream.rb +130 -0
- data/lib/fluent/plugin/output.rb +1020 -0
- data/lib/fluent/plugin/owned_by_mixin.rb +42 -0
- data/lib/fluent/plugin/parser.rb +175 -0
- data/lib/fluent/plugin/parser_apache.rb +28 -0
- data/lib/fluent/plugin/parser_apache2.rb +84 -0
- data/lib/fluent/plugin/parser_apache_error.rb +26 -0
- data/lib/fluent/plugin/parser_csv.rb +33 -0
- data/lib/fluent/plugin/parser_json.rb +79 -0
- data/lib/fluent/plugin/parser_ltsv.rb +50 -0
- data/lib/fluent/plugin/parser_multiline.rb +104 -0
- data/lib/fluent/plugin/parser_nginx.rb +28 -0
- data/lib/fluent/plugin/parser_none.rb +36 -0
- data/lib/fluent/plugin/parser_regexp.rb +73 -0
- data/lib/fluent/plugin/parser_syslog.rb +82 -0
- data/lib/fluent/plugin/parser_tsv.rb +37 -0
- data/lib/fluent/plugin/socket_util.rb +22 -0
- data/lib/fluent/plugin/storage.rb +84 -0
- data/lib/fluent/plugin/storage_local.rb +132 -0
- data/lib/fluent/plugin/string_util.rb +22 -0
- data/lib/fluent/plugin_helper.rb +42 -0
- data/lib/fluent/plugin_helper/child_process.rb +298 -0
- data/lib/fluent/plugin_helper/compat_parameters.rb +224 -0
- data/lib/fluent/plugin_helper/event_emitter.rb +80 -0
- data/lib/fluent/plugin_helper/event_loop.rb +118 -0
- data/lib/fluent/plugin_helper/formatter.rb +149 -0
- data/lib/fluent/plugin_helper/inject.rb +125 -0
- data/lib/fluent/plugin_helper/parser.rb +147 -0
- data/lib/fluent/plugin_helper/retry_state.rb +177 -0
- data/lib/fluent/plugin_helper/storage.rb +331 -0
- data/lib/fluent/plugin_helper/thread.rb +147 -0
- data/lib/fluent/plugin_helper/timer.rb +90 -0
- data/lib/fluent/plugin_id.rb +63 -0
- data/lib/fluent/process.rb +504 -0
- data/lib/fluent/registry.rb +99 -0
- data/lib/fluent/root_agent.rb +314 -0
- data/lib/fluent/rpc.rb +94 -0
- data/lib/fluent/supervisor.rb +680 -0
- data/lib/fluent/system_config.rb +122 -0
- data/lib/fluent/test.rb +56 -0
- data/lib/fluent/test/base.rb +85 -0
- data/lib/fluent/test/driver/base.rb +179 -0
- data/lib/fluent/test/driver/base_owned.rb +70 -0
- data/lib/fluent/test/driver/base_owner.rb +125 -0
- data/lib/fluent/test/driver/event_feeder.rb +98 -0
- data/lib/fluent/test/driver/filter.rb +57 -0
- data/lib/fluent/test/driver/formatter.rb +30 -0
- data/lib/fluent/test/driver/input.rb +31 -0
- data/lib/fluent/test/driver/multi_output.rb +52 -0
- data/lib/fluent/test/driver/output.rb +76 -0
- data/lib/fluent/test/driver/parser.rb +30 -0
- data/lib/fluent/test/driver/test_event_router.rb +45 -0
- data/lib/fluent/test/filter_test.rb +77 -0
- data/lib/fluent/test/formatter_test.rb +65 -0
- data/lib/fluent/test/helpers.rb +79 -0
- data/lib/fluent/test/input_test.rb +172 -0
- data/lib/fluent/test/log.rb +73 -0
- data/lib/fluent/test/output_test.rb +156 -0
- data/lib/fluent/test/parser_test.rb +70 -0
- data/lib/fluent/time.rb +175 -0
- data/lib/fluent/timezone.rb +133 -0
- data/lib/fluent/unique_id.rb +39 -0
- data/lib/fluent/version.rb +21 -0
- data/lib/fluent/winsvc.rb +71 -0
- data/test/compat/test_calls_super.rb +166 -0
- data/test/compat/test_parser.rb +82 -0
- data/test/config/assertions.rb +42 -0
- data/test/config/test_config_parser.rb +507 -0
- data/test/config/test_configurable.rb +1194 -0
- data/test/config/test_configure_proxy.rb +386 -0
- data/test/config/test_dsl.rb +415 -0
- data/test/config/test_element.rb +403 -0
- data/test/config/test_literal_parser.rb +297 -0
- data/test/config/test_section.rb +184 -0
- data/test/config/test_system_config.rb +120 -0
- data/test/config/test_types.rb +171 -0
- data/test/helper.rb +119 -0
- data/test/plugin/data/2010/01/20100102-030405.log +0 -0
- data/test/plugin/data/2010/01/20100102-030406.log +0 -0
- data/test/plugin/data/2010/01/20100102.log +0 -0
- data/test/plugin/data/log/bar +0 -0
- data/test/plugin/data/log/foo/bar.log +0 -0
- data/test/plugin/data/log/test.log +0 -0
- data/test/plugin/test_bare_output.rb +118 -0
- data/test/plugin/test_base.rb +75 -0
- data/test/plugin/test_buf_file.rb +571 -0
- data/test/plugin/test_buf_memory.rb +42 -0
- data/test/plugin/test_buffer.rb +1200 -0
- data/test/plugin/test_buffer_chunk.rb +168 -0
- data/test/plugin/test_buffer_file_chunk.rb +771 -0
- data/test/plugin/test_buffer_memory_chunk.rb +265 -0
- data/test/plugin/test_file_util.rb +96 -0
- data/test/plugin/test_filter.rb +353 -0
- data/test/plugin/test_filter_grep.rb +119 -0
- data/test/plugin/test_filter_record_transformer.rb +600 -0
- data/test/plugin/test_filter_stdout.rb +211 -0
- data/test/plugin/test_formatter_csv.rb +94 -0
- data/test/plugin/test_formatter_json.rb +30 -0
- data/test/plugin/test_formatter_ltsv.rb +52 -0
- data/test/plugin/test_formatter_msgpack.rb +28 -0
- data/test/plugin/test_formatter_out_file.rb +95 -0
- data/test/plugin/test_formatter_single_value.rb +38 -0
- data/test/plugin/test_in_debug_agent.rb +28 -0
- data/test/plugin/test_in_dummy.rb +188 -0
- data/test/plugin/test_in_exec.rb +133 -0
- data/test/plugin/test_in_forward.rb +635 -0
- data/test/plugin/test_in_gc_stat.rb +39 -0
- data/test/plugin/test_in_http.rb +442 -0
- data/test/plugin/test_in_monitor_agent.rb +329 -0
- data/test/plugin/test_in_object_space.rb +64 -0
- data/test/plugin/test_in_syslog.rb +205 -0
- data/test/plugin/test_in_tail.rb +1001 -0
- data/test/plugin/test_in_tcp.rb +102 -0
- data/test/plugin/test_in_udp.rb +121 -0
- data/test/plugin/test_in_unix.rb +126 -0
- data/test/plugin/test_input.rb +122 -0
- data/test/plugin/test_multi_output.rb +180 -0
- data/test/plugin/test_out_buffered_null.rb +79 -0
- data/test/plugin/test_out_buffered_stdout.rb +122 -0
- data/test/plugin/test_out_copy.rb +160 -0
- data/test/plugin/test_out_exec.rb +155 -0
- data/test/plugin/test_out_exec_filter.rb +262 -0
- data/test/plugin/test_out_file.rb +383 -0
- data/test/plugin/test_out_forward.rb +590 -0
- data/test/plugin/test_out_null.rb +29 -0
- data/test/plugin/test_out_relabel.rb +28 -0
- data/test/plugin/test_out_roundrobin.rb +146 -0
- data/test/plugin/test_out_stdout.rb +92 -0
- data/test/plugin/test_out_stream.rb +93 -0
- data/test/plugin/test_output.rb +568 -0
- data/test/plugin/test_output_as_buffered.rb +1604 -0
- data/test/plugin/test_output_as_buffered_overflow.rb +250 -0
- data/test/plugin/test_output_as_buffered_retries.rb +839 -0
- data/test/plugin/test_output_as_buffered_secondary.rb +817 -0
- data/test/plugin/test_output_as_standard.rb +374 -0
- data/test/plugin/test_owned_by.rb +35 -0
- data/test/plugin/test_parser_apache.rb +42 -0
- data/test/plugin/test_parser_apache2.rb +38 -0
- data/test/plugin/test_parser_apache_error.rb +45 -0
- data/test/plugin/test_parser_base.rb +32 -0
- data/test/plugin/test_parser_csv.rb +104 -0
- data/test/plugin/test_parser_json.rb +107 -0
- data/test/plugin/test_parser_labeled_tsv.rb +129 -0
- data/test/plugin/test_parser_multiline.rb +100 -0
- data/test/plugin/test_parser_nginx.rb +48 -0
- data/test/plugin/test_parser_none.rb +53 -0
- data/test/plugin/test_parser_regexp.rb +277 -0
- data/test/plugin/test_parser_syslog.rb +66 -0
- data/test/plugin/test_parser_time.rb +46 -0
- data/test/plugin/test_parser_tsv.rb +121 -0
- data/test/plugin/test_storage.rb +167 -0
- data/test/plugin/test_storage_local.rb +8 -0
- data/test/plugin/test_string_util.rb +26 -0
- data/test/plugin_helper/test_child_process.rb +608 -0
- data/test/plugin_helper/test_compat_parameters.rb +242 -0
- data/test/plugin_helper/test_event_emitter.rb +51 -0
- data/test/plugin_helper/test_event_loop.rb +52 -0
- data/test/plugin_helper/test_formatter.rb +252 -0
- data/test/plugin_helper/test_inject.rb +487 -0
- data/test/plugin_helper/test_parser.rb +263 -0
- data/test/plugin_helper/test_retry_state.rb +399 -0
- data/test/plugin_helper/test_storage.rb +521 -0
- data/test/plugin_helper/test_thread.rb +164 -0
- data/test/plugin_helper/test_timer.rb +131 -0
- data/test/scripts/exec_script.rb +32 -0
- data/test/scripts/fluent/plugin/formatter_known.rb +8 -0
- data/test/scripts/fluent/plugin/out_test.rb +81 -0
- data/test/scripts/fluent/plugin/out_test2.rb +80 -0
- data/test/scripts/fluent/plugin/parser_known.rb +4 -0
- data/test/test_config.rb +179 -0
- data/test/test_configdsl.rb +148 -0
- data/test/test_event.rb +329 -0
- data/test/test_event_router.rb +331 -0
- data/test/test_event_time.rb +184 -0
- data/test/test_filter.rb +121 -0
- data/test/test_formatter.rb +319 -0
- data/test/test_input.rb +31 -0
- data/test/test_log.rb +572 -0
- data/test/test_match.rb +137 -0
- data/test/test_mixin.rb +351 -0
- data/test/test_output.rb +214 -0
- data/test/test_plugin_classes.rb +136 -0
- data/test/test_plugin_helper.rb +81 -0
- data/test/test_process.rb +48 -0
- data/test/test_root_agent.rb +278 -0
- data/test/test_supervisor.rb +339 -0
- data/test/test_time_formatter.rb +186 -0
- data/test/test_unique_id.rb +47 -0
- metadata +823 -0
@@ -0,0 +1,273 @@
|
|
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
|
+
require 'optparse'
|
18
|
+
|
19
|
+
require 'fluent/supervisor'
|
20
|
+
require 'fluent/log'
|
21
|
+
require 'fluent/env'
|
22
|
+
require 'fluent/version'
|
23
|
+
|
24
|
+
$fluentdargv = Marshal.load(Marshal.dump(ARGV))
|
25
|
+
|
26
|
+
op = OptionParser.new
|
27
|
+
op.version = Fluent::VERSION
|
28
|
+
|
29
|
+
opts = Fluent::Supervisor.default_options
|
30
|
+
|
31
|
+
op.on('-s', "--setup [DIR=#{File.dirname(Fluent::DEFAULT_CONFIG_PATH)}]", "install sample configuration file to the directory") {|s|
|
32
|
+
opts[:setup_path] = s || File.dirname(Fluent::DEFAULT_CONFIG_PATH)
|
33
|
+
}
|
34
|
+
|
35
|
+
op.on('-c', '--config PATH', "config file path (default: #{Fluent::DEFAULT_CONFIG_PATH})") {|s|
|
36
|
+
opts[:config_path] = s
|
37
|
+
}
|
38
|
+
|
39
|
+
op.on('--dry-run', "Check fluentd setup is correct or not", TrueClass) {|b|
|
40
|
+
opts[:dry_run] = b
|
41
|
+
}
|
42
|
+
|
43
|
+
op.on('--show-plugin-config=PLUGIN', "Show PLUGIN configuration and exit(ex: input:dummy)") {|plugin|
|
44
|
+
opts[:show_plugin_config] = plugin
|
45
|
+
}
|
46
|
+
|
47
|
+
op.on('-p', '--plugin DIR', "add plugin directory") {|s|
|
48
|
+
opts[:plugin_dirs] << s
|
49
|
+
}
|
50
|
+
|
51
|
+
op.on('-I PATH', "add library path") {|s|
|
52
|
+
$LOAD_PATH << s
|
53
|
+
}
|
54
|
+
|
55
|
+
op.on('-r NAME', "load library") {|s|
|
56
|
+
opts[:libs] << s
|
57
|
+
}
|
58
|
+
|
59
|
+
op.on('-d', '--daemon PIDFILE', "daemonize fluent process") {|s|
|
60
|
+
opts[:daemonize] = s
|
61
|
+
}
|
62
|
+
|
63
|
+
op.on('--under-supervisor', "run fluent worker under supervisor (this option is NOT for users)") {
|
64
|
+
opts[:supervise] = false
|
65
|
+
}
|
66
|
+
|
67
|
+
op.on('--no-supervisor', "run fluent worker without supervisor") {
|
68
|
+
opts[:supervise] = false
|
69
|
+
opts[:standalone_worker] = true
|
70
|
+
}
|
71
|
+
|
72
|
+
op.on('--user USER', "change user") {|s|
|
73
|
+
opts[:chuser] = s
|
74
|
+
}
|
75
|
+
|
76
|
+
op.on('--group GROUP', "change group") {|s|
|
77
|
+
opts[:chgroup] = s
|
78
|
+
}
|
79
|
+
|
80
|
+
op.on('-o', '--log PATH', "log file path") {|s|
|
81
|
+
opts[:log_path] = s
|
82
|
+
}
|
83
|
+
|
84
|
+
op.on('-i', '--inline-config CONFIG_STRING', "inline config which is appended to the config file on-the-fly") {|s|
|
85
|
+
opts[:inline_config] = s
|
86
|
+
}
|
87
|
+
|
88
|
+
op.on('--emit-error-log-interval SECONDS', "suppress interval seconds of emit error logs") {|s|
|
89
|
+
opts[:suppress_interval] = s.to_i
|
90
|
+
}
|
91
|
+
|
92
|
+
op.on('--suppress-repeated-stacktrace [VALUE]', "suppress repeated stacktrace", TrueClass) {|b|
|
93
|
+
b = true if b.nil?
|
94
|
+
opts[:suppress_repeated_stacktrace] = b
|
95
|
+
}
|
96
|
+
|
97
|
+
op.on('--without-source', "invoke a fluentd without input plugins", TrueClass) {|b|
|
98
|
+
opts[:without_source] = b
|
99
|
+
}
|
100
|
+
|
101
|
+
op.on('--use-v1-config', "Use v1 configuration format (default)", TrueClass) {|b|
|
102
|
+
opts[:use_v1_config] = b
|
103
|
+
}
|
104
|
+
|
105
|
+
op.on('--use-v0-config', "Use v0 configuration format", TrueClass) {|b|
|
106
|
+
opts[:use_v1_config] = !b
|
107
|
+
}
|
108
|
+
|
109
|
+
op.on('-v', '--verbose', "increase verbose level (-v: debug, -vv: trace)", TrueClass) {|b|
|
110
|
+
if b
|
111
|
+
opts[:log_level] = [opts[:log_level] - 1, Fluent::Log::LEVEL_TRACE].max
|
112
|
+
end
|
113
|
+
}
|
114
|
+
|
115
|
+
op.on('-q', '--quiet', "decrease verbose level (-q: warn, -qq: error)", TrueClass) {|b|
|
116
|
+
if b
|
117
|
+
opts[:log_level] = [opts[:log_level] + 1, Fluent::Log::LEVEL_ERROR].min
|
118
|
+
end
|
119
|
+
}
|
120
|
+
|
121
|
+
op.on('--suppress-config-dump', "suppress config dumping when fluentd starts", TrueClass) {|b|
|
122
|
+
opts[:suppress_config_dump] = b
|
123
|
+
}
|
124
|
+
|
125
|
+
op.on('-g', '--gemfile GEMFILE', "Gemfile path") {|s|
|
126
|
+
opts[:gemfile] = s
|
127
|
+
}
|
128
|
+
|
129
|
+
op.on('-G', '--gem-path GEM_INSTALL_PATH', "Gemfile install path (default: $(dirname $gemfile)/vendor/bundle)") {|s|
|
130
|
+
opts[:gem_install_path] = s
|
131
|
+
}
|
132
|
+
|
133
|
+
if Fluent.windows?
|
134
|
+
require 'windows/library'
|
135
|
+
include Windows::Library
|
136
|
+
|
137
|
+
op.on('-x', '--signame INTSIGNAME', "an object name which is used for Windows Service signal (Windows only)") {|s|
|
138
|
+
opts[:signame] = s
|
139
|
+
}
|
140
|
+
|
141
|
+
op.on('--reg-winsvc MODE', "install/uninstall as Windows Service. (i: install, u: uninstall) (Windows only)") {|s|
|
142
|
+
opts[:regwinsvc] = s
|
143
|
+
}
|
144
|
+
|
145
|
+
op.on('--[no-]reg-winsvc-auto-start', "Automatically start the Windows Service at boot. (only effective with '--reg-winsvc i') (Windows only)") {|s|
|
146
|
+
opts[:regwinsvcautostart] = s
|
147
|
+
}
|
148
|
+
|
149
|
+
op.on('--reg-winsvc-fluentdopt OPTION', "specify fluentd option paramters for Windows Service. (Windows only)") {|s|
|
150
|
+
opts[:fluentdopt] = s
|
151
|
+
}
|
152
|
+
end
|
153
|
+
|
154
|
+
|
155
|
+
(class << self; self; end).module_eval do
|
156
|
+
define_method(:usage) do |msg|
|
157
|
+
puts op.to_s
|
158
|
+
puts "error: #{msg}" if msg
|
159
|
+
exit 1
|
160
|
+
end
|
161
|
+
end
|
162
|
+
|
163
|
+
begin
|
164
|
+
rest = op.parse(ARGV)
|
165
|
+
|
166
|
+
if rest.length != 0
|
167
|
+
usage nil
|
168
|
+
end
|
169
|
+
rescue
|
170
|
+
usage $!.to_s
|
171
|
+
end
|
172
|
+
|
173
|
+
|
174
|
+
##
|
175
|
+
## Bundler injection
|
176
|
+
#
|
177
|
+
if ENV['FLUENTD_DISABLE_BUNDLER_INJECTION'] != '1' && gemfile = opts[:gemfile]
|
178
|
+
ENV['BUNDLE_GEMFILE'] = gemfile
|
179
|
+
if path = opts[:gem_install_path]
|
180
|
+
ENV['BUNDLE_PATH'] = path
|
181
|
+
else
|
182
|
+
ENV['BUNDLE_PATH'] = File.expand_path(File.join(File.dirname(gemfile), 'vendor/bundle'))
|
183
|
+
end
|
184
|
+
ENV['FLUENTD_DISABLE_BUNDLER_INJECTION'] = '1'
|
185
|
+
load File.expand_path(File.join(File.dirname(__FILE__), 'bundler_injection.rb'))
|
186
|
+
end
|
187
|
+
|
188
|
+
if setup_path = opts[:setup_path]
|
189
|
+
require 'fileutils'
|
190
|
+
FileUtils.mkdir_p File.join(setup_path, "plugin")
|
191
|
+
confpath = File.join(setup_path, "fluent.conf")
|
192
|
+
if File.exist?(confpath)
|
193
|
+
puts "#{confpath} already exists."
|
194
|
+
else
|
195
|
+
File.open(confpath, "w") {|f|
|
196
|
+
conf = File.read File.join(File.dirname(__FILE__), "..", "..", "..", "fluent.conf")
|
197
|
+
f.write conf
|
198
|
+
}
|
199
|
+
puts "Installed #{confpath}."
|
200
|
+
end
|
201
|
+
exit 0
|
202
|
+
end
|
203
|
+
|
204
|
+
early_exit = false
|
205
|
+
start_service = false
|
206
|
+
if winsvcinstmode = opts[:regwinsvc]
|
207
|
+
FLUENTD_WINSVC_NAME="fluentdwinsvc"
|
208
|
+
FLUENTD_WINSVC_DISPLAYNAME="Fluentd Windows Service"
|
209
|
+
FLUENTD_WINSVC_DESC="Fluentd is an event collector system."
|
210
|
+
require 'fileutils'
|
211
|
+
require "win32/service"
|
212
|
+
require "win32/registry"
|
213
|
+
include Win32
|
214
|
+
|
215
|
+
case winsvcinstmode
|
216
|
+
when 'i'
|
217
|
+
binary_path = File.join(File.dirname(__FILE__), "..")
|
218
|
+
ruby_path = "\0" * 256
|
219
|
+
GetModuleFileName.call(0,ruby_path,256)
|
220
|
+
ruby_path = ruby_path.rstrip.gsub(/\\/, '/')
|
221
|
+
start_type = Service::DEMAND_START
|
222
|
+
if opts[:regwinsvcautostart]
|
223
|
+
start_type = Service::AUTO_START
|
224
|
+
start_service = true
|
225
|
+
end
|
226
|
+
|
227
|
+
Service.create(
|
228
|
+
service_name: FLUENTD_WINSVC_NAME,
|
229
|
+
host: nil,
|
230
|
+
service_type: Service::WIN32_OWN_PROCESS,
|
231
|
+
description: FLUENTD_WINSVC_DESC,
|
232
|
+
start_type: start_type,
|
233
|
+
error_control: Service::ERROR_NORMAL,
|
234
|
+
binary_path_name: ruby_path+" -C "+binary_path+" winsvc.rb",
|
235
|
+
load_order_group: "",
|
236
|
+
dependencies: [""],
|
237
|
+
display_name: FLUENTD_WINSVC_DISPLAYNAME
|
238
|
+
)
|
239
|
+
when 'u'
|
240
|
+
if Service.status(FLUENTD_WINSVC_NAME).current_state != 'stopped'
|
241
|
+
begin
|
242
|
+
Service.stop(FLUENTD_WINSVC_NAME)
|
243
|
+
rescue => ex
|
244
|
+
puts "Warning: Failed to stop service: ", ex
|
245
|
+
end
|
246
|
+
end
|
247
|
+
Service.delete(FLUENTD_WINSVC_NAME)
|
248
|
+
else
|
249
|
+
# none
|
250
|
+
end
|
251
|
+
early_exit = true
|
252
|
+
end
|
253
|
+
|
254
|
+
if fluentdopt = opts[:fluentdopt]
|
255
|
+
Win32::Registry::HKEY_LOCAL_MACHINE.open("SYSTEM\\CurrentControlSet\\Services\\fluentdwinsvc", Win32::Registry::KEY_ALL_ACCESS) do |reg|
|
256
|
+
reg['fluentdopt', Win32::Registry::REG_SZ] = fluentdopt
|
257
|
+
end
|
258
|
+
early_exit = true
|
259
|
+
end
|
260
|
+
|
261
|
+
if start_service
|
262
|
+
Service.start(FLUENTD_WINSVC_NAME)
|
263
|
+
end
|
264
|
+
|
265
|
+
exit 0 if early_exit
|
266
|
+
|
267
|
+
require 'fluent/supervisor'
|
268
|
+
if opts[:supervise]
|
269
|
+
Fluent::Supervisor.new(opts).run_supervisor
|
270
|
+
else
|
271
|
+
Fluent::Supervisor.new(opts).run_worker
|
272
|
+
end
|
273
|
+
|
@@ -0,0 +1,67 @@
|
|
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
|
+
module Fluent
|
18
|
+
module Compat
|
19
|
+
module CallSuperMixin
|
20
|
+
# This mixin is to prepend to 3rd party plugins of v0.12 APIs.
|
21
|
+
# In past, there were not strong rule to call super in #start, #before_shutdown and #shutdown.
|
22
|
+
# But v0.14 API requires to call super in these methods to setup/teardown plugin helpers and others.
|
23
|
+
# This mixin prepends method calls to call super forcedly if checker returns false (it shows Fluent::Plugin::Base#methods wasn't called)
|
24
|
+
|
25
|
+
def self.prepended(klass)
|
26
|
+
@@_super_start ||= {}
|
27
|
+
@@_super_before_shutdown ||= {}
|
28
|
+
@@_super_shutdown ||= {}
|
29
|
+
|
30
|
+
# ancestors[0]: this module
|
31
|
+
# ancestors[1]: prepended class (plugin itself)
|
32
|
+
method_search = ->(ancestors, method){
|
33
|
+
closest = ancestors[2, ancestors.size - 2].index{|m| m.method_defined?(method) }
|
34
|
+
ancestors[2 + closest].instance_method(method)
|
35
|
+
}
|
36
|
+
@@_super_start[klass] = method_search.call(klass.ancestors, :start) # this returns Fluent::Compat::*#start (or helpers on it)
|
37
|
+
@@_super_before_shutdown[klass] = method_search.call(klass.ancestors, :before_shutdown)
|
38
|
+
@@_super_shutdown[klass] = method_search.call(klass.ancestors, :shutdown)
|
39
|
+
end
|
40
|
+
|
41
|
+
def start
|
42
|
+
super
|
43
|
+
unless self.started?
|
44
|
+
@@_super_start[self.class].bind(self).call
|
45
|
+
# #super will reset logdev (especially in test), so this warn should be after calling it
|
46
|
+
log.warn "super was not called in #start: called it forcedly", plugin: self.class
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
def before_shutdown
|
51
|
+
super
|
52
|
+
unless self.before_shutdown?
|
53
|
+
log.warn "super was not called in #before_shutdown: calling it forcedly", plugin: self.class
|
54
|
+
@@_super_before_shutdown[self.class].bind(self).call
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
def shutdown
|
59
|
+
super
|
60
|
+
unless self.shutdown?
|
61
|
+
log.warn "super was not called in #shutdown: calling it forcedly", plugin: self.class
|
62
|
+
@@_super_shutdown[self.class].bind(self).call
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
@@ -0,0 +1,129 @@
|
|
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
|
+
require 'msgpack'
|
18
|
+
require 'yajl'
|
19
|
+
|
20
|
+
require 'fluent/engine'
|
21
|
+
require 'fluent/plugin'
|
22
|
+
require 'fluent/parser'
|
23
|
+
|
24
|
+
module Fluent
|
25
|
+
module Compat
|
26
|
+
module ExecUtil
|
27
|
+
SUPPORTED_FORMAT = {
|
28
|
+
'tsv' => :tsv,
|
29
|
+
'json' => :json,
|
30
|
+
'msgpack' => :msgpack,
|
31
|
+
}
|
32
|
+
|
33
|
+
class Parser
|
34
|
+
def initialize(on_message)
|
35
|
+
@on_message = on_message
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
class TextParserWrapperParser < Parser
|
40
|
+
def initialize(conf, on_message)
|
41
|
+
@parser = Plugin.new_parser(conf['format'])
|
42
|
+
@parser.configure(conf)
|
43
|
+
super(on_message)
|
44
|
+
end
|
45
|
+
|
46
|
+
def call(io)
|
47
|
+
io.each_line(&method(:each_line))
|
48
|
+
end
|
49
|
+
|
50
|
+
def each_line(line)
|
51
|
+
line.chomp!
|
52
|
+
@parser.parse(line) { |time, record|
|
53
|
+
@on_message.call(record, time)
|
54
|
+
}
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
class TSVParser < Parser
|
59
|
+
def initialize(keys, on_message)
|
60
|
+
@keys = keys
|
61
|
+
super(on_message)
|
62
|
+
end
|
63
|
+
|
64
|
+
def call(io)
|
65
|
+
io.each_line(&method(:each_line))
|
66
|
+
end
|
67
|
+
|
68
|
+
def each_line(line)
|
69
|
+
line.chomp!
|
70
|
+
vals = line.split("\t")
|
71
|
+
|
72
|
+
record = Hash[@keys.zip(vals)]
|
73
|
+
|
74
|
+
@on_message.call(record)
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
class JSONParser < Parser
|
79
|
+
def call(io)
|
80
|
+
y = Yajl::Parser.new
|
81
|
+
y.on_parse_complete = @on_message
|
82
|
+
y.parse(io)
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
class MessagePackParser < Parser
|
87
|
+
def call(io)
|
88
|
+
@u = Fluent::Engine.msgpack_factory.unpacker(io)
|
89
|
+
begin
|
90
|
+
@u.each(&@on_message)
|
91
|
+
rescue EOFError
|
92
|
+
end
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
class Formatter
|
97
|
+
end
|
98
|
+
|
99
|
+
class TSVFormatter < Formatter
|
100
|
+
def initialize(in_keys)
|
101
|
+
@in_keys = in_keys
|
102
|
+
super()
|
103
|
+
end
|
104
|
+
|
105
|
+
def call(record, out)
|
106
|
+
last = @in_keys.length-1
|
107
|
+
for i in 0..last
|
108
|
+
key = @in_keys[i]
|
109
|
+
out << record[key].to_s
|
110
|
+
out << "\t" if i != last
|
111
|
+
end
|
112
|
+
out << "\n"
|
113
|
+
end
|
114
|
+
end
|
115
|
+
|
116
|
+
class JSONFormatter < Formatter
|
117
|
+
def call(record, out)
|
118
|
+
out << Yajl.dump(record) << "\n"
|
119
|
+
end
|
120
|
+
end
|
121
|
+
|
122
|
+
class MessagePackFormatter < Formatter
|
123
|
+
def call(record, out)
|
124
|
+
record.to_msgpack(out)
|
125
|
+
end
|
126
|
+
end
|
127
|
+
end
|
128
|
+
end
|
129
|
+
end
|