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,41 @@
|
|
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 'cool.io'
|
18
|
+
|
19
|
+
require 'fluent/plugin/socket_util'
|
20
|
+
|
21
|
+
module Fluent
|
22
|
+
class TcpInput < SocketUtil::BaseInput
|
23
|
+
Plugin.register_input('tcp', self)
|
24
|
+
|
25
|
+
config_set_default :port, 5170
|
26
|
+
desc 'The payload is read up to this character.'
|
27
|
+
config_param :delimiter, :string, default: "\n" # syslog family add "\n" to each message and this seems only way to split messages in tcp stream
|
28
|
+
|
29
|
+
def listen(callback)
|
30
|
+
log.info "listening tcp socket on #{@bind}:#{@port}"
|
31
|
+
|
32
|
+
socket_manager_path = ENV['SERVERENGINE_SOCKETMANAGER_PATH']
|
33
|
+
if Fluent.windows?
|
34
|
+
socket_manager_path = socket_manager_path.to_i
|
35
|
+
end
|
36
|
+
client = ServerEngine::SocketManager::Client.new(socket_manager_path)
|
37
|
+
lsock = client.listen_tcp(@bind, @port)
|
38
|
+
Coolio::TCPServer.new(lsock, nil, SocketUtil::TcpHandler, log, @delimiter, callback)
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
@@ -0,0 +1,37 @@
|
|
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 'fluent/plugin/socket_util'
|
18
|
+
|
19
|
+
module Fluent
|
20
|
+
class UdpInput < SocketUtil::BaseInput
|
21
|
+
Plugin.register_input('udp', self)
|
22
|
+
|
23
|
+
config_set_default :port, 5160
|
24
|
+
config_param :body_size_limit, :size, default: 4096
|
25
|
+
|
26
|
+
def listen(callback)
|
27
|
+
log.info "listening udp socket on #{@bind}:#{@port}"
|
28
|
+
socket_manager_path = ENV['SERVERENGINE_SOCKETMANAGER_PATH']
|
29
|
+
if Fluent.windows?
|
30
|
+
socket_manager_path = socket_manager_path.to_i
|
31
|
+
end
|
32
|
+
client = ServerEngine::SocketManager::Client.new(socket_manager_path)
|
33
|
+
@usock = client.listen_udp(@bind, @port)
|
34
|
+
SocketUtil::UdpHandler.new(@usock, log, @body_size_limit, callback)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,201 @@
|
|
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 'fileutils'
|
18
|
+
require 'socket'
|
19
|
+
|
20
|
+
require 'cool.io'
|
21
|
+
require 'yajl'
|
22
|
+
|
23
|
+
require 'fluent/input'
|
24
|
+
require 'fluent/event'
|
25
|
+
|
26
|
+
module Fluent
|
27
|
+
# obsolete
|
28
|
+
class StreamInput < Input
|
29
|
+
config_param :blocking_timeout, :time, default: 0.5
|
30
|
+
|
31
|
+
def initialize
|
32
|
+
require 'socket'
|
33
|
+
require 'yajl'
|
34
|
+
super
|
35
|
+
end
|
36
|
+
|
37
|
+
def start
|
38
|
+
super
|
39
|
+
|
40
|
+
@loop = Coolio::Loop.new
|
41
|
+
@lsock = listen
|
42
|
+
@loop.attach(@lsock)
|
43
|
+
@thread = Thread.new(&method(:run))
|
44
|
+
end
|
45
|
+
|
46
|
+
def shutdown
|
47
|
+
@loop.watchers.each {|w| w.detach }
|
48
|
+
@loop.stop
|
49
|
+
@lsock.close
|
50
|
+
@thread.join
|
51
|
+
|
52
|
+
super
|
53
|
+
end
|
54
|
+
|
55
|
+
#def listen
|
56
|
+
#end
|
57
|
+
|
58
|
+
def run
|
59
|
+
@loop.run(@blocking_timeout)
|
60
|
+
rescue
|
61
|
+
log.error "unexpected error", error: $!.to_s
|
62
|
+
log.error_backtrace
|
63
|
+
end
|
64
|
+
|
65
|
+
private
|
66
|
+
|
67
|
+
# message Entry {
|
68
|
+
# 1: long time
|
69
|
+
# 2: object record
|
70
|
+
# }
|
71
|
+
#
|
72
|
+
# message Forward {
|
73
|
+
# 1: string tag
|
74
|
+
# 2: list<Entry> entries
|
75
|
+
# }
|
76
|
+
#
|
77
|
+
# message PackedForward {
|
78
|
+
# 1: string tag
|
79
|
+
# 2: raw entries # msgpack stream of Entry
|
80
|
+
# }
|
81
|
+
#
|
82
|
+
# message Message {
|
83
|
+
# 1: string tag
|
84
|
+
# 2: long? time
|
85
|
+
# 3: object record
|
86
|
+
# }
|
87
|
+
def on_message(msg)
|
88
|
+
# TODO format error
|
89
|
+
tag = msg[0].to_s
|
90
|
+
entries = msg[1]
|
91
|
+
|
92
|
+
if entries.class == String
|
93
|
+
# PackedForward
|
94
|
+
es = MessagePackEventStream.new(entries)
|
95
|
+
router.emit_stream(tag, es)
|
96
|
+
|
97
|
+
elsif entries.class == Array
|
98
|
+
# Forward
|
99
|
+
es = MultiEventStream.new
|
100
|
+
entries.each {|e|
|
101
|
+
record = e[1]
|
102
|
+
next if record.nil?
|
103
|
+
time = e[0]
|
104
|
+
time = (now ||= Engine.now) if time.to_i == 0
|
105
|
+
es.add(time, record)
|
106
|
+
}
|
107
|
+
router.emit_stream(tag, es)
|
108
|
+
|
109
|
+
else
|
110
|
+
# Message
|
111
|
+
record = msg[2]
|
112
|
+
return if record.nil?
|
113
|
+
|
114
|
+
time = msg[1]
|
115
|
+
time = Engine.now if time.to_i == 0
|
116
|
+
router.emit(tag, time, record)
|
117
|
+
end
|
118
|
+
end
|
119
|
+
|
120
|
+
class Handler < Coolio::Socket
|
121
|
+
def initialize(io, log, on_message)
|
122
|
+
super(io)
|
123
|
+
if io.is_a?(TCPSocket)
|
124
|
+
opt = [1, @timeout.to_i].pack('I!I!') # { int l_onoff; int l_linger; }
|
125
|
+
io.setsockopt(Socket::SOL_SOCKET, Socket::SO_LINGER, opt)
|
126
|
+
end
|
127
|
+
@on_message = on_message
|
128
|
+
@log = log
|
129
|
+
@log.trace {
|
130
|
+
remote_port, remote_addr = *Socket.unpack_sockaddr_in(@_io.getpeername) rescue nil
|
131
|
+
"accepted fluent socket from '#{remote_addr}:#{remote_port}': object_id=#{self.object_id}"
|
132
|
+
}
|
133
|
+
end
|
134
|
+
|
135
|
+
def on_connect
|
136
|
+
end
|
137
|
+
|
138
|
+
def on_read(data)
|
139
|
+
first = data[0]
|
140
|
+
if first == '{' || first == '['
|
141
|
+
m = method(:on_read_json)
|
142
|
+
@y = Yajl::Parser.new
|
143
|
+
@y.on_parse_complete = @on_message
|
144
|
+
else
|
145
|
+
m = method(:on_read_msgpack)
|
146
|
+
@u = Fluent::Engine.msgpack_factory.unpacker
|
147
|
+
end
|
148
|
+
|
149
|
+
(class << self; self; end).module_eval do
|
150
|
+
define_method(:on_read, m)
|
151
|
+
end
|
152
|
+
m.call(data)
|
153
|
+
end
|
154
|
+
|
155
|
+
def on_read_json(data)
|
156
|
+
@y << data
|
157
|
+
rescue
|
158
|
+
@log.error "unexpected error", error: $!.to_s
|
159
|
+
@log.error_backtrace
|
160
|
+
close
|
161
|
+
end
|
162
|
+
|
163
|
+
def on_read_msgpack(data)
|
164
|
+
@u.feed_each(data, &@on_message)
|
165
|
+
rescue
|
166
|
+
@log.error "unexpected error", error: $!.to_s
|
167
|
+
@log.error_backtrace
|
168
|
+
close
|
169
|
+
end
|
170
|
+
|
171
|
+
def on_close
|
172
|
+
@log.trace { "closed fluent socket object_id=#{self.object_id}" }
|
173
|
+
end
|
174
|
+
end
|
175
|
+
end
|
176
|
+
|
177
|
+
class UnixInput < StreamInput
|
178
|
+
Plugin.register_input('unix', self)
|
179
|
+
|
180
|
+
desc 'The path to your Unix Domain Socket.'
|
181
|
+
config_param :path, :string, default: DEFAULT_SOCKET_PATH
|
182
|
+
desc 'The backlog of Unix Domain Socket.'
|
183
|
+
config_param :backlog, :integer, default: nil
|
184
|
+
|
185
|
+
def configure(conf)
|
186
|
+
super
|
187
|
+
#log.warn "'unix' input is obsoleted and will be removed. Use 'forward' instead."
|
188
|
+
end
|
189
|
+
|
190
|
+
def listen
|
191
|
+
if File.exist?(@path)
|
192
|
+
File.unlink(@path)
|
193
|
+
end
|
194
|
+
FileUtils.mkdir_p File.dirname(@path)
|
195
|
+
log.info "listening fluent socket on #{@path}"
|
196
|
+
s = Coolio::UNIXServer.new(@path, Handler, log, method(:on_message))
|
197
|
+
s.listen(@backlog) unless @backlog.nil?
|
198
|
+
s
|
199
|
+
end
|
200
|
+
end
|
201
|
+
end
|
@@ -0,0 +1,33 @@
|
|
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 'fluent/plugin/base'
|
18
|
+
|
19
|
+
require 'fluent/log'
|
20
|
+
require 'fluent/plugin_id'
|
21
|
+
require 'fluent/plugin_helper'
|
22
|
+
|
23
|
+
module Fluent
|
24
|
+
module Plugin
|
25
|
+
class Input < Base
|
26
|
+
include PluginId
|
27
|
+
include PluginLoggerMixin
|
28
|
+
include PluginHelper::Mixin
|
29
|
+
|
30
|
+
helpers :event_emitter
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,95 @@
|
|
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 'fluent/plugin/base'
|
18
|
+
require 'fluent/log'
|
19
|
+
require 'fluent/plugin_id'
|
20
|
+
require 'fluent/plugin_helper'
|
21
|
+
|
22
|
+
module Fluent
|
23
|
+
module Plugin
|
24
|
+
class MultiOutput < Base
|
25
|
+
include PluginId
|
26
|
+
include PluginLoggerMixin
|
27
|
+
include PluginHelper::Mixin # for event_emitter
|
28
|
+
|
29
|
+
helpers :event_emitter # to get router from agent, which will be supplied to child plugins
|
30
|
+
|
31
|
+
config_section :store, param_name: :stores, multi: true, required: true do
|
32
|
+
config_param :@type, :string, default: nil
|
33
|
+
end
|
34
|
+
|
35
|
+
attr_reader :outputs
|
36
|
+
|
37
|
+
def process(tag, es)
|
38
|
+
raise NotImplementedError, "BUG: output plugins MUST implement this method"
|
39
|
+
end
|
40
|
+
|
41
|
+
def initialize
|
42
|
+
super
|
43
|
+
@outputs = []
|
44
|
+
|
45
|
+
@compat = false
|
46
|
+
|
47
|
+
@counters_monitor = Monitor.new
|
48
|
+
# TODO: well organized counters
|
49
|
+
@num_errors = 0
|
50
|
+
@emit_count = 0
|
51
|
+
@emit_records = 0
|
52
|
+
# @write_count = 0
|
53
|
+
# @rollback_count = 0
|
54
|
+
end
|
55
|
+
|
56
|
+
def configure(conf)
|
57
|
+
super
|
58
|
+
|
59
|
+
@stores.each do |store|
|
60
|
+
store_conf = store.corresponding_config_element
|
61
|
+
type = store_conf['@type']
|
62
|
+
unless type
|
63
|
+
raise Fluent::ConfigError, "Missing '@type' parameter in <store> section"
|
64
|
+
end
|
65
|
+
|
66
|
+
log.debug "adding store", type: type
|
67
|
+
|
68
|
+
output = Fluent::Plugin.new_output(type)
|
69
|
+
if output.has_router?
|
70
|
+
output.router = router
|
71
|
+
end
|
72
|
+
output.configure(store_conf)
|
73
|
+
@outputs << output
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
# Child plugin's lifecycles are controlled by agent automatically.
|
78
|
+
# It calls `outputs` to traverse plugins, and invoke start/stop/*shutdown/close/terminate on these directly.
|
79
|
+
# * `start` of this plugin will be called after child plugins
|
80
|
+
# * `stop`, `*shutdown`, `close` and `terminate` of this plugin will be called before child plugins
|
81
|
+
|
82
|
+
def emit_sync(tag, es)
|
83
|
+
@counters_monitor.synchronize{ @emit_count += 1 }
|
84
|
+
begin
|
85
|
+
process(tag, es)
|
86
|
+
@counters_monitor.synchronize{ @emit_records += es.size }
|
87
|
+
rescue
|
88
|
+
@counters_monitor.synchronize{ @num_errors += 1 }
|
89
|
+
raise
|
90
|
+
end
|
91
|
+
end
|
92
|
+
alias :emit_events :emit_sync
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end
|
@@ -0,0 +1,59 @@
|
|
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 'fluent/plugin/output'
|
18
|
+
|
19
|
+
module Fluent::Plugin
|
20
|
+
class BufferedNullOutput < Output
|
21
|
+
# This plugin is for tests of buffer plugins
|
22
|
+
|
23
|
+
Fluent::Plugin.register_output('buffered_null', self)
|
24
|
+
|
25
|
+
config_section :buffer do
|
26
|
+
config_set_default :chunk_keys, ['tag']
|
27
|
+
config_set_default :flush_at_shutdown, true
|
28
|
+
config_set_default :chunk_limit_size, 10 * 1024
|
29
|
+
end
|
30
|
+
|
31
|
+
attr_accessor :feed_proc, :delayed
|
32
|
+
|
33
|
+
def initialize
|
34
|
+
super
|
35
|
+
@delayed = false
|
36
|
+
@feed_proc = nil
|
37
|
+
end
|
38
|
+
|
39
|
+
def prefer_delayed_commit
|
40
|
+
@delayed
|
41
|
+
end
|
42
|
+
|
43
|
+
def write(chunk)
|
44
|
+
if @feed_proc
|
45
|
+
@feed_proc.call(chunk)
|
46
|
+
else
|
47
|
+
# ignore chunk.read
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
def try_write(chunk)
|
52
|
+
if @feed_proc
|
53
|
+
@feed_proc.call(chunk)
|
54
|
+
else
|
55
|
+
# ignore chunk.read
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|