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,165 @@
|
|
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 'ipaddr'
|
18
|
+
|
19
|
+
require 'cool.io'
|
20
|
+
|
21
|
+
require 'fluent/plugin'
|
22
|
+
require 'fluent/input'
|
23
|
+
|
24
|
+
module Fluent
|
25
|
+
module Compat
|
26
|
+
module SocketUtil
|
27
|
+
def create_udp_socket(host)
|
28
|
+
if IPAddr.new(IPSocket.getaddress(host)).ipv4?
|
29
|
+
UDPSocket.new
|
30
|
+
else
|
31
|
+
UDPSocket.new(Socket::AF_INET6)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
module_function :create_udp_socket
|
35
|
+
|
36
|
+
class UdpHandler < Coolio::IO
|
37
|
+
def initialize(io, log, body_size_limit, callback)
|
38
|
+
super(io)
|
39
|
+
@io = io
|
40
|
+
@log = log
|
41
|
+
@body_size_limit = body_size_limit
|
42
|
+
@callback = callback
|
43
|
+
end
|
44
|
+
|
45
|
+
def on_readable
|
46
|
+
msg, addr = @io.recvfrom_nonblock(@body_size_limit)
|
47
|
+
msg.chomp!
|
48
|
+
@callback.call(msg, addr)
|
49
|
+
rescue => e
|
50
|
+
@log.error "unexpected error", error: e
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
class TcpHandler < Coolio::Socket
|
55
|
+
PEERADDR_FAILED = ["?", "?", "name resolusion failed", "?"]
|
56
|
+
|
57
|
+
def initialize(io, log, delimiter, callback)
|
58
|
+
super(io)
|
59
|
+
@timeout = 0
|
60
|
+
if io.is_a?(TCPSocket)
|
61
|
+
@addr = (io.peeraddr rescue PEERADDR_FAILED)
|
62
|
+
|
63
|
+
opt = [1, @timeout.to_i].pack('I!I!') # { int l_onoff; int l_linger; }
|
64
|
+
io.setsockopt(Socket::SOL_SOCKET, Socket::SO_LINGER, opt)
|
65
|
+
end
|
66
|
+
@delimiter = delimiter
|
67
|
+
@callback = callback
|
68
|
+
@log = log
|
69
|
+
@log.trace { "accepted fluent socket object_id=#{self.object_id}" }
|
70
|
+
@buffer = "".force_encoding('ASCII-8BIT')
|
71
|
+
end
|
72
|
+
|
73
|
+
def on_connect
|
74
|
+
end
|
75
|
+
|
76
|
+
def on_read(data)
|
77
|
+
@buffer << data
|
78
|
+
pos = 0
|
79
|
+
|
80
|
+
while i = @buffer.index(@delimiter, pos)
|
81
|
+
msg = @buffer[pos...i]
|
82
|
+
@callback.call(msg, @addr)
|
83
|
+
pos = i + @delimiter.length
|
84
|
+
end
|
85
|
+
@buffer.slice!(0, pos) if pos > 0
|
86
|
+
rescue => e
|
87
|
+
@log.error "unexpected error", error: e
|
88
|
+
close
|
89
|
+
end
|
90
|
+
|
91
|
+
def on_close
|
92
|
+
@log.trace { "closed fluent socket object_id=#{self.object_id}" }
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
class BaseInput < Fluent::Input
|
97
|
+
def initialize
|
98
|
+
super
|
99
|
+
require 'fluent/parser'
|
100
|
+
end
|
101
|
+
|
102
|
+
desc 'Tag of output events.'
|
103
|
+
config_param :tag, :string
|
104
|
+
desc 'The format of the payload.'
|
105
|
+
config_param :format, :string
|
106
|
+
desc 'The port to listen to.'
|
107
|
+
config_param :port, :integer, default: 5150
|
108
|
+
desc 'The bind address to listen to.'
|
109
|
+
config_param :bind, :string, default: '0.0.0.0'
|
110
|
+
desc "The field name of the client's hostname."
|
111
|
+
config_param :source_host_key, :string, default: nil
|
112
|
+
config_param :blocking_timeout, :time, default: 0.5
|
113
|
+
|
114
|
+
def configure(conf)
|
115
|
+
super
|
116
|
+
|
117
|
+
@parser = Plugin.new_parser(@format)
|
118
|
+
@parser.configure(conf)
|
119
|
+
end
|
120
|
+
|
121
|
+
def start
|
122
|
+
super
|
123
|
+
|
124
|
+
@loop = Coolio::Loop.new
|
125
|
+
@handler = listen(method(:on_message))
|
126
|
+
@loop.attach(@handler)
|
127
|
+
@thread = Thread.new(&method(:run))
|
128
|
+
end
|
129
|
+
|
130
|
+
def shutdown
|
131
|
+
@loop.watchers.each { |w| w.detach }
|
132
|
+
@loop.stop if @loop.instance_variable_get("@running")
|
133
|
+
@handler.close
|
134
|
+
@thread.join
|
135
|
+
|
136
|
+
super
|
137
|
+
end
|
138
|
+
|
139
|
+
def run
|
140
|
+
@loop.run(@blocking_timeout)
|
141
|
+
rescue => e
|
142
|
+
log.error "unexpected error", error: e
|
143
|
+
log.error_backtrace
|
144
|
+
end
|
145
|
+
|
146
|
+
private
|
147
|
+
|
148
|
+
def on_message(msg, addr)
|
149
|
+
@parser.parse(msg) { |time, record|
|
150
|
+
unless time && record
|
151
|
+
log.warn "pattern not match: #{msg.inspect}"
|
152
|
+
return
|
153
|
+
end
|
154
|
+
|
155
|
+
record[@source_host_key] = addr[3] if @source_host_key
|
156
|
+
router.emit(@tag, time, record)
|
157
|
+
}
|
158
|
+
rescue => e
|
159
|
+
log.error msg.dump, error: e, host: addr[3]
|
160
|
+
log.error_backtrace
|
161
|
+
end
|
162
|
+
end
|
163
|
+
end
|
164
|
+
end
|
165
|
+
end
|
@@ -0,0 +1,34 @@
|
|
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 StringUtil
|
20
|
+
def match_regexp(regexp, string)
|
21
|
+
begin
|
22
|
+
return regexp.match(string)
|
23
|
+
rescue ArgumentError => e
|
24
|
+
raise e unless e.message.index("invalid byte sequence in".freeze).zero?
|
25
|
+
$log.info "invalid byte sequence is replaced in `#{string}`"
|
26
|
+
string = string.scrub('?')
|
27
|
+
retry
|
28
|
+
end
|
29
|
+
return true
|
30
|
+
end
|
31
|
+
module_function :match_regexp
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,26 @@
|
|
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 StructuredFormatMixin
|
20
|
+
def format(tag, time, record)
|
21
|
+
filter_record(tag, time, record)
|
22
|
+
format_record(record)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,90 @@
|
|
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 TypeConverter
|
20
|
+
Converters = {
|
21
|
+
'string' => lambda { |v| v.to_s },
|
22
|
+
'integer' => lambda { |v| v.to_i },
|
23
|
+
'float' => lambda { |v| v.to_f },
|
24
|
+
'bool' => lambda { |v|
|
25
|
+
case v.downcase
|
26
|
+
when 'true', 'yes', '1'
|
27
|
+
true
|
28
|
+
else
|
29
|
+
false
|
30
|
+
end
|
31
|
+
},
|
32
|
+
'time' => lambda { |v, time_parser|
|
33
|
+
time_parser.parse(v)
|
34
|
+
},
|
35
|
+
'array' => lambda { |v, delimiter|
|
36
|
+
v.to_s.split(delimiter)
|
37
|
+
}
|
38
|
+
}
|
39
|
+
|
40
|
+
def self.included(klass)
|
41
|
+
klass.instance_eval {
|
42
|
+
config_param :types, :string, default: nil
|
43
|
+
config_param :types_delimiter, :string, default: ','
|
44
|
+
config_param :types_label_delimiter, :string, default: ':'
|
45
|
+
}
|
46
|
+
end
|
47
|
+
|
48
|
+
def configure(conf)
|
49
|
+
super
|
50
|
+
|
51
|
+
@type_converters = nil
|
52
|
+
@type_converters = parse_types_parameter unless @types.nil?
|
53
|
+
end
|
54
|
+
|
55
|
+
private
|
56
|
+
|
57
|
+
def convert_type(name, value)
|
58
|
+
converter = @type_converters[name]
|
59
|
+
converter.nil? ? value : converter.call(value)
|
60
|
+
end
|
61
|
+
|
62
|
+
def parse_types_parameter
|
63
|
+
converters = {}
|
64
|
+
|
65
|
+
@types.split(@types_delimiter).each { |pattern_name|
|
66
|
+
name, type, format = pattern_name.split(@types_label_delimiter, 3)
|
67
|
+
raise ConfigError, "Type is needed" if type.nil?
|
68
|
+
|
69
|
+
case type
|
70
|
+
when 'time'
|
71
|
+
require 'fluent/parser'
|
72
|
+
t_parser = Fluent::TextParser::TimeParser.new(format)
|
73
|
+
converters[name] = lambda { |v|
|
74
|
+
Converters[type].call(v, t_parser)
|
75
|
+
}
|
76
|
+
when 'array'
|
77
|
+
delimiter = format || ','
|
78
|
+
converters[name] = lambda { |v|
|
79
|
+
Converters[type].call(v, delimiter)
|
80
|
+
}
|
81
|
+
else
|
82
|
+
converters[name] = Converters[type]
|
83
|
+
end
|
84
|
+
}
|
85
|
+
|
86
|
+
converters
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
@@ -0,0 +1,56 @@
|
|
1
|
+
#
|
2
|
+
# Fluent
|
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/config/error'
|
18
|
+
require 'fluent/config/element'
|
19
|
+
require 'fluent/configurable'
|
20
|
+
|
21
|
+
module Fluent
|
22
|
+
module Config
|
23
|
+
def self.parse(str, fname, basepath = Dir.pwd, v1_config = nil, syntax: :v1)
|
24
|
+
parser = if fname =~ /\.rb$/ || syntax == :ruby
|
25
|
+
:ruby
|
26
|
+
elsif v1_config.nil?
|
27
|
+
case syntax
|
28
|
+
when :v1 then :v1
|
29
|
+
when :v0 then :v0
|
30
|
+
else
|
31
|
+
raise ArgumentError, "Unknown Fluentd configuration syntax: '#{syntax}'"
|
32
|
+
end
|
33
|
+
elsif v1_config then :v1
|
34
|
+
else :v0
|
35
|
+
end
|
36
|
+
case parser
|
37
|
+
when :v1
|
38
|
+
require 'fluent/config/v1_parser'
|
39
|
+
V1Parser.parse(str, fname, basepath, Kernel.binding)
|
40
|
+
when :v0
|
41
|
+
# TODO: show deprecated message in v1
|
42
|
+
require 'fluent/config/parser'
|
43
|
+
Parser.parse(str, fname, basepath)
|
44
|
+
when :ruby
|
45
|
+
require 'fluent/config/dsl'
|
46
|
+
Config::DSL::Parser.parse(str, File.join(basepath, fname))
|
47
|
+
else
|
48
|
+
raise "[BUG] unknown configuration parser specification:'#{parser}'"
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
def self.new(name = '')
|
53
|
+
Element.new(name, '', {}, [])
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
@@ -0,0 +1,123 @@
|
|
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 'stringio'
|
18
|
+
require 'fluent/config/error'
|
19
|
+
|
20
|
+
module Fluent
|
21
|
+
module Config
|
22
|
+
class BasicParser
|
23
|
+
def initialize(strscan)
|
24
|
+
@ss = strscan
|
25
|
+
end
|
26
|
+
|
27
|
+
LINE_END = /(?:[ \t]*(?:\#.*)?(?:\z|[\r\n]))+/
|
28
|
+
SPACING = /(?:[ \t\r\n]|\z|\#.*?(?:\z|[\r\n]))+/
|
29
|
+
ZERO_OR_MORE_SPACING = /(?:[ \t\r\n]|\z|\#.*?(?:\z|[\r\n]))*/
|
30
|
+
SPACING_WITHOUT_COMMENT = /(?:[ \t\r\n]|\z)+/
|
31
|
+
LINE_END_WITHOUT_SPACING_AND_COMMENT = /(?:\z|[\r\n])/
|
32
|
+
|
33
|
+
module ClassMethods
|
34
|
+
def symbol(string)
|
35
|
+
/#{Regexp.escape(string)}/
|
36
|
+
end
|
37
|
+
|
38
|
+
def def_symbol(method_name, string)
|
39
|
+
pattern = symbol(string)
|
40
|
+
define_method(method_name) do
|
41
|
+
skip(pattern) && string
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
def def_literal(method_name, string)
|
46
|
+
pattern = /#{string}#{LINE_END}/
|
47
|
+
define_method(method_name) do
|
48
|
+
skip(pattern) && string
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
extend ClassMethods
|
54
|
+
|
55
|
+
def skip(pattern)
|
56
|
+
@ss.skip(pattern)
|
57
|
+
end
|
58
|
+
|
59
|
+
def scan(pattern)
|
60
|
+
@ss.scan(pattern)
|
61
|
+
end
|
62
|
+
|
63
|
+
def getch
|
64
|
+
@ss.getch
|
65
|
+
end
|
66
|
+
|
67
|
+
def eof?
|
68
|
+
@ss.eos?
|
69
|
+
end
|
70
|
+
|
71
|
+
def prev_match
|
72
|
+
@ss[0]
|
73
|
+
end
|
74
|
+
|
75
|
+
def check(pattern)
|
76
|
+
@ss.check(pattern)
|
77
|
+
end
|
78
|
+
|
79
|
+
def line_end
|
80
|
+
skip(LINE_END)
|
81
|
+
end
|
82
|
+
|
83
|
+
def spacing
|
84
|
+
skip(SPACING)
|
85
|
+
end
|
86
|
+
|
87
|
+
def spacing_without_comment
|
88
|
+
skip(SPACING_WITHOUT_COMMENT)
|
89
|
+
end
|
90
|
+
|
91
|
+
def parse_error!(message)
|
92
|
+
raise ConfigParseError, "#{message} at #{error_sample}"
|
93
|
+
end
|
94
|
+
|
95
|
+
def error_sample
|
96
|
+
pos = @ss.pos
|
97
|
+
|
98
|
+
lines = @ss.string.lines.to_a
|
99
|
+
lines.each_with_index { |line, ln|
|
100
|
+
if line.size >= pos
|
101
|
+
msgs = ["line #{ln + 1},#{pos}\n"]
|
102
|
+
|
103
|
+
if ln > 0
|
104
|
+
last_line = lines[ln - 1]
|
105
|
+
msgs << "%3s: %s" % [ln, last_line]
|
106
|
+
end
|
107
|
+
|
108
|
+
msgs << "%3s: %s" % [ln + 1, line]
|
109
|
+
msgs << "\n #{'-' * pos}^\n"
|
110
|
+
|
111
|
+
if next_line = lines[ln + 1]
|
112
|
+
msgs << "%3s: %s" % [ln + 2, next_line]
|
113
|
+
end
|
114
|
+
|
115
|
+
return msgs.join
|
116
|
+
end
|
117
|
+
pos -= line.size
|
118
|
+
last_line = line
|
119
|
+
}
|
120
|
+
end
|
121
|
+
end
|
122
|
+
end
|
123
|
+
end
|