fluentd 0.12.40 → 1.6.2
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 +5 -5
- data/.github/ISSUE_TEMPLATE/bug_report.md +39 -0
- data/.github/ISSUE_TEMPLATE/feature_request.md +23 -0
- data/.github/ISSUE_TEMPLATE.md +17 -0
- data/.github/PULL_REQUEST_TEMPLATE.md +13 -0
- data/.gitignore +5 -0
- data/.gitlab/cicd-template.yaml +10 -0
- data/.gitlab-ci.yml +147 -0
- data/.travis.yml +56 -20
- data/ADOPTERS.md +5 -0
- data/CHANGELOG.md +1369 -0
- data/CONTRIBUTING.md +16 -5
- data/GOVERNANCE.md +55 -0
- data/Gemfile +5 -0
- data/GithubWorkflow.md +78 -0
- data/LICENSE +202 -0
- data/MAINTAINERS.md +7 -0
- data/README.md +23 -11
- data/Rakefile +48 -2
- data/Vagrantfile +17 -0
- data/appveyor.yml +37 -0
- data/bin/fluent-binlog-reader +7 -0
- data/bin/fluent-ca-generate +6 -0
- data/bin/fluent-plugin-config-format +5 -0
- data/bin/fluent-plugin-generate +5 -0
- data/bin/fluentd +3 -0
- data/code-of-conduct.md +3 -0
- data/example/copy_roundrobin.conf +39 -0
- data/example/counter.conf +18 -0
- data/example/in_dummy_blocks.conf +17 -0
- data/example/in_dummy_with_compression.conf +23 -0
- data/example/in_forward.conf +7 -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 +3 -1
- data/example/in_out_forward.conf +17 -0
- data/example/logevents.conf +25 -0
- data/example/multi_filters.conf +61 -0
- data/example/out_exec_filter.conf +42 -0
- data/example/out_forward.conf +13 -13
- 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_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/secondary_file.conf +42 -0
- data/example/suppress_config_dump.conf +7 -0
- data/example/worker_section.conf +36 -0
- data/fluent.conf +29 -0
- data/fluentd.gemspec +21 -11
- data/lib/fluent/agent.rb +67 -90
- data/lib/fluent/clock.rb +62 -0
- data/lib/fluent/command/binlog_reader.rb +244 -0
- data/lib/fluent/command/ca_generate.rb +181 -0
- data/lib/fluent/command/cat.rb +42 -18
- data/lib/fluent/command/debug.rb +12 -10
- data/lib/fluent/command/fluentd.rb +153 -5
- data/lib/fluent/command/plugin_config_formatter.rb +292 -0
- data/lib/fluent/command/plugin_generator.rb +324 -0
- data/lib/fluent/compat/call_super_mixin.rb +67 -0
- data/lib/fluent/compat/detach_process_mixin.rb +33 -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 +718 -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/configure_proxy.rb +210 -62
- data/lib/fluent/config/dsl.rb +12 -5
- data/lib/fluent/config/element.rb +107 -9
- data/lib/fluent/config/literal_parser.rb +9 -3
- data/lib/fluent/config/parser.rb +4 -4
- data/lib/fluent/config/section.rb +51 -14
- data/lib/fluent/config/types.rb +28 -13
- data/lib/fluent/config/v1_parser.rb +3 -5
- data/lib/fluent/config.rb +23 -20
- data/lib/fluent/configurable.rb +79 -21
- data/lib/fluent/counter/base_socket.rb +46 -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 +15 -0
- data/lib/fluent/engine.rb +102 -65
- data/lib/fluent/env.rb +7 -3
- data/lib/fluent/error.rb +30 -0
- data/lib/fluent/event.rb +197 -21
- data/lib/fluent/event_router.rb +93 -10
- data/lib/fluent/filter.rb +2 -50
- data/lib/fluent/formatter.rb +4 -293
- data/lib/fluent/input.rb +2 -32
- data/lib/fluent/label.rb +10 -2
- data/lib/fluent/load.rb +3 -3
- data/lib/fluent/log.rb +348 -81
- data/lib/fluent/match.rb +37 -36
- data/lib/fluent/mixin.rb +12 -176
- data/lib/fluent/msgpack_factory.rb +62 -0
- data/lib/fluent/output.rb +10 -612
- data/lib/fluent/output_chain.rb +23 -0
- data/lib/fluent/parser.rb +4 -800
- data/lib/fluent/plugin/bare_output.rb +63 -0
- data/lib/fluent/plugin/base.rb +192 -0
- data/lib/fluent/plugin/buf_file.rb +128 -174
- data/lib/fluent/plugin/buf_memory.rb +9 -92
- data/lib/fluent/plugin/buffer/chunk.rb +221 -0
- data/lib/fluent/plugin/buffer/file_chunk.rb +383 -0
- data/lib/fluent/plugin/buffer/memory_chunk.rb +90 -0
- data/lib/fluent/plugin/buffer.rb +779 -0
- data/lib/fluent/plugin/compressable.rb +92 -0
- data/lib/fluent/plugin/exec_util.rb +3 -108
- data/lib/fluent/plugin/file_util.rb +4 -34
- data/lib/fluent/plugin/file_wrapper.rb +120 -0
- data/lib/fluent/plugin/filter.rb +93 -0
- data/lib/fluent/plugin/filter_grep.rb +117 -34
- data/lib/fluent/plugin/filter_parser.rb +85 -62
- data/lib/fluent/plugin/filter_record_transformer.rb +27 -39
- data/lib/fluent/plugin/filter_stdout.rb +15 -12
- data/lib/fluent/plugin/formatter.rb +50 -0
- data/lib/fluent/plugin/formatter_csv.rb +52 -0
- data/lib/fluent/plugin/formatter_hash.rb +33 -0
- data/lib/fluent/plugin/formatter_json.rb +55 -0
- data/lib/fluent/plugin/formatter_ltsv.rb +42 -0
- data/lib/fluent/plugin/formatter_msgpack.rb +33 -0
- data/lib/fluent/plugin/formatter_out_file.rb +51 -0
- data/lib/fluent/plugin/formatter_single_value.rb +34 -0
- data/lib/fluent/plugin/formatter_stdout.rb +76 -0
- data/lib/fluent/plugin/formatter_tsv.rb +38 -0
- data/lib/fluent/plugin/in_debug_agent.rb +17 -6
- data/lib/fluent/plugin/in_dummy.rb +47 -20
- data/lib/fluent/plugin/in_exec.rb +55 -123
- data/lib/fluent/plugin/in_forward.rb +299 -216
- data/lib/fluent/plugin/in_gc_stat.rb +14 -36
- data/lib/fluent/plugin/in_http.rb +204 -91
- data/lib/fluent/plugin/in_monitor_agent.rb +186 -258
- data/lib/fluent/plugin/in_object_space.rb +13 -41
- data/lib/fluent/plugin/in_syslog.rb +112 -134
- data/lib/fluent/plugin/in_tail.rb +408 -745
- data/lib/fluent/plugin/in_tcp.rb +66 -9
- data/lib/fluent/plugin/in_udp.rb +60 -11
- data/lib/fluent/plugin/{in_stream.rb → in_unix.rb} +8 -4
- data/lib/fluent/plugin/input.rb +37 -0
- data/lib/fluent/plugin/multi_output.rb +158 -0
- data/lib/fluent/plugin/out_copy.rb +23 -35
- data/lib/fluent/plugin/out_exec.rb +67 -70
- data/lib/fluent/plugin/out_exec_filter.rb +204 -271
- data/lib/fluent/plugin/out_file.rb +267 -73
- data/lib/fluent/plugin/out_forward.rb +854 -325
- data/lib/fluent/plugin/out_null.rb +42 -9
- data/lib/fluent/plugin/out_relabel.rb +9 -5
- data/lib/fluent/plugin/out_roundrobin.rb +18 -37
- data/lib/fluent/plugin/out_secondary_file.rb +133 -0
- data/lib/fluent/plugin/out_stdout.rb +43 -10
- data/lib/fluent/plugin/out_stream.rb +7 -2
- data/lib/fluent/plugin/output.rb +1498 -0
- data/lib/fluent/plugin/owned_by_mixin.rb +42 -0
- data/lib/fluent/plugin/parser.rb +191 -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 +39 -0
- data/lib/fluent/plugin/parser_json.rb +94 -0
- data/lib/fluent/plugin/parser_ltsv.rb +49 -0
- data/lib/fluent/plugin/parser_msgpack.rb +50 -0
- data/lib/fluent/plugin/parser_multiline.rb +106 -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 +142 -0
- data/lib/fluent/plugin/parser_tsv.rb +42 -0
- data/lib/fluent/plugin/socket_util.rb +3 -143
- data/lib/fluent/plugin/storage.rb +84 -0
- data/lib/fluent/plugin/storage_local.rb +164 -0
- data/lib/fluent/plugin/string_util.rb +3 -15
- data/lib/fluent/plugin.rb +122 -121
- data/lib/fluent/plugin_helper/cert_option.rb +178 -0
- data/lib/fluent/plugin_helper/child_process.rb +364 -0
- data/lib/fluent/plugin_helper/compat_parameters.rb +333 -0
- data/lib/fluent/plugin_helper/counter.rb +51 -0
- data/lib/fluent/plugin_helper/event_emitter.rb +93 -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 +79 -0
- data/lib/fluent/plugin_helper/http_server/compat/server.rb +81 -0
- data/lib/fluent/plugin_helper/http_server/compat/webrick_handler.rb +58 -0
- data/lib/fluent/plugin_helper/http_server/methods.rb +35 -0
- data/lib/fluent/plugin_helper/http_server/request.rb +42 -0
- data/lib/fluent/plugin_helper/http_server/router.rb +54 -0
- data/lib/fluent/plugin_helper/http_server/server.rb +87 -0
- data/lib/fluent/plugin_helper/http_server.rb +76 -0
- data/lib/fluent/plugin_helper/inject.rb +151 -0
- data/lib/fluent/plugin_helper/parser.rb +147 -0
- data/lib/fluent/plugin_helper/record_accessor.rb +210 -0
- data/lib/fluent/plugin_helper/retry_state.rb +205 -0
- data/lib/fluent/plugin_helper/server.rb +807 -0
- data/lib/fluent/plugin_helper/socket.rb +250 -0
- data/lib/fluent/plugin_helper/socket_option.rb +80 -0
- data/lib/fluent/plugin_helper/storage.rb +349 -0
- data/lib/fluent/plugin_helper/thread.rb +179 -0
- data/lib/fluent/plugin_helper/timer.rb +92 -0
- data/lib/fluent/plugin_helper.rb +73 -0
- data/lib/fluent/plugin_id.rb +80 -0
- data/lib/fluent/process.rb +3 -489
- data/lib/fluent/registry.rb +52 -10
- data/lib/fluent/root_agent.rb +204 -42
- data/lib/fluent/supervisor.rb +597 -359
- data/lib/fluent/system_config.rb +131 -42
- data/lib/fluent/test/base.rb +6 -54
- data/lib/fluent/test/driver/base.rb +224 -0
- data/lib/fluent/test/driver/base_owned.rb +70 -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 +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 +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/test_event_router.rb +45 -0
- data/lib/fluent/test/filter_test.rb +0 -1
- data/lib/fluent/test/formatter_test.rb +4 -1
- data/lib/fluent/test/helpers.rb +58 -10
- data/lib/fluent/test/input_test.rb +27 -19
- data/lib/fluent/test/log.rb +79 -0
- data/lib/fluent/test/output_test.rb +28 -39
- data/lib/fluent/test/parser_test.rb +3 -1
- data/lib/fluent/test/startup_shutdown.rb +46 -0
- data/lib/fluent/test.rb +33 -1
- data/lib/fluent/time.rb +450 -1
- data/lib/fluent/timezone.rb +27 -3
- data/lib/fluent/{status.rb → unique_id.rb} +15 -24
- data/lib/fluent/version.rb +1 -1
- data/lib/fluent/winsvc.rb +85 -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 +27 -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/test/helper.rb.erb +8 -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/plugin_config_formatter/param.md-compact.erb +25 -0
- data/templates/plugin_config_formatter/param.md.erb +34 -0
- data/templates/plugin_config_formatter/section.md.erb +12 -0
- data/test/command/test_binlog_reader.rb +346 -0
- data/test/command/test_ca_generate.rb +70 -0
- data/test/command/test_fluentd.rb +901 -0
- data/test/command/test_plugin_config_formatter.rb +276 -0
- data/test/command/test_plugin_generator.rb +92 -0
- data/test/compat/test_calls_super.rb +166 -0
- data/test/compat/test_parser.rb +92 -0
- data/test/config/test_config_parser.rb +126 -2
- data/test/config/test_configurable.rb +946 -187
- data/test/config/test_configure_proxy.rb +424 -74
- data/test/config/test_dsl.rb +11 -11
- data/test/config/test_element.rb +500 -0
- data/test/config/test_literal_parser.rb +8 -0
- data/test/config/test_plugin_configuration.rb +56 -0
- data/test/config/test_section.rb +79 -7
- data/test/config/test_system_config.rb +122 -35
- data/test/config/test_types.rb +38 -0
- data/test/counter/test_client.rb +559 -0
- data/test/counter/test_error.rb +44 -0
- data/test/counter/test_mutex_hash.rb +179 -0
- data/test/counter/test_server.rb +589 -0
- data/test/counter/test_store.rb +258 -0
- data/test/counter/test_validator.rb +137 -0
- data/test/helper.rb +89 -6
- data/test/helpers/fuzzy_assert.rb +89 -0
- data/test/plugin/test_bare_output.rb +118 -0
- data/test/plugin/test_base.rb +115 -0
- data/test/plugin/test_buf_file.rb +823 -460
- data/test/plugin/test_buf_memory.rb +32 -194
- data/test/plugin/test_buffer.rb +1233 -0
- data/test/plugin/test_buffer_chunk.rb +198 -0
- data/test/plugin/test_buffer_file_chunk.rb +844 -0
- data/test/plugin/test_buffer_memory_chunk.rb +338 -0
- data/test/plugin/test_compressable.rb +84 -0
- data/test/plugin/test_filter.rb +357 -0
- data/test/plugin/test_filter_grep.rb +540 -29
- data/test/plugin/test_filter_parser.rb +439 -452
- data/test/plugin/test_filter_record_transformer.rb +123 -166
- data/test/plugin/test_filter_stdout.rb +160 -72
- data/test/plugin/test_formatter_csv.rb +111 -0
- data/test/plugin/test_formatter_hash.rb +35 -0
- data/test/plugin/test_formatter_json.rb +51 -0
- data/test/plugin/test_formatter_ltsv.rb +62 -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_formatter_tsv.rb +68 -0
- data/test/plugin/test_in_debug_agent.rb +24 -1
- data/test/plugin/test_in_dummy.rb +111 -18
- data/test/plugin/test_in_exec.rb +200 -113
- data/test/plugin/test_in_forward.rb +990 -387
- data/test/plugin/test_in_gc_stat.rb +10 -8
- data/test/plugin/test_in_http.rb +600 -224
- data/test/plugin/test_in_monitor_agent.rb +690 -0
- data/test/plugin/test_in_object_space.rb +24 -8
- data/test/plugin/test_in_syslog.rb +154 -215
- data/test/plugin/test_in_tail.rb +1006 -707
- data/test/plugin/test_in_tcp.rb +125 -48
- data/test/plugin/test_in_udp.rb +204 -63
- data/test/plugin/{test_in_stream.rb → test_in_unix.rb} +14 -13
- data/test/plugin/test_input.rb +126 -0
- data/test/plugin/test_metadata.rb +89 -0
- data/test/plugin/test_multi_output.rb +180 -0
- data/test/plugin/test_out_copy.rb +117 -112
- data/test/plugin/test_out_exec.rb +258 -53
- data/test/plugin/test_out_exec_filter.rb +538 -115
- data/test/plugin/test_out_file.rb +865 -178
- data/test/plugin/test_out_forward.rb +998 -210
- data/test/plugin/test_out_null.rb +105 -0
- data/test/plugin/test_out_relabel.rb +28 -0
- data/test/plugin/test_out_roundrobin.rb +36 -29
- data/test/plugin/test_out_secondary_file.rb +458 -0
- data/test/plugin/test_out_stdout.rb +135 -37
- data/test/plugin/test_out_stream.rb +18 -0
- data/test/plugin/test_output.rb +984 -0
- data/test/plugin/test_output_as_buffered.rb +2021 -0
- data/test/plugin/test_output_as_buffered_backup.rb +312 -0
- data/test/plugin/test_output_as_buffered_compress.rb +165 -0
- data/test/plugin/test_output_as_buffered_overflow.rb +250 -0
- data/test/plugin/test_output_as_buffered_retries.rb +911 -0
- data/test/plugin/test_output_as_buffered_secondary.rb +874 -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.rb +359 -0
- data/test/plugin/test_parser_apache.rb +42 -0
- data/test/plugin/test_parser_apache2.rb +47 -0
- data/test/plugin/test_parser_apache_error.rb +45 -0
- data/test/plugin/test_parser_csv.rb +103 -0
- data/test/plugin/test_parser_json.rb +138 -0
- data/test/plugin/test_parser_labeled_tsv.rb +145 -0
- data/test/plugin/test_parser_multiline.rb +100 -0
- data/test/plugin/test_parser_nginx.rb +88 -0
- data/test/plugin/test_parser_none.rb +52 -0
- data/test/plugin/test_parser_regexp.rb +289 -0
- data/test/plugin/test_parser_syslog.rb +441 -0
- data/test/plugin/test_parser_tsv.rb +122 -0
- data/test/plugin/test_storage.rb +167 -0
- data/test/plugin/test_storage_local.rb +335 -0
- data/test/plugin_helper/data/cert/cert-key.pem +27 -0
- data/test/plugin_helper/data/cert/cert-with-no-newline.pem +19 -0
- data/test/plugin_helper/data/cert/cert.pem +19 -0
- data/test/plugin_helper/http_server/test_app.rb +65 -0
- data/test/plugin_helper/http_server/test_route.rb +32 -0
- data/test/plugin_helper/test_cert_option.rb +16 -0
- data/test/plugin_helper/test_child_process.rb +794 -0
- data/test/plugin_helper/test_compat_parameters.rb +353 -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_extract.rb +194 -0
- data/test/plugin_helper/test_formatter.rb +255 -0
- data/test/plugin_helper/test_http_server_helper.rb +205 -0
- data/test/plugin_helper/test_inject.rb +519 -0
- data/test/plugin_helper/test_parser.rb +264 -0
- data/test/plugin_helper/test_record_accessor.rb +197 -0
- data/test/plugin_helper/test_retry_state.rb +442 -0
- data/test/plugin_helper/test_server.rb +1714 -0
- data/test/plugin_helper/test_storage.rb +542 -0
- data/test/plugin_helper/test_thread.rb +164 -0
- data/test/plugin_helper/test_timer.rb +132 -0
- data/test/scripts/exec_script.rb +0 -6
- data/test/scripts/fluent/plugin/formatter1/formatter_test1.rb +7 -0
- data/test/scripts/fluent/plugin/formatter2/formatter_test2.rb +7 -0
- data/test/scripts/fluent/plugin/out_test.rb +23 -15
- data/test/scripts/fluent/plugin/out_test2.rb +80 -0
- data/test/test_clock.rb +164 -0
- data/test/test_config.rb +16 -7
- data/test/test_configdsl.rb +2 -2
- data/test/test_event.rb +360 -13
- data/test/test_event_router.rb +108 -11
- data/test/test_event_time.rb +199 -0
- data/test/test_filter.rb +48 -6
- data/test/test_formatter.rb +11 -391
- data/test/test_input.rb +1 -1
- data/test/test_log.rb +591 -31
- data/test/test_mixin.rb +1 -1
- data/test/test_output.rb +121 -185
- data/test/test_plugin.rb +251 -0
- data/test/test_plugin_classes.rb +177 -10
- data/test/test_plugin_helper.rb +81 -0
- data/test/test_plugin_id.rb +101 -0
- data/test/test_process.rb +8 -42
- data/test/test_root_agent.rb +766 -21
- data/test/test_supervisor.rb +481 -0
- data/test/test_test_drivers.rb +135 -0
- data/test/test_time_formatter.rb +282 -0
- data/test/test_time_parser.rb +231 -0
- data/test/test_unique_id.rb +47 -0
- metadata +454 -60
- data/COPYING +0 -14
- data/ChangeLog +0 -666
- data/lib/fluent/buffer.rb +0 -365
- data/lib/fluent/plugin/in_status.rb +0 -76
- data/test/plugin/test_in_status.rb +0 -38
- data/test/test_buffer.rb +0 -624
- data/test/test_parser.rb +0 -1305
data/lib/fluent/root_agent.rb
CHANGED
@@ -18,10 +18,10 @@ require 'delegate'
|
|
18
18
|
|
19
19
|
require 'fluent/config/error'
|
20
20
|
require 'fluent/agent'
|
21
|
-
require 'fluent/engine'
|
22
21
|
require 'fluent/label'
|
23
22
|
require 'fluent/plugin'
|
24
23
|
require 'fluent/system_config'
|
24
|
+
require 'fluent/time'
|
25
25
|
|
26
26
|
module Fluent
|
27
27
|
#
|
@@ -47,14 +47,14 @@ module Fluent
|
|
47
47
|
class RootAgent < Agent
|
48
48
|
ERROR_LABEL = "@ERROR".freeze # @ERROR is built-in error label
|
49
49
|
|
50
|
-
def initialize(system_config
|
51
|
-
super
|
50
|
+
def initialize(log:, system_config: SystemConfig.new)
|
51
|
+
super(log: log)
|
52
52
|
|
53
53
|
@labels = {}
|
54
54
|
@inputs = []
|
55
|
-
@started_inputs = []
|
56
55
|
@suppress_emit_error_log_interval = 0
|
57
56
|
@next_emit_error_log_time = nil
|
57
|
+
@without_source = false
|
58
58
|
|
59
59
|
suppress_interval(system_config.emit_error_log_interval) unless system_config.emit_error_log_interval.nil?
|
60
60
|
@without_source = system_config.without_source unless system_config.without_source.nil?
|
@@ -64,11 +64,75 @@ module Fluent
|
|
64
64
|
attr_reader :labels
|
65
65
|
|
66
66
|
def configure(conf)
|
67
|
+
used_worker_ids = []
|
68
|
+
available_worker_ids = (0..Fluent::Engine.system_config.workers - 1).to_a
|
69
|
+
# initialize <worker> elements
|
70
|
+
conf.elements(name: 'worker').each do |e|
|
71
|
+
target_worker_id_str = e.arg
|
72
|
+
if target_worker_id_str.empty?
|
73
|
+
raise Fluent::ConfigError, "Missing worker id on <worker> directive"
|
74
|
+
end
|
75
|
+
|
76
|
+
target_worker_ids = target_worker_id_str.split("-")
|
77
|
+
if target_worker_ids.size == 2
|
78
|
+
first_worker_id = target_worker_ids.first.to_i
|
79
|
+
last_worker_id = target_worker_ids.last.to_i
|
80
|
+
if first_worker_id > last_worker_id
|
81
|
+
raise Fluent::ConfigError, "greater first_worker_id<#{first_worker_id}> than last_worker_id<#{last_worker_id}> specified by <worker> directive is not allowed. Available multi worker assign syntax is <smaller_worker_id>-<greater_worker_id>"
|
82
|
+
end
|
83
|
+
target_worker_ids = []
|
84
|
+
first_worker_id.step(last_worker_id, 1) do |worker_id|
|
85
|
+
target_worker_id = worker_id.to_i
|
86
|
+
target_worker_ids << target_worker_id
|
87
|
+
|
88
|
+
if target_worker_id < 0 || target_worker_id > (Fluent::Engine.system_config.workers - 1)
|
89
|
+
raise Fluent::ConfigError, "worker id #{target_worker_id} specified by <worker> directive is not allowed. Available worker id is between 0 and #{(Fluent::Engine.system_config.workers - 1)}"
|
90
|
+
end
|
91
|
+
available_worker_ids.delete(target_worker_id) if available_worker_ids.include?(target_worker_id)
|
92
|
+
if used_worker_ids.include?(target_worker_id) && !Fluent::Engine.dry_run_mode
|
93
|
+
raise Fluent::ConfigError, "specified worker_id<#{worker_id}> collisions is detected on <worker> directive. Available worker id(s): #{available_worker_ids}"
|
94
|
+
end
|
95
|
+
used_worker_ids << target_worker_id
|
96
|
+
|
97
|
+
e.elements.each do |elem|
|
98
|
+
unless ['source', 'match', 'filter', 'label'].include?(elem.name)
|
99
|
+
raise Fluent::ConfigError, "<worker> section cannot have <#{elem.name}> directive"
|
100
|
+
end
|
101
|
+
end
|
102
|
+
|
103
|
+
# On dry_run mode, all worker sections have to be configured on supervisor (recognized as worker_id = 0).
|
104
|
+
target_worker_ids = [0] if Fluent::Engine.dry_run_mode
|
105
|
+
|
106
|
+
unless target_worker_ids.empty?
|
107
|
+
e.set_target_worker_ids(target_worker_ids.uniq)
|
108
|
+
end
|
109
|
+
end
|
110
|
+
else
|
111
|
+
target_worker_id = target_worker_id_str.to_i
|
112
|
+
if target_worker_id < 0 || target_worker_id > (Fluent::Engine.system_config.workers - 1)
|
113
|
+
raise Fluent::ConfigError, "worker id #{target_worker_id} specified by <worker> directive is not allowed. Available worker id is between 0 and #{(Fluent::Engine.system_config.workers - 1)}"
|
114
|
+
end
|
115
|
+
|
116
|
+
## On dry_run mode, all worker sections have to be configured on supervisor (recognized as worker_id = 0).
|
117
|
+
target_worker_id = 0 if Fluent::Engine.dry_run_mode
|
118
|
+
|
119
|
+
e.elements.each do |elem|
|
120
|
+
unless ['source', 'match', 'filter', 'label'].include?(elem.name)
|
121
|
+
raise Fluent::ConfigError, "<worker> section cannot have <#{elem.name}> directive"
|
122
|
+
end
|
123
|
+
elem.set_target_worker_id(target_worker_id)
|
124
|
+
end
|
125
|
+
end
|
126
|
+
conf += e
|
127
|
+
end
|
128
|
+
conf.elements.delete_if{|e| e.name == 'worker'}
|
129
|
+
|
67
130
|
error_label_config = nil
|
68
131
|
|
69
132
|
# initialize <label> elements before configuring all plugins to avoid 'label not found' in input, filter and output.
|
70
133
|
label_configs = {}
|
71
|
-
conf.elements
|
134
|
+
conf.elements(name: 'label').each { |e|
|
135
|
+
next if e.for_another_worker?
|
72
136
|
name = e.arg
|
73
137
|
raise ConfigError, "Missing symbol argument on <label> directive" if name.empty?
|
74
138
|
|
@@ -87,10 +151,11 @@ module Fluent
|
|
87
151
|
|
88
152
|
# initialize <source> elements
|
89
153
|
if @without_source
|
90
|
-
log.info "'--without-source' is applied. Ignore <source> sections"
|
154
|
+
log.info :worker0, "'--without-source' is applied. Ignore <source> sections"
|
91
155
|
else
|
92
|
-
conf.elements
|
93
|
-
|
156
|
+
conf.elements(name: 'source').each { |e|
|
157
|
+
next if e.for_another_worker?
|
158
|
+
type = e['@type']
|
94
159
|
raise ConfigError, "Missing '@type' parameter on <source> directive" unless type
|
95
160
|
add_source(type, e)
|
96
161
|
}
|
@@ -104,43 +169,138 @@ module Fluent
|
|
104
169
|
@error_collector = error_label.event_router
|
105
170
|
end
|
106
171
|
|
107
|
-
def
|
108
|
-
|
172
|
+
def lifecycle(desc: false, kind_callback: nil)
|
173
|
+
kind_or_label_list = if desc
|
174
|
+
[:output, :filter, @labels.values.reverse, :output_with_router, :input].flatten
|
175
|
+
else
|
176
|
+
[:input, :output_with_router, @labels.values, :filter, :output].flatten
|
177
|
+
end
|
178
|
+
kind_or_label_list.each do |kind|
|
179
|
+
if kind.respond_to?(:lifecycle)
|
180
|
+
label = kind
|
181
|
+
label.lifecycle(desc: desc) do |plugin, display_kind|
|
182
|
+
yield plugin, display_kind
|
183
|
+
end
|
184
|
+
else
|
185
|
+
list = if desc
|
186
|
+
lifecycle_control_list[kind].reverse
|
187
|
+
else
|
188
|
+
lifecycle_control_list[kind]
|
189
|
+
end
|
190
|
+
display_kind = (kind == :output_with_router ? :output : kind)
|
191
|
+
list.each do |instance|
|
192
|
+
yield instance, display_kind
|
193
|
+
end
|
194
|
+
end
|
195
|
+
if kind_callback
|
196
|
+
kind_callback.call
|
197
|
+
end
|
198
|
+
end
|
199
|
+
end
|
109
200
|
|
110
|
-
|
111
|
-
|
112
|
-
|
201
|
+
def start
|
202
|
+
lifecycle(desc: true) do |i| # instance
|
203
|
+
i.start unless i.started?
|
204
|
+
# Input#start sometimes emits lots of evetns with in_tail/`read_from_head true` case
|
205
|
+
# and it causes deadlock for small buffer/queue output. To avoid such problem,
|
206
|
+
# buffer related output threads should be run before `Input#start`.
|
207
|
+
# This is why after_start should be called immediately after start call.
|
208
|
+
# This depends on `desc: true` because calling plugin order of `desc: true` is
|
209
|
+
# Output, Filter, Label, Output with Router, then Input.
|
210
|
+
i.after_start unless i.after_started?
|
211
|
+
end
|
212
|
+
end
|
113
213
|
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
214
|
+
def flush!
|
215
|
+
log.info "flushing all buffer forcedly"
|
216
|
+
flushing_threads = []
|
217
|
+
lifecycle(desc: true) do |instance|
|
218
|
+
if instance.respond_to?(:force_flush)
|
219
|
+
t = Thread.new do
|
220
|
+
Thread.current.abort_on_exception = true
|
221
|
+
begin
|
222
|
+
instance.force_flush
|
223
|
+
rescue => e
|
224
|
+
log.warn "unexpected error while flushing buffer", plugin: instance.class, plugin_id: instance.plugin_id, error: e
|
225
|
+
log.warn_backtrace
|
226
|
+
end
|
227
|
+
end
|
228
|
+
flushing_threads << t
|
229
|
+
end
|
230
|
+
end
|
231
|
+
flushing_threads.each{|t| t.join }
|
118
232
|
end
|
119
233
|
|
120
|
-
def shutdown
|
121
|
-
#
|
122
|
-
|
123
|
-
|
234
|
+
def shutdown # Fluentd's shutdown sequence is stop, before_shutdown, shutdown, after_shutdown, close, terminate for plugins
|
235
|
+
# These method callers does `rescue Exception` to call methods of shutdown sequence as far as possible
|
236
|
+
# if plugin methods does something like infinite recursive call, `exit`, unregistering signal handlers or others.
|
237
|
+
# Plugins should be separated and be in sandbox to protect data in each plugins/buffers.
|
238
|
+
|
239
|
+
lifecycle_safe_sequence = ->(method, checker) {
|
240
|
+
lifecycle do |instance, kind|
|
124
241
|
begin
|
125
|
-
log.
|
126
|
-
|
127
|
-
rescue => e
|
128
|
-
log.warn "unexpected error while
|
242
|
+
log.debug "calling #{method} on #{kind} plugin", type: Plugin.lookup_type_from_class(instance.class), plugin_id: instance.plugin_id
|
243
|
+
instance.send(method) unless instance.send(checker)
|
244
|
+
rescue Exception => e
|
245
|
+
log.warn "unexpected error while calling #{method} on #{kind} plugin", plugin: instance.class, plugin_id: instance.plugin_id, error: e
|
129
246
|
log.warn_backtrace
|
130
247
|
end
|
131
248
|
end
|
132
|
-
}
|
249
|
+
}
|
133
250
|
|
134
|
-
|
135
|
-
|
251
|
+
lifecycle_unsafe_sequence = ->(method, checker) {
|
252
|
+
operation = case method
|
253
|
+
when :shutdown then "shutting down"
|
254
|
+
when :close then "closing"
|
255
|
+
else
|
256
|
+
raise "BUG: unknown method name '#{method}'"
|
257
|
+
end
|
258
|
+
operation_threads = []
|
259
|
+
callback = ->(){
|
260
|
+
operation_threads.each{|t| t.join }
|
261
|
+
operation_threads.clear
|
262
|
+
}
|
263
|
+
lifecycle(kind_callback: callback) do |instance, kind|
|
264
|
+
t = Thread.new do
|
265
|
+
Thread.current.abort_on_exception = true
|
266
|
+
begin
|
267
|
+
if method == :shutdown
|
268
|
+
# To avoid Input#shutdown and Output#before_shutdown mismatch problem, combine before_shutdown and shutdown call in one sequence.
|
269
|
+
# The problem is in_tail flushes buffered multiline in shutdown but output's flush_at_shutdown is invoked in before_shutdown
|
270
|
+
operation = "preparing shutdown" # for logging
|
271
|
+
log.debug "#{operation} #{kind} plugin", type: Plugin.lookup_type_from_class(instance.class), plugin_id: instance.plugin_id
|
272
|
+
begin
|
273
|
+
instance.send(:before_shutdown) unless instance.send(:before_shutdown?)
|
274
|
+
rescue Exception => e
|
275
|
+
log.warn "unexpected error while #{operation} on #{kind} plugin", plugin: instance.class, plugin_id: instance.plugin_id, error: e
|
276
|
+
log.warn_backtrace
|
277
|
+
end
|
278
|
+
operation = "shutting down"
|
279
|
+
log.info "#{operation} #{kind} plugin", type: Plugin.lookup_type_from_class(instance.class), plugin_id: instance.plugin_id
|
280
|
+
instance.send(:shutdown) unless instance.send(:shutdown?)
|
281
|
+
else
|
282
|
+
log.debug "#{operation} #{kind} plugin", type: Plugin.lookup_type_from_class(instance.class), plugin_id: instance.plugin_id
|
283
|
+
instance.send(method) unless instance.send(checker)
|
284
|
+
end
|
285
|
+
rescue Exception => e
|
286
|
+
log.warn "unexpected error while #{operation} on #{kind} plugin", plugin: instance.class, plugin_id: instance.plugin_id, error: e
|
287
|
+
log.warn_backtrace
|
288
|
+
end
|
289
|
+
end
|
290
|
+
operation_threads << t
|
291
|
+
end
|
136
292
|
}
|
137
293
|
|
138
|
-
|
139
|
-
end
|
294
|
+
lifecycle_safe_sequence.call(:stop, :stopped?)
|
140
295
|
|
141
|
-
|
142
|
-
|
143
|
-
|
296
|
+
# before_shutdown does force_flush for output plugins: it should block, so it's unsafe operation
|
297
|
+
lifecycle_unsafe_sequence.call(:shutdown, :shutdown?)
|
298
|
+
|
299
|
+
lifecycle_safe_sequence.call(:after_shutdown, :after_shutdown?)
|
300
|
+
|
301
|
+
lifecycle_unsafe_sequence.call(:close, :closed?)
|
302
|
+
|
303
|
+
lifecycle_safe_sequence.call(:terminate, :terminated?)
|
144
304
|
end
|
145
305
|
|
146
306
|
def suppress_interval(interval_time)
|
@@ -149,13 +309,14 @@ module Fluent
|
|
149
309
|
end
|
150
310
|
|
151
311
|
def add_source(type, conf)
|
152
|
-
|
312
|
+
log_type = conf.for_this_worker? ? :default : :worker0
|
313
|
+
log.info log_type, "adding source", type: type
|
153
314
|
|
154
315
|
input = Plugin.new_input(type)
|
155
316
|
# <source> emits events to the top-level event router (RootAgent#event_router).
|
156
317
|
# Input#configure overwrites event_router to a label's event_router if it has `@label` parameter.
|
157
318
|
# See also 'fluentd/plugin/input.rb'
|
158
|
-
input.
|
319
|
+
input.context_router = @event_router
|
159
320
|
input.configure(conf)
|
160
321
|
@inputs << input
|
161
322
|
|
@@ -163,7 +324,8 @@ module Fluent
|
|
163
324
|
end
|
164
325
|
|
165
326
|
def add_label(name)
|
166
|
-
label = Label.new(name)
|
327
|
+
label = Label.new(name, log: log)
|
328
|
+
raise ConfigError, "Section <label #{name}> appears twice" if @labels[name]
|
167
329
|
label.root_agent = self
|
168
330
|
@labels[name] = label
|
169
331
|
end
|
@@ -177,7 +339,7 @@ module Fluent
|
|
177
339
|
end
|
178
340
|
|
179
341
|
def emit_error_event(tag, time, record, error)
|
180
|
-
error_info = {
|
342
|
+
error_info = {error: error, location: (error.backtrace ? error.backtrace.first : nil), tag: tag, time: time}
|
181
343
|
if @error_collector
|
182
344
|
# A record is not included in the logs because <@ERROR> handles it. This warn is for the notification
|
183
345
|
log.warn "send an error event to @ERROR:", error_info
|
@@ -189,12 +351,12 @@ module Fluent
|
|
189
351
|
end
|
190
352
|
|
191
353
|
def handle_emits_error(tag, es, error)
|
192
|
-
error_info = {
|
354
|
+
error_info = {error: error, location: (error.backtrace ? error.backtrace.first : nil), tag: tag}
|
193
355
|
if @error_collector
|
194
356
|
log.warn "send an error event stream to @ERROR:", error_info
|
195
357
|
@error_collector.emit_stream(tag, es)
|
196
358
|
else
|
197
|
-
now =
|
359
|
+
now = Time.now.to_i
|
198
360
|
if @suppress_emit_error_log_interval.zero? || now > @next_emit_error_log_time
|
199
361
|
log.warn "emit transaction failed:", error_info
|
200
362
|
log.warn_backtrace
|
@@ -218,14 +380,14 @@ module Fluent
|
|
218
380
|
end
|
219
381
|
|
220
382
|
def emit_error_event(tag, time, record, error)
|
221
|
-
error_info = {
|
383
|
+
error_info = {error: error, location: (error.backtrace ? error.backtrace.first : nil), tag: tag, time: time, record: record}
|
222
384
|
log.warn "dump an error event in @ERROR:", error_info
|
223
385
|
end
|
224
386
|
|
225
387
|
def handle_emits_error(tag, es, e)
|
226
|
-
now =
|
388
|
+
now = EventTime.now.to_i
|
227
389
|
if @suppress_emit_error_log_interval.zero? || now > @next_emit_error_log_time
|
228
|
-
log.warn "emit transaction failed in @ERROR:",
|
390
|
+
log.warn "emit transaction failed in @ERROR:", error: e, tag: tag
|
229
391
|
log.warn_backtrace
|
230
392
|
@next_emit_error_log_time = now + @suppress_emit_error_log_interval
|
231
393
|
end
|