fluentd 1.20.0-aarch64-mingw-ucrt
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.rubocop.yml +116 -0
- data/ADOPTERS.md +5 -0
- data/AGENTS.md +46 -0
- data/AUTHORS +2 -0
- data/CHANGELOG.md +3324 -0
- data/CONTRIBUTING.md +45 -0
- data/GOVERNANCE.md +55 -0
- data/GithubWorkflow.md +78 -0
- data/LICENSE +202 -0
- data/MAINTAINERS.md +19 -0
- data/README.md +73 -0
- data/Rakefile +89 -0
- data/SECURITY.md +47 -0
- data/bin/fluent-binlog-reader +7 -0
- data/bin/fluent-ca-generate +6 -0
- data/bin/fluent-cap-ctl +7 -0
- data/bin/fluent-cat +5 -0
- data/bin/fluent-ctl +7 -0
- data/bin/fluent-debug +5 -0
- data/bin/fluent-gem +9 -0
- data/bin/fluent-plugin-config-format +5 -0
- data/bin/fluent-plugin-generate +5 -0
- data/bin/fluentd +15 -0
- data/code-of-conduct.md +3 -0
- data/docs/SECURITY_AUDIT.pdf +0 -0
- data/example/copy_roundrobin.conf +39 -0
- data/example/counter.conf +18 -0
- data/example/filter_stdout.conf +22 -0
- data/example/in_forward.conf +14 -0
- data/example/in_forward_client.conf +37 -0
- data/example/in_forward_shared_key.conf +15 -0
- data/example/in_forward_tls.conf +14 -0
- data/example/in_forward_users.conf +24 -0
- data/example/in_forward_workers.conf +21 -0
- data/example/in_http.conf +16 -0
- data/example/in_out_forward.conf +17 -0
- data/example/in_sample_blocks.conf +17 -0
- data/example/in_sample_with_compression.conf +23 -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/logevents.conf +25 -0
- data/example/multi_filters.conf +61 -0
- data/example/out_copy.conf +20 -0
- data/example/out_exec_filter.conf +42 -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/out_forward_client.conf +109 -0
- data/example/out_forward_heartbeat_none.conf +16 -0
- data/example/out_forward_sd.conf +17 -0
- data/example/out_forward_shared_key.conf +36 -0
- data/example/out_forward_tls.conf +18 -0
- data/example/out_forward_users.conf +65 -0
- data/example/out_null.conf +36 -0
- data/example/sd.yaml +8 -0
- data/example/secondary_file.conf +42 -0
- data/example/suppress_config_dump.conf +7 -0
- data/example/v0_12_filter.conf +78 -0
- data/example/v1_literal_example.conf +36 -0
- data/example/worker_section.conf +36 -0
- data/fluent.conf +139 -0
- data/lib/fluent/agent.rb +168 -0
- data/lib/fluent/capability.rb +87 -0
- data/lib/fluent/clock.rb +66 -0
- data/lib/fluent/command/binlog_reader.rb +244 -0
- data/lib/fluent/command/bundler_injection.rb +45 -0
- data/lib/fluent/command/ca_generate.rb +184 -0
- data/lib/fluent/command/cap_ctl.rb +174 -0
- data/lib/fluent/command/cat.rb +365 -0
- data/lib/fluent/command/ctl.rb +180 -0
- data/lib/fluent/command/debug.rb +103 -0
- data/lib/fluent/command/fluentd.rb +385 -0
- data/lib/fluent/command/plugin_config_formatter.rb +308 -0
- data/lib/fluent/command/plugin_generator.rb +365 -0
- data/lib/fluent/compat/call_super_mixin.rb +76 -0
- data/lib/fluent/compat/detach_process_mixin.rb +33 -0
- data/lib/fluent/compat/exec_util.rb +144 -0
- data/lib/fluent/compat/file_util.rb +54 -0
- data/lib/fluent/compat/filter.rb +68 -0
- data/lib/fluent/compat/formatter.rb +117 -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 +721 -0
- data/lib/fluent/compat/output_chain.rb +60 -0
- data/lib/fluent/compat/parser.rb +310 -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/basic_parser.rb +122 -0
- data/lib/fluent/config/configure_proxy.rb +424 -0
- data/lib/fluent/config/dsl.rb +152 -0
- data/lib/fluent/config/element.rb +265 -0
- data/lib/fluent/config/error.rb +44 -0
- data/lib/fluent/config/literal_parser.rb +305 -0
- data/lib/fluent/config/parser.rb +119 -0
- data/lib/fluent/config/section.rb +272 -0
- data/lib/fluent/config/types.rb +257 -0
- data/lib/fluent/config/v1_parser.rb +200 -0
- data/lib/fluent/config/yaml_parser/fluent_value.rb +47 -0
- data/lib/fluent/config/yaml_parser/loader.rb +124 -0
- data/lib/fluent/config/yaml_parser/parser.rb +179 -0
- data/lib/fluent/config/yaml_parser/section_builder.rb +107 -0
- data/lib/fluent/config/yaml_parser.rb +56 -0
- data/lib/fluent/config.rb +89 -0
- data/lib/fluent/configurable.rb +202 -0
- data/lib/fluent/counter/base_socket.rb +44 -0
- data/lib/fluent/counter/client.rb +297 -0
- data/lib/fluent/counter/error.rb +86 -0
- data/lib/fluent/counter/mutex_hash.rb +163 -0
- data/lib/fluent/counter/server.rb +273 -0
- data/lib/fluent/counter/store.rb +205 -0
- data/lib/fluent/counter/validator.rb +145 -0
- data/lib/fluent/counter.rb +23 -0
- data/lib/fluent/daemon.rb +14 -0
- data/lib/fluent/daemonizer.rb +88 -0
- data/lib/fluent/engine.rb +269 -0
- data/lib/fluent/env.rb +45 -0
- data/lib/fluent/error.rb +37 -0
- data/lib/fluent/event.rb +369 -0
- data/lib/fluent/event_router.rb +315 -0
- data/lib/fluent/ext_monitor_require.rb +28 -0
- data/lib/fluent/file_wrapper.rb +137 -0
- data/lib/fluent/filter.rb +21 -0
- data/lib/fluent/fluent_log_event_router.rb +139 -0
- data/lib/fluent/formatter.rb +23 -0
- data/lib/fluent/input.rb +21 -0
- data/lib/fluent/label.rb +46 -0
- data/lib/fluent/load.rb +33 -0
- data/lib/fluent/log/console_adapter.rb +66 -0
- data/lib/fluent/log.rb +775 -0
- data/lib/fluent/match.rb +187 -0
- data/lib/fluent/mixin.rb +31 -0
- data/lib/fluent/msgpack_factory.rb +111 -0
- data/lib/fluent/oj_options.rb +61 -0
- data/lib/fluent/output.rb +29 -0
- data/lib/fluent/output_chain.rb +23 -0
- data/lib/fluent/parser.rb +23 -0
- data/lib/fluent/plugin/bare_output.rb +88 -0
- data/lib/fluent/plugin/base.rb +219 -0
- data/lib/fluent/plugin/buf_file.rb +256 -0
- data/lib/fluent/plugin/buf_file_single.rb +272 -0
- data/lib/fluent/plugin/buf_memory.rb +34 -0
- data/lib/fluent/plugin/buffer/chunk.rb +313 -0
- data/lib/fluent/plugin/buffer/file_chunk.rb +432 -0
- data/lib/fluent/plugin/buffer/file_single_chunk.rb +325 -0
- data/lib/fluent/plugin/buffer/memory_chunk.rb +91 -0
- data/lib/fluent/plugin/buffer.rb +1063 -0
- data/lib/fluent/plugin/compressable.rb +87 -0
- data/lib/fluent/plugin/exec_util.rb +22 -0
- data/lib/fluent/plugin/extractor.rb +132 -0
- data/lib/fluent/plugin/file_util.rb +22 -0
- data/lib/fluent/plugin/filter.rb +119 -0
- data/lib/fluent/plugin/filter_grep.rb +189 -0
- data/lib/fluent/plugin/filter_parser.rb +124 -0
- data/lib/fluent/plugin/filter_record_transformer.rb +325 -0
- data/lib/fluent/plugin/filter_stdout.rb +53 -0
- data/lib/fluent/plugin/formatter.rb +75 -0
- data/lib/fluent/plugin/formatter_csv.rb +92 -0
- data/lib/fluent/plugin/formatter_hash.rb +35 -0
- data/lib/fluent/plugin/formatter_json.rb +62 -0
- data/lib/fluent/plugin/formatter_ltsv.rb +44 -0
- data/lib/fluent/plugin/formatter_msgpack.rb +33 -0
- data/lib/fluent/plugin/formatter_out_file.rb +55 -0
- data/lib/fluent/plugin/formatter_single_value.rb +36 -0
- data/lib/fluent/plugin/formatter_stdout.rb +76 -0
- data/lib/fluent/plugin/formatter_tsv.rb +40 -0
- data/lib/fluent/plugin/in_debug_agent.rb +71 -0
- data/lib/fluent/plugin/in_dummy.rb +18 -0
- data/lib/fluent/plugin/in_exec.rb +124 -0
- data/lib/fluent/plugin/in_forward.rb +489 -0
- data/lib/fluent/plugin/in_gc_stat.rb +72 -0
- data/lib/fluent/plugin/in_http.rb +737 -0
- data/lib/fluent/plugin/in_monitor_agent.rb +406 -0
- data/lib/fluent/plugin/in_object_space.rb +93 -0
- data/lib/fluent/plugin/in_sample.rb +148 -0
- data/lib/fluent/plugin/in_syslog.rb +346 -0
- data/lib/fluent/plugin/in_tail/compatibility.rb +111 -0
- data/lib/fluent/plugin/in_tail/dir_watcher.rb +713 -0
- data/lib/fluent/plugin/in_tail/group_watch.rb +204 -0
- data/lib/fluent/plugin/in_tail/io_handler.rb +391 -0
- data/lib/fluent/plugin/in_tail/line_feeder.rb +230 -0
- data/lib/fluent/plugin/in_tail/position_file.rb +269 -0
- data/lib/fluent/plugin/in_tail/stat_watcher.rb +52 -0
- data/lib/fluent/plugin/in_tail/tail_watcher.rb +276 -0
- data/lib/fluent/plugin/in_tail/worker_pool.rb +298 -0
- data/lib/fluent/plugin/in_tail.rb +917 -0
- data/lib/fluent/plugin/in_tcp.rb +230 -0
- data/lib/fluent/plugin/in_udp.rb +101 -0
- data/lib/fluent/plugin/in_unix.rb +197 -0
- data/lib/fluent/plugin/input.rb +71 -0
- data/lib/fluent/plugin/metrics.rb +119 -0
- data/lib/fluent/plugin/metrics_local.rb +96 -0
- data/lib/fluent/plugin/multi_output.rb +179 -0
- data/lib/fluent/plugin/out_buffer.rb +40 -0
- data/lib/fluent/plugin/out_copy.rb +120 -0
- data/lib/fluent/plugin/out_exec.rb +105 -0
- data/lib/fluent/plugin/out_exec_filter.rb +319 -0
- data/lib/fluent/plugin/out_file.rb +371 -0
- data/lib/fluent/plugin/out_forward/ack_handler.rb +176 -0
- data/lib/fluent/plugin/out_forward/connection_manager.rb +131 -0
- data/lib/fluent/plugin/out_forward/error.rb +28 -0
- data/lib/fluent/plugin/out_forward/failure_detector.rb +84 -0
- data/lib/fluent/plugin/out_forward/handshake_protocol.rb +125 -0
- data/lib/fluent/plugin/out_forward/load_balancer.rb +114 -0
- data/lib/fluent/plugin/out_forward/socket_cache.rb +177 -0
- data/lib/fluent/plugin/out_forward.rb +865 -0
- data/lib/fluent/plugin/out_http.rb +419 -0
- data/lib/fluent/plugin/out_null.rb +74 -0
- data/lib/fluent/plugin/out_relabel.rb +32 -0
- data/lib/fluent/plugin/out_roundrobin.rb +84 -0
- data/lib/fluent/plugin/out_secondary_file.rb +148 -0
- data/lib/fluent/plugin/out_stdout.rb +81 -0
- data/lib/fluent/plugin/out_stream.rb +130 -0
- data/lib/fluent/plugin/output.rb +1688 -0
- data/lib/fluent/plugin/owned_by_mixin.rb +41 -0
- data/lib/fluent/plugin/parser.rb +274 -0
- data/lib/fluent/plugin/parser_apache.rb +28 -0
- data/lib/fluent/plugin/parser_apache2.rb +88 -0
- data/lib/fluent/plugin/parser_apache_error.rb +26 -0
- data/lib/fluent/plugin/parser_csv.rb +124 -0
- data/lib/fluent/plugin/parser_json.rb +118 -0
- data/lib/fluent/plugin/parser_ltsv.rb +49 -0
- data/lib/fluent/plugin/parser_msgpack.rb +72 -0
- data/lib/fluent/plugin/parser_multiline.rb +152 -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 +68 -0
- data/lib/fluent/plugin/parser_syslog.rb +543 -0
- data/lib/fluent/plugin/parser_tsv.rb +47 -0
- data/lib/fluent/plugin/sd_file.rb +157 -0
- data/lib/fluent/plugin/sd_srv.rb +135 -0
- data/lib/fluent/plugin/sd_static.rb +58 -0
- data/lib/fluent/plugin/service_discovery.rb +65 -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 +166 -0
- data/lib/fluent/plugin/string_util.rb +22 -0
- data/lib/fluent/plugin.rb +206 -0
- data/lib/fluent/plugin_helper/cert_option.rb +199 -0
- data/lib/fluent/plugin_helper/child_process.rb +369 -0
- data/lib/fluent/plugin_helper/compat_parameters.rb +343 -0
- data/lib/fluent/plugin_helper/counter.rb +51 -0
- data/lib/fluent/plugin_helper/event_emitter.rb +112 -0
- data/lib/fluent/plugin_helper/event_loop.rb +170 -0
- data/lib/fluent/plugin_helper/extract.rb +104 -0
- data/lib/fluent/plugin_helper/formatter.rb +147 -0
- data/lib/fluent/plugin_helper/http_server/app.rb +81 -0
- data/lib/fluent/plugin_helper/http_server/methods.rb +35 -0
- data/lib/fluent/plugin_helper/http_server/request.rb +53 -0
- data/lib/fluent/plugin_helper/http_server/router.rb +54 -0
- data/lib/fluent/plugin_helper/http_server/server.rb +116 -0
- data/lib/fluent/plugin_helper/http_server/ssl_context_builder.rb +41 -0
- data/lib/fluent/plugin_helper/http_server.rb +129 -0
- data/lib/fluent/plugin_helper/inject.rb +154 -0
- data/lib/fluent/plugin_helper/metrics.rb +136 -0
- data/lib/fluent/plugin_helper/parser.rb +147 -0
- data/lib/fluent/plugin_helper/record_accessor.rb +207 -0
- data/lib/fluent/plugin_helper/retry_state.rb +219 -0
- data/lib/fluent/plugin_helper/server.rb +840 -0
- data/lib/fluent/plugin_helper/service_discovery/manager.rb +146 -0
- data/lib/fluent/plugin_helper/service_discovery/round_robin_balancer.rb +43 -0
- data/lib/fluent/plugin_helper/service_discovery.rb +125 -0
- data/lib/fluent/plugin_helper/socket.rb +288 -0
- data/lib/fluent/plugin_helper/socket_option.rb +98 -0
- data/lib/fluent/plugin_helper/storage.rb +349 -0
- data/lib/fluent/plugin_helper/thread.rb +180 -0
- data/lib/fluent/plugin_helper/timer.rb +92 -0
- data/lib/fluent/plugin_helper.rb +75 -0
- data/lib/fluent/plugin_id.rb +93 -0
- data/lib/fluent/process.rb +22 -0
- data/lib/fluent/registry.rb +117 -0
- data/lib/fluent/root_agent.rb +468 -0
- data/lib/fluent/rpc.rb +95 -0
- data/lib/fluent/source_only_buffer_agent.rb +102 -0
- data/lib/fluent/static_config_analysis.rb +195 -0
- data/lib/fluent/supervisor.rb +1347 -0
- data/lib/fluent/system_config.rb +213 -0
- data/lib/fluent/test/base.rb +83 -0
- data/lib/fluent/test/driver/base.rb +231 -0
- data/lib/fluent/test/driver/base_owned.rb +83 -0
- data/lib/fluent/test/driver/base_owner.rb +135 -0
- data/lib/fluent/test/driver/event_feeder.rb +98 -0
- data/lib/fluent/test/driver/filter.rb +61 -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 +53 -0
- data/lib/fluent/test/driver/output.rb +102 -0
- data/lib/fluent/test/driver/parser.rb +30 -0
- data/lib/fluent/test/driver/storage.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 +138 -0
- data/lib/fluent/test/input_test.rb +174 -0
- data/lib/fluent/test/log.rb +79 -0
- data/lib/fluent/test/output_test.rb +156 -0
- data/lib/fluent/test/parser_test.rb +70 -0
- data/lib/fluent/test/startup_shutdown.rb +44 -0
- data/lib/fluent/test.rb +61 -0
- data/lib/fluent/time.rb +513 -0
- data/lib/fluent/timezone.rb +171 -0
- data/lib/fluent/tls.rb +105 -0
- data/lib/fluent/unique_id.rb +39 -0
- data/lib/fluent/variable_store.rb +40 -0
- data/lib/fluent/version.rb +21 -0
- data/lib/fluent/win32api.rb +38 -0
- data/lib/fluent/winsvc.rb +130 -0
- data/templates/new_gem/.gitignore +8 -0
- data/templates/new_gem/Gemfile +3 -0
- data/templates/new_gem/README.md.erb +43 -0
- data/templates/new_gem/Rakefile +13 -0
- data/templates/new_gem/fluent-plugin.gemspec.erb +28 -0
- data/templates/new_gem/lib/fluent/plugin/filter.rb.erb +14 -0
- data/templates/new_gem/lib/fluent/plugin/formatter.rb.erb +14 -0
- data/templates/new_gem/lib/fluent/plugin/input.rb.erb +11 -0
- data/templates/new_gem/lib/fluent/plugin/output.rb.erb +11 -0
- data/templates/new_gem/lib/fluent/plugin/parser.rb.erb +15 -0
- data/templates/new_gem/lib/fluent/plugin/storage.rb.erb +40 -0
- data/templates/new_gem/test/helper.rb.erb +7 -0
- data/templates/new_gem/test/plugin/test_filter.rb.erb +18 -0
- data/templates/new_gem/test/plugin/test_formatter.rb.erb +18 -0
- data/templates/new_gem/test/plugin/test_input.rb.erb +18 -0
- data/templates/new_gem/test/plugin/test_output.rb.erb +18 -0
- data/templates/new_gem/test/plugin/test_parser.rb.erb +18 -0
- data/templates/new_gem/test/plugin/test_storage.rb.erb +18 -0
- data/templates/plugin_config_formatter/param.md-compact.erb +25 -0
- data/templates/plugin_config_formatter/param.md-table.erb +10 -0
- data/templates/plugin_config_formatter/param.md.erb +34 -0
- data/templates/plugin_config_formatter/section.md.erb +12 -0
- metadata +996 -0
|
@@ -0,0 +1,346 @@
|
|
|
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/input'
|
|
18
|
+
require 'fluent/config/error'
|
|
19
|
+
require 'fluent/plugin/parser'
|
|
20
|
+
|
|
21
|
+
require 'json'
|
|
22
|
+
|
|
23
|
+
module Fluent::Plugin
|
|
24
|
+
class SyslogInput < Input
|
|
25
|
+
Fluent::Plugin.register_input('syslog', self)
|
|
26
|
+
|
|
27
|
+
helpers :parser, :compat_parameters, :server
|
|
28
|
+
|
|
29
|
+
DEFAULT_PARSER = 'syslog'
|
|
30
|
+
SYSLOG_REGEXP = /^\<([0-9]+)\>(.*)/
|
|
31
|
+
|
|
32
|
+
FACILITY_MAP = {
|
|
33
|
+
0 => 'kern',
|
|
34
|
+
1 => 'user',
|
|
35
|
+
2 => 'mail',
|
|
36
|
+
3 => 'daemon',
|
|
37
|
+
4 => 'auth',
|
|
38
|
+
5 => 'syslog',
|
|
39
|
+
6 => 'lpr',
|
|
40
|
+
7 => 'news',
|
|
41
|
+
8 => 'uucp',
|
|
42
|
+
9 => 'cron',
|
|
43
|
+
10 => 'authpriv',
|
|
44
|
+
11 => 'ftp',
|
|
45
|
+
12 => 'ntp',
|
|
46
|
+
13 => 'audit',
|
|
47
|
+
14 => 'alert',
|
|
48
|
+
15 => 'at',
|
|
49
|
+
16 => 'local0',
|
|
50
|
+
17 => 'local1',
|
|
51
|
+
18 => 'local2',
|
|
52
|
+
19 => 'local3',
|
|
53
|
+
20 => 'local4',
|
|
54
|
+
21 => 'local5',
|
|
55
|
+
22 => 'local6',
|
|
56
|
+
23 => 'local7'
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
SEVERITY_MAP = {
|
|
60
|
+
0 => 'emerg',
|
|
61
|
+
1 => 'alert',
|
|
62
|
+
2 => 'crit',
|
|
63
|
+
3 => 'err',
|
|
64
|
+
4 => 'warn',
|
|
65
|
+
5 => 'notice',
|
|
66
|
+
6 => 'info',
|
|
67
|
+
7 => 'debug'
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
desc 'The port to listen to.'
|
|
71
|
+
config_param :port, :integer, default: 5140
|
|
72
|
+
desc 'The bind address to listen to.'
|
|
73
|
+
config_param :bind, :string, default: '0.0.0.0'
|
|
74
|
+
desc 'The prefix of the tag. The tag itself is generated by the tag prefix, facility level, and priority.'
|
|
75
|
+
config_param :tag, :string
|
|
76
|
+
desc 'The transport protocol used to receive logs.(udp, tcp)'
|
|
77
|
+
config_param :protocol_type, :enum, list: [:tcp, :udp], default: nil, deprecated: "use transport directive"
|
|
78
|
+
desc 'The message frame type.(traditional, octet_count)'
|
|
79
|
+
config_param :frame_type, :enum, list: [:traditional, :octet_count], default: :traditional
|
|
80
|
+
|
|
81
|
+
desc 'If true, add source host to event record.'
|
|
82
|
+
config_param :include_source_host, :bool, default: false, deprecated: 'use "source_hostname_key" or "source_address_key" instead.'
|
|
83
|
+
desc 'Specify key of source host when include_source_host is true.'
|
|
84
|
+
config_param :source_host_key, :string, default: 'source_host'.freeze
|
|
85
|
+
desc 'Enable the option to emit unmatched lines.'
|
|
86
|
+
config_param :emit_unmatched_lines, :bool, default: false
|
|
87
|
+
|
|
88
|
+
desc 'The field name of hostname of sender.'
|
|
89
|
+
config_param :source_hostname_key, :string, default: nil
|
|
90
|
+
desc 'Try to resolve hostname from IP addresses or not.'
|
|
91
|
+
config_param :resolve_hostname, :bool, default: nil
|
|
92
|
+
desc 'Check the remote connection is still available by sending a keepalive packet if this value is true.'
|
|
93
|
+
config_param :send_keepalive_packet, :bool, default: false
|
|
94
|
+
desc 'The field name of source address of sender.'
|
|
95
|
+
config_param :source_address_key, :string, default: nil
|
|
96
|
+
desc 'The field name of the severity.'
|
|
97
|
+
config_param :severity_key, :string, default: nil, alias: :priority_key
|
|
98
|
+
desc 'The field name of the facility.'
|
|
99
|
+
config_param :facility_key, :string, default: nil
|
|
100
|
+
|
|
101
|
+
desc "The max bytes of message. The messages exceeding this limit are dropped (UDP, TCP/TLS with traditional frame_type) or the connection is closed (TCP/TLS with octet_count frame_type)."
|
|
102
|
+
config_param :message_length_limit, :size, default: 8192
|
|
103
|
+
|
|
104
|
+
config_param :blocking_timeout, :time, default: 0.5
|
|
105
|
+
|
|
106
|
+
desc 'The delimiter value "\n"'
|
|
107
|
+
config_param :delimiter, :string, default: "\n" # syslog family add "\n" to each message
|
|
108
|
+
|
|
109
|
+
config_section :parse do
|
|
110
|
+
config_set_default :@type, DEFAULT_PARSER
|
|
111
|
+
config_param :with_priority, :bool, default: true
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
# overwrite server plugin to change default to :udp
|
|
115
|
+
config_section :transport, required: false, multi: false, init: true, param_name: :transport_config do
|
|
116
|
+
config_argument :protocol, :enum, list: [:tcp, :udp, :tls], default: :udp
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
def configure(conf)
|
|
120
|
+
compat_parameters_convert(conf, :parser)
|
|
121
|
+
|
|
122
|
+
super
|
|
123
|
+
|
|
124
|
+
if conf.has_key?('priority_key')
|
|
125
|
+
log.warn "priority_key is deprecated. Use severity_key instead"
|
|
126
|
+
end
|
|
127
|
+
|
|
128
|
+
@use_default = false
|
|
129
|
+
|
|
130
|
+
@parser = parser_create
|
|
131
|
+
@parser_parse_priority = @parser.respond_to?(:with_priority) && @parser.with_priority
|
|
132
|
+
|
|
133
|
+
if @include_source_host
|
|
134
|
+
if @source_address_key
|
|
135
|
+
raise Fluent::ConfigError, "specify either source_address_key or include_source_host"
|
|
136
|
+
end
|
|
137
|
+
@source_address_key = @source_host_key
|
|
138
|
+
end
|
|
139
|
+
if @source_hostname_key
|
|
140
|
+
if @resolve_hostname.nil?
|
|
141
|
+
@resolve_hostname = true
|
|
142
|
+
elsif !@resolve_hostname # user specifies "false" in config
|
|
143
|
+
raise Fluent::ConfigError, "resolve_hostname must be true with source_hostname_key"
|
|
144
|
+
end
|
|
145
|
+
end
|
|
146
|
+
|
|
147
|
+
@_event_loop_run_timeout = @blocking_timeout
|
|
148
|
+
|
|
149
|
+
protocol = @protocol_type || @transport_config.protocol
|
|
150
|
+
if @send_keepalive_packet && protocol == :udp
|
|
151
|
+
raise Fluent::ConfigError, "send_keepalive_packet is available for tcp/tls"
|
|
152
|
+
end
|
|
153
|
+
end
|
|
154
|
+
|
|
155
|
+
def multi_workers_ready?
|
|
156
|
+
true
|
|
157
|
+
end
|
|
158
|
+
|
|
159
|
+
def zero_downtime_restart_ready?
|
|
160
|
+
true
|
|
161
|
+
end
|
|
162
|
+
|
|
163
|
+
def start
|
|
164
|
+
super
|
|
165
|
+
|
|
166
|
+
log.info "listening syslog socket on #{@bind}:#{@port} with #{@protocol_type || @transport_config.protocol}"
|
|
167
|
+
case @protocol_type || @transport_config.protocol
|
|
168
|
+
when :udp then start_udp_server
|
|
169
|
+
when :tcp then start_tcp_server
|
|
170
|
+
when :tls then start_tcp_server(tls: true)
|
|
171
|
+
else
|
|
172
|
+
raise "BUG: invalid transport value: #{@protocol_type || @transport_config.protocol}"
|
|
173
|
+
end
|
|
174
|
+
end
|
|
175
|
+
|
|
176
|
+
def start_udp_server
|
|
177
|
+
server_create_udp(:in_syslog_udp_server, @port, bind: @bind, max_bytes: @message_length_limit, resolve_name: @resolve_hostname) do |data, sock|
|
|
178
|
+
message_handler(data.chomp, sock)
|
|
179
|
+
end
|
|
180
|
+
end
|
|
181
|
+
|
|
182
|
+
def start_tcp_server(tls: false)
|
|
183
|
+
octet_count_frame = @frame_type == :octet_count
|
|
184
|
+
|
|
185
|
+
delimiter = octet_count_frame ? " " : @delimiter
|
|
186
|
+
delimiter_size = delimiter.size
|
|
187
|
+
server_create_connection(
|
|
188
|
+
tls ? :in_syslog_tls_server : :in_syslog_tcp_server, @port,
|
|
189
|
+
bind: @bind,
|
|
190
|
+
resolve_name: @resolve_hostname,
|
|
191
|
+
send_keepalive_packet: @send_keepalive_packet
|
|
192
|
+
) do |conn|
|
|
193
|
+
discard_till_next_delimiter = false
|
|
194
|
+
conn.data do |data|
|
|
195
|
+
buffer = conn.buffer
|
|
196
|
+
buffer << data
|
|
197
|
+
pos = 0
|
|
198
|
+
if octet_count_frame
|
|
199
|
+
# Once an octet-counted stream contains an untrustworthy frame header, the stream
|
|
200
|
+
# can't be resynchronized. So close the connection instead of skipping bytes.
|
|
201
|
+
close_connection = false
|
|
202
|
+
while idx = buffer.index(delimiter, pos)
|
|
203
|
+
begin
|
|
204
|
+
num = Integer(buffer[pos..idx])
|
|
205
|
+
rescue ArgumentError
|
|
206
|
+
log.info "The message length is not a number, closing connection"
|
|
207
|
+
log.on_debug { log.debug "The message length is not a number:", head: buffer[pos, 32].dump }
|
|
208
|
+
close_connection = true
|
|
209
|
+
break
|
|
210
|
+
end
|
|
211
|
+
|
|
212
|
+
if num < 0
|
|
213
|
+
log.info "The message length is negative, closing connection:", size: num
|
|
214
|
+
close_connection = true
|
|
215
|
+
break
|
|
216
|
+
end
|
|
217
|
+
|
|
218
|
+
if num > @message_length_limit
|
|
219
|
+
log.info "The message length exceeds 'message_length_limit', closing connection:", limit: @message_length_limit, size: num
|
|
220
|
+
close_connection = true
|
|
221
|
+
break
|
|
222
|
+
end
|
|
223
|
+
|
|
224
|
+
msg = buffer[idx + delimiter_size, num]
|
|
225
|
+
if msg.size != num
|
|
226
|
+
# The frame is not fully received yet.
|
|
227
|
+
break
|
|
228
|
+
end
|
|
229
|
+
|
|
230
|
+
pos = idx + delimiter_size + num
|
|
231
|
+
message_handler(msg, conn)
|
|
232
|
+
end
|
|
233
|
+
buffer.slice!(0, pos) if pos > 0
|
|
234
|
+
|
|
235
|
+
# If the remaining buffer has no delimiter, no message length can be parsed from it.
|
|
236
|
+
# Since a valid frame header is much shorter than the limit, such a buffer never
|
|
237
|
+
# becomes a valid frame. (Note that a partially received valid frame always has a
|
|
238
|
+
# delimiter after its length, so this doesn't drop it even if it slightly exceeds
|
|
239
|
+
# the limit with its length header.)
|
|
240
|
+
if !close_connection && !buffer.index(delimiter) && buffer.bytesize > @message_length_limit
|
|
241
|
+
log.info "The buffer size exceeds 'message_length_limit', closing connection:", limit: @message_length_limit, size: buffer.bytesize
|
|
242
|
+
log.on_debug { log.debug "The buffer size exceeds 'message_length_limit':", head: buffer[...32] }
|
|
243
|
+
close_connection = true
|
|
244
|
+
end
|
|
245
|
+
|
|
246
|
+
if close_connection
|
|
247
|
+
buffer.clear
|
|
248
|
+
conn.close
|
|
249
|
+
next
|
|
250
|
+
end
|
|
251
|
+
else
|
|
252
|
+
while idx = buffer.index(delimiter, pos)
|
|
253
|
+
msg = buffer[pos...idx]
|
|
254
|
+
pos = idx + delimiter_size
|
|
255
|
+
|
|
256
|
+
if discard_till_next_delimiter
|
|
257
|
+
discard_till_next_delimiter = false
|
|
258
|
+
next
|
|
259
|
+
end
|
|
260
|
+
|
|
261
|
+
if msg.bytesize > @message_length_limit
|
|
262
|
+
log.info "The received data is larger than 'message_length_limit', dropped:", limit: @message_length_limit, size: msg.bytesize
|
|
263
|
+
log.on_debug { log.debug "The received data is larger than 'message_length_limit':", head: msg[...32] }
|
|
264
|
+
next
|
|
265
|
+
end
|
|
266
|
+
|
|
267
|
+
message_handler(msg, conn)
|
|
268
|
+
end
|
|
269
|
+
buffer.slice!(0, pos) if pos > 0
|
|
270
|
+
|
|
271
|
+
# If the buffer size exceeds the limit here, it means that the next message will
|
|
272
|
+
# definitely exceed the limit. So we should clear the buffer here. Otherwise, it will
|
|
273
|
+
# keep storing useless data until the next delimiter comes.
|
|
274
|
+
if buffer.bytesize > @message_length_limit
|
|
275
|
+
log.info "The buffer size exceeds 'message_length_limit', cleared:", limit: @message_length_limit, size: buffer.bytesize
|
|
276
|
+
log.on_debug { log.debug "The buffer size exceeds 'message_length_limit':", head: buffer[...32] }
|
|
277
|
+
buffer.clear
|
|
278
|
+
# We should discard the subsequent data until the next delimiter comes.
|
|
279
|
+
discard_till_next_delimiter = true
|
|
280
|
+
end
|
|
281
|
+
end
|
|
282
|
+
end
|
|
283
|
+
end
|
|
284
|
+
end
|
|
285
|
+
|
|
286
|
+
private
|
|
287
|
+
|
|
288
|
+
def emit_unmatched(data, sock)
|
|
289
|
+
record = {"unmatched_line" => data}
|
|
290
|
+
record[@source_address_key] = sock.remote_addr if @source_address_key
|
|
291
|
+
record[@source_hostname_key] = sock.remote_host if @source_hostname_key
|
|
292
|
+
emit("#{@tag}.unmatched", Fluent::EventTime.now, record)
|
|
293
|
+
end
|
|
294
|
+
|
|
295
|
+
def message_handler(data, sock)
|
|
296
|
+
pri = nil
|
|
297
|
+
text = data
|
|
298
|
+
unless @parser_parse_priority
|
|
299
|
+
m = SYSLOG_REGEXP.match(data)
|
|
300
|
+
unless m
|
|
301
|
+
if @emit_unmatched_lines
|
|
302
|
+
emit_unmatched(data, sock)
|
|
303
|
+
end
|
|
304
|
+
log.warn "invalid syslog message: #{data.dump}"
|
|
305
|
+
return
|
|
306
|
+
end
|
|
307
|
+
pri = m[1].to_i
|
|
308
|
+
text = m[2]
|
|
309
|
+
end
|
|
310
|
+
|
|
311
|
+
@parser.parse(text) do |time, record|
|
|
312
|
+
unless time && record
|
|
313
|
+
if @emit_unmatched_lines
|
|
314
|
+
emit_unmatched(data, sock)
|
|
315
|
+
end
|
|
316
|
+
log.warn "failed to parse message", data: data
|
|
317
|
+
return
|
|
318
|
+
end
|
|
319
|
+
|
|
320
|
+
pri ||= record.delete('pri')
|
|
321
|
+
facility = FACILITY_MAP[pri >> 3]
|
|
322
|
+
severity = SEVERITY_MAP[pri & 0b111]
|
|
323
|
+
|
|
324
|
+
record[@severity_key] = severity if @severity_key
|
|
325
|
+
record[@facility_key] = facility if @facility_key
|
|
326
|
+
record[@source_address_key] = sock.remote_addr if @source_address_key
|
|
327
|
+
record[@source_hostname_key] = sock.remote_host if @source_hostname_key
|
|
328
|
+
|
|
329
|
+
tag = "#{@tag}.#{facility}.#{severity}"
|
|
330
|
+
emit(tag, time, record)
|
|
331
|
+
end
|
|
332
|
+
rescue => e
|
|
333
|
+
if @emit_unmatched_lines
|
|
334
|
+
emit_unmatched(data, sock)
|
|
335
|
+
end
|
|
336
|
+
log.error "invalid input", data: data, error: e
|
|
337
|
+
log.error_backtrace
|
|
338
|
+
end
|
|
339
|
+
|
|
340
|
+
def emit(tag, time, record)
|
|
341
|
+
router.emit(tag, time, record)
|
|
342
|
+
rescue => e
|
|
343
|
+
log.error "syslog failed to emit", error: e, tag: tag, record: JSON.generate(record)
|
|
344
|
+
end
|
|
345
|
+
end
|
|
346
|
+
end
|
|
@@ -0,0 +1,111 @@
|
|
|
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/input'
|
|
18
|
+
require 'fluent/clock'
|
|
19
|
+
|
|
20
|
+
module Fluent::Plugin
|
|
21
|
+
class TailInput < Fluent::Plugin::Input
|
|
22
|
+
module Compatibility
|
|
23
|
+
# Keep these methods as compatibility entry points for plugins which
|
|
24
|
+
# inherit TailInput and override line processing methods. TailInput is a
|
|
25
|
+
# built-in plugin, not a public inheritance API, and these methods may be
|
|
26
|
+
# removed in a future release.
|
|
27
|
+
def flush_buffer(tw, buf)
|
|
28
|
+
@line_feeder.flush_buffer(tw, buf)
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
# Feeds lines through the per-file feed, or through LineFeeder for watchers
|
|
32
|
+
# created by plugins using the deprecated LineBufferTimerFlusher.
|
|
33
|
+
#
|
|
34
|
+
# @return true if no error or unrecoverable error happens in emit action. false if got BufferOverflowError
|
|
35
|
+
def receive_lines(lines, tail_watcher)
|
|
36
|
+
return async_receive_lines(lines, tail_watcher) if @worker_pool
|
|
37
|
+
|
|
38
|
+
file_feed = tail_watcher.file_feed
|
|
39
|
+
return file_feed.feed_lines(lines, tail_watcher) if file_feed.respond_to?(:feed_lines)
|
|
40
|
+
|
|
41
|
+
@line_feeder.feed_lines(lines, tail_watcher)
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def convert_line_to_event(line, es, tail_watcher)
|
|
45
|
+
@line_feeder.convert_line_to_event(line, es, tail_watcher)
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
def parse_singleline(lines, tail_watcher)
|
|
49
|
+
@line_feeder.parse_singleline(lines, tail_watcher)
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
# TailInput's default #parse_multilines path starts the flush timer before
|
|
53
|
+
# parsing. An override that skips super must call
|
|
54
|
+
# tail_watcher.line_buffer_timer_flusher.reset_timer when needed.
|
|
55
|
+
def parse_multilines(lines, tail_watcher)
|
|
56
|
+
@line_feeder.parse_multilines(lines, tail_watcher)
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
class TailWatcher
|
|
61
|
+
# The object which keeps the line buffer of the multiline mode of the file:
|
|
62
|
+
# the FileFeed built by LineFeeder#new_file_feed, or the deprecated
|
|
63
|
+
# LineBufferTimerFlusher which a plugin overriding TailInput#setup_watcher
|
|
64
|
+
# passes to keep working without changes.
|
|
65
|
+
def line_buffer_timer_flusher
|
|
66
|
+
@file_feed
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
# Kept for compatibility with the plugins which build it by themselves and
|
|
70
|
+
# pass it to TailWatcher in the overridden TailInput#setup_watcher.
|
|
71
|
+
# LineFeeder#feed_lines feeds the lines of a watcher which keeps it, and
|
|
72
|
+
# LineFeeder::FileFeed built by LineFeeder#new_file_feed replaces it.
|
|
73
|
+
class LineBufferTimerFlusher
|
|
74
|
+
attr_accessor :line_buffer
|
|
75
|
+
|
|
76
|
+
def initialize(log, flush_interval, &flush_method)
|
|
77
|
+
@log = log
|
|
78
|
+
@flush_interval = flush_interval
|
|
79
|
+
@flush_method = flush_method
|
|
80
|
+
@start = nil
|
|
81
|
+
@line_buffer = nil
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
def on_notify(tw)
|
|
85
|
+
unless @start && @flush_method
|
|
86
|
+
return
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
if Fluent::Clock.now - @start >= @flush_interval
|
|
90
|
+
@flush_method.call(tw, @line_buffer) if @line_buffer
|
|
91
|
+
@line_buffer = nil
|
|
92
|
+
@start = nil
|
|
93
|
+
end
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
def close(tw)
|
|
97
|
+
return unless @line_buffer
|
|
98
|
+
|
|
99
|
+
@flush_method.call(tw, @line_buffer)
|
|
100
|
+
@line_buffer = nil
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
def reset_timer
|
|
104
|
+
return unless @flush_interval
|
|
105
|
+
|
|
106
|
+
@start = Fluent::Clock.now
|
|
107
|
+
end
|
|
108
|
+
end
|
|
109
|
+
end
|
|
110
|
+
end
|
|
111
|
+
end
|