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
@@ -0,0 +1,60 @@
|
|
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 'singleton'
|
18
|
+
|
19
|
+
module Fluent
|
20
|
+
module Compat
|
21
|
+
# TODO: remove when old plugin API are removed
|
22
|
+
class NullOutputChain
|
23
|
+
include Singleton
|
24
|
+
|
25
|
+
def next
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
class OutputChain
|
30
|
+
def initialize(array, tag, es, chain=NullOutputChain.instance)
|
31
|
+
@array = array
|
32
|
+
@tag = tag
|
33
|
+
@es = es
|
34
|
+
@offset = 0
|
35
|
+
@chain = chain
|
36
|
+
end
|
37
|
+
|
38
|
+
def next
|
39
|
+
if @array.length <= @offset
|
40
|
+
return @chain.next
|
41
|
+
end
|
42
|
+
@offset += 1
|
43
|
+
@array[@offset-1].emit_events(@tag, @es)
|
44
|
+
self.next
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
class CopyOutputChain < OutputChain
|
49
|
+
def next
|
50
|
+
if @array.length <= @offset
|
51
|
+
return @chain.next
|
52
|
+
end
|
53
|
+
@offset += 1
|
54
|
+
es = @array.length > @offset ? @es.dup : @es
|
55
|
+
@array[@offset-1].emit_events(@tag, es)
|
56
|
+
self.next
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
@@ -0,0 +1,310 @@
|
|
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'
|
18
|
+
require 'fluent/plugin/parser'
|
19
|
+
require 'fluent/mixin'
|
20
|
+
|
21
|
+
require 'fluent/config'
|
22
|
+
require 'fluent/compat/type_converter'
|
23
|
+
|
24
|
+
require 'fluent/plugin/parser_regexp'
|
25
|
+
require 'fluent/plugin/parser_json'
|
26
|
+
require 'fluent/plugin/parser_tsv'
|
27
|
+
require 'fluent/plugin/parser_ltsv'
|
28
|
+
require 'fluent/plugin/parser_csv'
|
29
|
+
require 'fluent/plugin/parser_none'
|
30
|
+
require 'fluent/plugin/parser_apache2'
|
31
|
+
require 'fluent/plugin/parser_syslog'
|
32
|
+
require 'fluent/plugin/parser_multiline'
|
33
|
+
|
34
|
+
module Fluent
|
35
|
+
module Compat
|
36
|
+
class Parser < Fluent::Plugin::Parser
|
37
|
+
# TODO: warn when deprecated
|
38
|
+
end
|
39
|
+
|
40
|
+
class TextParser
|
41
|
+
# Keep backward compatibility for existing plugins
|
42
|
+
ParserError = Fluent::Plugin::Parser::ParserError
|
43
|
+
# TODO: will be removed at v1
|
44
|
+
TypeConverter = Fluent::TypeConverter
|
45
|
+
|
46
|
+
def initialize
|
47
|
+
# TODO: warn when deprecated
|
48
|
+
@parser = nil
|
49
|
+
@estimate_current_event = nil
|
50
|
+
end
|
51
|
+
|
52
|
+
attr_reader :parser
|
53
|
+
|
54
|
+
# SET false BEFORE CONFIGURE, to return nil when time not parsed
|
55
|
+
# 'configure()' may raise errors for unexpected configurations
|
56
|
+
attr_accessor :estimate_current_event
|
57
|
+
|
58
|
+
def configure(conf, required=true)
|
59
|
+
format = conf['format']
|
60
|
+
|
61
|
+
@parser = TextParser.lookup(format)
|
62
|
+
|
63
|
+
if @parser.respond_to?(:configure)
|
64
|
+
@parser.configure(conf)
|
65
|
+
end
|
66
|
+
if !@estimate_current_event.nil? && @parser.respond_to?(:'estimate_current_event=')
|
67
|
+
# external code sets parser.estimate_current_event = false
|
68
|
+
@parser.estimate_current_event = @estimate_current_event
|
69
|
+
end
|
70
|
+
|
71
|
+
return true
|
72
|
+
end
|
73
|
+
|
74
|
+
def parse(text, &block)
|
75
|
+
if block
|
76
|
+
@parser.parse(text, &block)
|
77
|
+
else
|
78
|
+
@parser.parse(text) { |time, record|
|
79
|
+
return time, record
|
80
|
+
}
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
def self.register_template(type, template, time_format=nil)
|
85
|
+
# TODO: warn when deprecated to use Plugin.register_parser directly
|
86
|
+
if template.is_a?(Class) || template.respond_to?(:call)
|
87
|
+
Fluent::Plugin.register_parser(type, template)
|
88
|
+
elsif template.is_a?(Regexp)
|
89
|
+
Fluent::Plugin.register_parser(type, Proc.new { RegexpParser.new(template, {'time_format' => time_format}) })
|
90
|
+
else
|
91
|
+
raise ArgumentError, "Template for parser must be a Class, callable object or regular expression object"
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
def self.lookup(format)
|
96
|
+
# TODO: warn when deprecated to use Plugin.new_parser or RegexpParser.new directly
|
97
|
+
if format.nil?
|
98
|
+
raise ConfigError, "'format' parameter is required"
|
99
|
+
end
|
100
|
+
|
101
|
+
if format[0] == ?/ && format[format.length-1] == ?/
|
102
|
+
# regexp
|
103
|
+
begin
|
104
|
+
regexp = Regexp.new(format[1..-2])
|
105
|
+
if regexp.named_captures.empty?
|
106
|
+
raise "No named captures"
|
107
|
+
end
|
108
|
+
rescue
|
109
|
+
raise ConfigError, "Invalid regexp '#{format[1..-2]}': #{$!}"
|
110
|
+
end
|
111
|
+
|
112
|
+
RegexpParser.new(regexp)
|
113
|
+
else
|
114
|
+
# built-in template
|
115
|
+
begin
|
116
|
+
Fluent::Plugin.new_parser(format)
|
117
|
+
rescue ConfigError # keep same error message
|
118
|
+
raise ConfigError, "Unknown format template '#{format}'"
|
119
|
+
end
|
120
|
+
end
|
121
|
+
end
|
122
|
+
|
123
|
+
module TypeConverterCompatParameters
|
124
|
+
def convert_type_converter_parameters!(conf)
|
125
|
+
if conf["types"]
|
126
|
+
delimiter = conf["types_delimiter"] || ','
|
127
|
+
label_delimiter = conf["types_label_delimiter"] || ':'
|
128
|
+
types = {}
|
129
|
+
conf['types'].split(delimiter).each do |pair|
|
130
|
+
key, value = pair.split(label_delimiter, 2)
|
131
|
+
if value.start_with?("time#{label_delimiter}")
|
132
|
+
value = value.split(label_delimiter, 2).join(':')
|
133
|
+
elsif value.start_with?("array#{label_delimiter}")
|
134
|
+
value = value.split(label_delimiter, 2).join(':')
|
135
|
+
end
|
136
|
+
types[key] = value
|
137
|
+
end
|
138
|
+
conf["types"] = JSON.dump(types)
|
139
|
+
end
|
140
|
+
end
|
141
|
+
end
|
142
|
+
|
143
|
+
class TimeParser < Fluent::TimeParser
|
144
|
+
# TODO: warn when deprecated
|
145
|
+
end
|
146
|
+
|
147
|
+
class RegexpParser < Fluent::Plugin::RegexpParser
|
148
|
+
include TypeConverterCompatParameters
|
149
|
+
|
150
|
+
# TODO: warn when deprecated
|
151
|
+
def initialize(regexp, conf = {})
|
152
|
+
super()
|
153
|
+
|
154
|
+
@stored_regexp = regexp
|
155
|
+
@manually_configured = false
|
156
|
+
unless conf.empty?
|
157
|
+
conf_init = if conf.is_a?(Fluent::Config::Element)
|
158
|
+
conf
|
159
|
+
else
|
160
|
+
Fluent::Config::Element.new('parse', '', conf, [])
|
161
|
+
end
|
162
|
+
self.configure(conf_init)
|
163
|
+
@manually_configured = true
|
164
|
+
end
|
165
|
+
end
|
166
|
+
|
167
|
+
def configure(conf)
|
168
|
+
return if @manually_configured # not to run twice
|
169
|
+
|
170
|
+
conf['expression'] ||= @stored_regexp.source
|
171
|
+
conf['ignorecase'] ||= @stored_regexp.options & Regexp::IGNORECASE != 0
|
172
|
+
conf['multiline'] ||= @stored_regexp.options & Regexp::MULTILINE != 0
|
173
|
+
convert_type_converter_parameters!(conf)
|
174
|
+
|
175
|
+
super
|
176
|
+
end
|
177
|
+
|
178
|
+
def patterns
|
179
|
+
{'format' => @regexp, 'time_format' => @time_format}
|
180
|
+
end
|
181
|
+
end
|
182
|
+
|
183
|
+
class ValuesParser < Parser
|
184
|
+
include Fluent::Compat::TypeConverter
|
185
|
+
|
186
|
+
config_param :keys, :array, default: []
|
187
|
+
config_param :time_key, :string, default: nil
|
188
|
+
config_param :null_value_pattern, :string, default: nil
|
189
|
+
config_param :null_empty_string, :bool, default: false
|
190
|
+
|
191
|
+
def configure(conf)
|
192
|
+
super
|
193
|
+
|
194
|
+
if @time_key && !@keys.include?(@time_key) && @estimate_current_event
|
195
|
+
raise Fluent::ConfigError, "time_key (#{@time_key.inspect}) is not included in keys (#{@keys.inspect})"
|
196
|
+
end
|
197
|
+
|
198
|
+
if @time_format && !@time_key
|
199
|
+
raise Fluent::ConfigError, "time_format parameter is ignored because time_key parameter is not set. at #{conf.inspect}"
|
200
|
+
end
|
201
|
+
|
202
|
+
@time_parser = time_parser_create
|
203
|
+
|
204
|
+
if @null_value_pattern
|
205
|
+
@null_value_pattern = Regexp.new(@null_value_pattern)
|
206
|
+
end
|
207
|
+
|
208
|
+
@mutex = Mutex.new
|
209
|
+
end
|
210
|
+
|
211
|
+
def values_map(values)
|
212
|
+
record = Hash[keys.zip(values.map { |value| convert_value_to_nil(value) })]
|
213
|
+
|
214
|
+
if @time_key
|
215
|
+
value = @keep_time_key ? record[@time_key] : record.delete(@time_key)
|
216
|
+
time = if value.nil?
|
217
|
+
if @estimate_current_event
|
218
|
+
Fluent::EventTime.now
|
219
|
+
else
|
220
|
+
nil
|
221
|
+
end
|
222
|
+
else
|
223
|
+
@mutex.synchronize { @time_parser.parse(value) }
|
224
|
+
end
|
225
|
+
elsif @estimate_current_event
|
226
|
+
time = Fluent::EventTime.now
|
227
|
+
else
|
228
|
+
time = nil
|
229
|
+
end
|
230
|
+
|
231
|
+
convert_field_type!(record) if @type_converters
|
232
|
+
|
233
|
+
return time, record
|
234
|
+
end
|
235
|
+
|
236
|
+
private
|
237
|
+
|
238
|
+
def convert_field_type!(record)
|
239
|
+
@type_converters.each_key { |key|
|
240
|
+
if value = record[key]
|
241
|
+
record[key] = convert_type(key, value)
|
242
|
+
end
|
243
|
+
}
|
244
|
+
end
|
245
|
+
|
246
|
+
def convert_value_to_nil(value)
|
247
|
+
if value and @null_empty_string
|
248
|
+
value = (value == '') ? nil : value
|
249
|
+
end
|
250
|
+
if value and @null_value_pattern
|
251
|
+
value = ::Fluent::StringUtil.match_regexp(@null_value_pattern, value) ? nil : value
|
252
|
+
end
|
253
|
+
value
|
254
|
+
end
|
255
|
+
end
|
256
|
+
|
257
|
+
class JSONParser < Fluent::Plugin::JSONParser
|
258
|
+
include TypeConverterCompatParameters
|
259
|
+
# TODO: warn when deprecated
|
260
|
+
def configure(conf)
|
261
|
+
convert_type_converter_parameters!(conf)
|
262
|
+
super
|
263
|
+
end
|
264
|
+
end
|
265
|
+
|
266
|
+
class TSVParser < Fluent::Plugin::TSVParser
|
267
|
+
include TypeConverterCompatParameters
|
268
|
+
# TODO: warn when deprecated
|
269
|
+
def configure(conf)
|
270
|
+
convert_type_converter_parameters!(conf)
|
271
|
+
super
|
272
|
+
end
|
273
|
+
end
|
274
|
+
|
275
|
+
class LabeledTSVParser < Fluent::Plugin::LabeledTSVParser
|
276
|
+
include TypeConverterCompatParameters
|
277
|
+
# TODO: warn when deprecated
|
278
|
+
def configure(conf)
|
279
|
+
convert_type_converter_parameters!(conf)
|
280
|
+
super
|
281
|
+
end
|
282
|
+
end
|
283
|
+
|
284
|
+
class CSVParser < Fluent::Plugin::CSVParser
|
285
|
+
include TypeConverterCompatParameters
|
286
|
+
# TODO: warn when deprecated
|
287
|
+
def configure(conf)
|
288
|
+
convert_type_converter_parameters!(conf)
|
289
|
+
super
|
290
|
+
end
|
291
|
+
end
|
292
|
+
|
293
|
+
class NoneParser < Fluent::Plugin::NoneParser
|
294
|
+
# TODO: warn when deprecated
|
295
|
+
end
|
296
|
+
|
297
|
+
class ApacheParser < Fluent::Plugin::Apache2Parser
|
298
|
+
# TODO: warn when deprecated
|
299
|
+
end
|
300
|
+
|
301
|
+
class SyslogParser < Fluent::Plugin::SyslogParser
|
302
|
+
# TODO: warn when deprecated
|
303
|
+
end
|
304
|
+
|
305
|
+
class MultilineParser < Fluent::Plugin::MultilineParser
|
306
|
+
# TODO: warn when deprecated
|
307
|
+
end
|
308
|
+
end
|
309
|
+
end
|
310
|
+
end
|
@@ -0,0 +1,40 @@
|
|
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_helper/compat_parameters'
|
18
|
+
|
19
|
+
module Fluent
|
20
|
+
module Compat
|
21
|
+
module ParserUtils
|
22
|
+
PARSER_PARAMS = Fluent::PluginHelper::CompatParameters::PARSER_PARAMS
|
23
|
+
|
24
|
+
def self.convert_parser_conf(conf)
|
25
|
+
return if conf.elements(name: 'parse').first
|
26
|
+
|
27
|
+
parser_params = {}
|
28
|
+
PARSER_PARAMS.each do |older, newer|
|
29
|
+
next unless newer
|
30
|
+
if conf.has_key?(older)
|
31
|
+
parser_params[newer] = conf[older]
|
32
|
+
end
|
33
|
+
end
|
34
|
+
unless parser_params.empty?
|
35
|
+
conf.elements << Fluent::Config::Element.new('parse', '', parser_params, [])
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,62 @@
|
|
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/configurable'
|
18
|
+
|
19
|
+
module Fluent
|
20
|
+
module Compat
|
21
|
+
module PropagateDefault
|
22
|
+
# This mixin is to prepend to 3rd party plugins of v0.12 APIs.
|
23
|
+
# 3rd party plugins may override default values of some parameters, like `buffer_type`.
|
24
|
+
# But default values of such parameters will NOT used, but defaults of <buffer>@type</buffer>
|
25
|
+
# will be used in fact. It should bring troubles.
|
26
|
+
# This mixin defines Class method .config_param and .config_set_default (which should be used by extend)
|
27
|
+
# to propagate changes of default values to subsections.
|
28
|
+
def self.included(mod)
|
29
|
+
mod.extend(ClassMethods)
|
30
|
+
end
|
31
|
+
|
32
|
+
module ClassMethods
|
33
|
+
CONFIGURABLE_CLASS_METHODS = Fluent::Configurable::ClassMethods
|
34
|
+
|
35
|
+
def config_param(name, type = nil, **kwargs, &block)
|
36
|
+
CONFIGURABLE_CLASS_METHODS.instance_method(:config_param).bind(self).call(name, type, **kwargs, &block)
|
37
|
+
pparams = propagate_default_params
|
38
|
+
if kwargs.has_key?(:default) && pparams[name.to_s]
|
39
|
+
newer = pparams[name.to_s].to_sym
|
40
|
+
overridden_default_value = kwargs[:default]
|
41
|
+
|
42
|
+
CONFIGURABLE_CLASS_METHODS.instance_method(:config_section).bind(self).call(:buffer) do
|
43
|
+
config_set_default newer, overridden_default_value
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
def config_set_default(name, defval)
|
49
|
+
CONFIGURABLE_CLASS_METHODS.instance_method(:config_set_default).bind(self).call(name, defval)
|
50
|
+
pparams = propagate_default_params
|
51
|
+
if pparams[name.to_s]
|
52
|
+
newer = pparams[name.to_s].to_sym
|
53
|
+
|
54
|
+
CONFIGURABLE_CLASS_METHODS.instance_method(:config_section).bind(self).call(:buffer) do
|
55
|
+
self.config_set_default newer, defval
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
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 RecordFilterMixin
|
20
|
+
def filter_record(tag, time, record)
|
21
|
+
end
|
22
|
+
|
23
|
+
def format_stream(tag, es)
|
24
|
+
out = ''
|
25
|
+
es.each {|time,record|
|
26
|
+
tag_temp = tag.dup
|
27
|
+
filter_record(tag_temp, time, record)
|
28
|
+
out << format(tag_temp, time, record)
|
29
|
+
}
|
30
|
+
out
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,50 @@
|
|
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/config/error'
|
18
|
+
require 'fluent/config/types'
|
19
|
+
require 'fluent/compat/record_filter_mixin'
|
20
|
+
|
21
|
+
module Fluent
|
22
|
+
module Compat
|
23
|
+
module SetTagKeyMixin
|
24
|
+
include RecordFilterMixin
|
25
|
+
|
26
|
+
attr_accessor :include_tag_key, :tag_key
|
27
|
+
|
28
|
+
def configure(conf)
|
29
|
+
@include_tag_key = false
|
30
|
+
|
31
|
+
super
|
32
|
+
|
33
|
+
if s = conf['include_tag_key']
|
34
|
+
include_tag_key = Fluent::Config.bool_value(s)
|
35
|
+
raise Fluent::ConfigError, "Invalid boolean expression '#{s}' for include_tag_key parameter" if include_tag_key.nil?
|
36
|
+
|
37
|
+
@include_tag_key = include_tag_key
|
38
|
+
end
|
39
|
+
|
40
|
+
@tag_key = conf['tag_key'] || 'tag' if @include_tag_key
|
41
|
+
end
|
42
|
+
|
43
|
+
def filter_record(tag, time, record)
|
44
|
+
super
|
45
|
+
|
46
|
+
record[@tag_key] = tag if @include_tag_key
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
@@ -0,0 +1,69 @@
|
|
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/config/error'
|
18
|
+
require 'fluent/compat/record_filter_mixin'
|
19
|
+
require 'fluent/time'
|
20
|
+
require 'fluent/timezone'
|
21
|
+
|
22
|
+
module Fluent
|
23
|
+
module Compat
|
24
|
+
module SetTimeKeyMixin
|
25
|
+
include RecordFilterMixin
|
26
|
+
|
27
|
+
attr_accessor :include_time_key, :time_key, :localtime, :timezone
|
28
|
+
|
29
|
+
def configure(conf)
|
30
|
+
@include_time_key = false
|
31
|
+
@localtime = false
|
32
|
+
@timezone = nil
|
33
|
+
|
34
|
+
super
|
35
|
+
|
36
|
+
if s = conf['include_time_key']
|
37
|
+
include_time_key = Fluent::Config.bool_value(s)
|
38
|
+
raise Fluent::ConfigError, "Invalid boolean expression '#{s}' for include_time_key parameter" if include_time_key.nil?
|
39
|
+
|
40
|
+
@include_time_key = include_time_key
|
41
|
+
end
|
42
|
+
|
43
|
+
if @include_time_key
|
44
|
+
@time_key = conf['time_key'] || 'time'
|
45
|
+
@time_format = conf['time_format']
|
46
|
+
|
47
|
+
if conf['localtime']
|
48
|
+
@localtime = true
|
49
|
+
elsif conf['utc']
|
50
|
+
@localtime = false
|
51
|
+
end
|
52
|
+
|
53
|
+
if conf['timezone']
|
54
|
+
@timezone = conf['timezone']
|
55
|
+
Fluent::Timezone.validate!(@timezone)
|
56
|
+
end
|
57
|
+
|
58
|
+
@timef = Fluent::TimeFormatter.new(@time_format, @localtime, @timezone)
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
def filter_record(tag, time, record)
|
63
|
+
super
|
64
|
+
|
65
|
+
record[@time_key] = @timef.format(time) if @include_time_key
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|