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
@@ -1,107 +1,130 @@
|
|
1
|
-
|
2
|
-
|
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
|
+
#
|
3
16
|
|
4
|
-
|
5
|
-
|
17
|
+
require 'fluent/time'
|
18
|
+
require 'fluent/config/error'
|
19
|
+
require 'fluent/plugin/filter'
|
20
|
+
require 'fluent/plugin_helper/parser'
|
21
|
+
require 'fluent/plugin_helper/compat_parameters'
|
6
22
|
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
config_param :replace_invalid_sequence, :bool, default: false
|
11
|
-
config_param :hash_value_field, :string, default: nil
|
12
|
-
config_param :suppress_parse_error_log, :bool, default: false
|
13
|
-
config_param :time_parse, :bool, default: true
|
14
|
-
config_param :ignore_key_not_exist, :bool, default: false
|
15
|
-
config_param :emit_invalid_record_to_error, :bool, default: false
|
23
|
+
module Fluent::Plugin
|
24
|
+
class ParserFilter < Filter
|
25
|
+
Fluent::Plugin.register_filter('parser', self)
|
16
26
|
|
17
|
-
|
27
|
+
helpers :parser, :record_accessor, :compat_parameters
|
18
28
|
|
19
|
-
|
20
|
-
|
29
|
+
desc 'Specify field name in the record to parse.'
|
30
|
+
config_param :key_name, :string
|
31
|
+
desc 'Keep original key-value pair in parsed result.'
|
32
|
+
config_param :reserve_data, :bool, default: false
|
33
|
+
desc 'Keep original event time in parsed result.'
|
34
|
+
config_param :reserve_time, :bool, default: false
|
35
|
+
desc 'Remove "key_name" field from the record when parsing is succeeded'
|
36
|
+
config_param :remove_key_name_field, :bool, default: false
|
37
|
+
desc 'Store parsed values with specified key name prefix.'
|
38
|
+
config_param :inject_key_prefix, :string, default: nil
|
39
|
+
desc 'If true, invalid string is replaced with safe characters and re-parse it.'
|
40
|
+
config_param :replace_invalid_sequence, :bool, default: false
|
41
|
+
desc 'Store parsed values as a hash value in a field.'
|
42
|
+
config_param :hash_value_field, :string, default: nil
|
43
|
+
desc 'Emit invalid record to @ERROR label'
|
44
|
+
config_param :emit_invalid_record_to_error, :bool, default: true
|
21
45
|
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
46
|
+
attr_reader :parser
|
47
|
+
|
48
|
+
def configure(conf)
|
49
|
+
compat_parameters_convert(conf, :parser)
|
50
|
+
|
51
|
+
super
|
52
|
+
|
53
|
+
@accessor = record_accessor_create(@key_name)
|
54
|
+
@parser = parser_create
|
28
55
|
end
|
29
56
|
|
30
|
-
|
31
|
-
|
57
|
+
FAILED_RESULT = [nil, nil].freeze # reduce allocation cost
|
58
|
+
REPLACE_CHAR = '?'.freeze
|
32
59
|
|
33
|
-
|
34
|
-
|
35
|
-
es.each do |time,record|
|
36
|
-
raw_value = record[@key_name]
|
60
|
+
def filter_with_time(tag, time, record)
|
61
|
+
raw_value = @accessor.call(record)
|
37
62
|
if raw_value.nil?
|
38
63
|
if @emit_invalid_record_to_error
|
39
64
|
router.emit_error_event(tag, time, record, ArgumentError.new("#{@key_name} does not exist"))
|
65
|
+
end
|
66
|
+
if @reserve_data
|
67
|
+
return time, handle_parsed(tag, record, time, {})
|
40
68
|
else
|
41
|
-
|
69
|
+
return FAILED_RESULT
|
42
70
|
end
|
43
|
-
new_es.add(time, handle_parsed(tag, record, time, {})) if @reserve_data
|
44
|
-
next
|
45
71
|
end
|
46
72
|
begin
|
47
|
-
@parser.parse(raw_value) do |t,values|
|
73
|
+
@parser.parse(raw_value) do |t, values|
|
48
74
|
if values
|
49
|
-
t
|
75
|
+
t = if @reserve_time
|
76
|
+
time
|
77
|
+
else
|
78
|
+
t.nil? ? time : t
|
79
|
+
end
|
80
|
+
@accessor.delete(record) if @remove_key_name_field
|
50
81
|
r = handle_parsed(tag, record, t, values)
|
51
|
-
|
82
|
+
return t, r
|
52
83
|
else
|
53
84
|
if @emit_invalid_record_to_error
|
54
|
-
router.emit_error_event(tag, time, record,
|
55
|
-
else
|
56
|
-
log.warn "pattern not match with data '#{raw_value}'" unless @suppress_parse_error_log
|
85
|
+
router.emit_error_event(tag, time, record, Fluent::Plugin::Parser::ParserError.new("pattern not matched with data '#{raw_value}'"))
|
57
86
|
end
|
58
87
|
if @reserve_data
|
59
88
|
t = time
|
60
89
|
r = handle_parsed(tag, record, time, {})
|
61
|
-
|
90
|
+
return t, r
|
91
|
+
else
|
92
|
+
return FAILED_RESULT
|
62
93
|
end
|
63
94
|
end
|
64
95
|
end
|
65
|
-
rescue Fluent::ParserError => e
|
96
|
+
rescue Fluent::Plugin::Parser::ParserError => e
|
66
97
|
if @emit_invalid_record_to_error
|
67
|
-
|
98
|
+
raise e
|
68
99
|
else
|
69
|
-
|
100
|
+
return FAILED_RESULT
|
70
101
|
end
|
71
102
|
rescue ArgumentError => e
|
72
103
|
raise unless @replace_invalid_sequence
|
73
104
|
raise unless e.message.index("invalid byte sequence in") == 0
|
74
105
|
|
75
|
-
raw_value =
|
106
|
+
raw_value = raw_value.scrub(REPLACE_CHAR)
|
76
107
|
retry
|
77
108
|
rescue => e
|
78
109
|
if @emit_invalid_record_to_error
|
79
|
-
|
110
|
+
raise Fluent::Plugin::Parser::ParserError, "parse failed #{e.message}"
|
80
111
|
else
|
81
|
-
|
112
|
+
return FAILED_RESULT
|
82
113
|
end
|
83
114
|
end
|
84
115
|
end
|
85
|
-
new_es
|
86
|
-
end
|
87
116
|
|
88
|
-
|
117
|
+
private
|
89
118
|
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
119
|
+
def handle_parsed(tag, record, t, values)
|
120
|
+
if values && @inject_key_prefix
|
121
|
+
values = Hash[values.map { |k, v| [@inject_key_prefix + k, v] }]
|
122
|
+
end
|
123
|
+
r = @hash_value_field ? {@hash_value_field => values} : values
|
124
|
+
if @reserve_data
|
125
|
+
r = r ? record.merge(r) : record
|
126
|
+
end
|
127
|
+
r
|
97
128
|
end
|
98
|
-
r
|
99
|
-
end
|
100
|
-
|
101
|
-
def replace_invalid_byte(string)
|
102
|
-
replace_options = { invalid: :replace, undef: :replace, replace: '?' }
|
103
|
-
original_encoding = string.encoding
|
104
|
-
temporal_encoding = (original_encoding == Encoding::UTF_8 ? Encoding::UTF_16BE : Encoding::UTF_8)
|
105
|
-
string.encode(temporal_encoding, original_encoding, replace_options).encode(original_encoding)
|
106
129
|
end
|
107
130
|
end
|
@@ -18,15 +18,17 @@ require 'socket'
|
|
18
18
|
require 'json'
|
19
19
|
require 'ostruct'
|
20
20
|
|
21
|
-
require 'fluent/filter'
|
21
|
+
require 'fluent/plugin/filter'
|
22
22
|
require 'fluent/config/error'
|
23
23
|
require 'fluent/event'
|
24
24
|
require 'fluent/time'
|
25
25
|
|
26
|
-
module Fluent
|
27
|
-
class RecordTransformerFilter < Filter
|
26
|
+
module Fluent::Plugin
|
27
|
+
class RecordTransformerFilter < Fluent::Plugin::Filter
|
28
28
|
Fluent::Plugin.register_filter('record_transformer', self)
|
29
29
|
|
30
|
+
helpers :record_accessor
|
31
|
+
|
30
32
|
desc 'A comma-delimited list of keys to delete.'
|
31
33
|
config_param :remove_keys, :array, default: nil
|
32
34
|
desc 'A comma-delimited list of keys to keep.'
|
@@ -38,7 +40,7 @@ module Fluent
|
|
38
40
|
desc 'When set to true, the full Ruby syntax is enabled in the ${...} expression.'
|
39
41
|
config_param :enable_ruby, :bool, default: false
|
40
42
|
desc 'Use original value type.'
|
41
|
-
config_param :auto_typecast, :bool, default:
|
43
|
+
config_param :auto_typecast, :bool, default: true
|
42
44
|
|
43
45
|
def configure(conf)
|
44
46
|
super
|
@@ -56,6 +58,10 @@ module Fluent
|
|
56
58
|
raise Fluent::ConfigError, "`renew_record` must be true to use `keep_keys`" unless @renew_record
|
57
59
|
end
|
58
60
|
|
61
|
+
@key_deleters = if @remove_keys
|
62
|
+
@remove_keys.map { |k| record_accessor_create(k) }
|
63
|
+
end
|
64
|
+
|
59
65
|
placeholder_expander_params = {
|
60
66
|
log: log,
|
61
67
|
auto_typecast: @auto_typecast,
|
@@ -76,7 +82,7 @@ module Fluent
|
|
76
82
|
end
|
77
83
|
|
78
84
|
def filter_stream(tag, es)
|
79
|
-
new_es = MultiEventStream.new
|
85
|
+
new_es = Fluent::MultiEventStream.new
|
80
86
|
tag_parts = tag.split('.')
|
81
87
|
tag_prefix = tag_prefix(tag_parts)
|
82
88
|
tag_suffix = tag_suffix(tag_parts)
|
@@ -87,23 +93,23 @@ module Fluent
|
|
87
93
|
'tag_suffix' => tag_suffix,
|
88
94
|
'hostname' => @hostname,
|
89
95
|
}
|
90
|
-
last_record = nil
|
91
96
|
es.each do |time, record|
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
97
|
+
begin
|
98
|
+
placeholder_values['time'] = @placeholder_expander.time_value(time)
|
99
|
+
placeholder_values['record'] = record
|
100
|
+
|
101
|
+
new_record = reform(record, placeholder_values)
|
102
|
+
if @renew_time_key && new_record.has_key?(@renew_time_key)
|
103
|
+
time = Fluent::EventTime.from_time(Time.at(new_record[@renew_time_key].to_f))
|
104
|
+
end
|
105
|
+
@key_deleters.each { |deleter| deleter.delete(new_record) } if @key_deleters
|
106
|
+
new_es.add(time, new_record)
|
107
|
+
rescue => e
|
108
|
+
router.emit_error_event(tag, time, record, e)
|
109
|
+
log.debug { "map:#{@map} record:#{record} placeholder_values:#{placeholder_values}" }
|
98
110
|
end
|
99
|
-
@remove_keys.each { |k| new_record.delete(k) } if @remove_keys
|
100
|
-
new_es.add(time, new_record)
|
101
111
|
end
|
102
112
|
new_es
|
103
|
-
rescue => e
|
104
|
-
log.warn "failed to reform records", error_class: e.class, error: e.message
|
105
|
-
log.warn_backtrace
|
106
|
-
log.debug "map:#{@map} record:#{last_record} placeholder_values:#{placeholder_values}"
|
107
113
|
end
|
108
114
|
|
109
115
|
private
|
@@ -115,7 +121,7 @@ module Fluent
|
|
115
121
|
value_str
|
116
122
|
end
|
117
123
|
rescue => e
|
118
|
-
log.warn "failed to parse #{value_str} as json. Assuming #{value_str} is a string",
|
124
|
+
log.warn "failed to parse #{value_str} as json. Assuming #{value_str} is a string", error: e
|
119
125
|
value_str # emit as string
|
120
126
|
end
|
121
127
|
|
@@ -199,9 +205,6 @@ module Fluent
|
|
199
205
|
end
|
200
206
|
elsif value.kind_of?(Hash) # record, etc
|
201
207
|
value.each do |k, v|
|
202
|
-
unless placeholder_values.has_key?(k) # prevent overwriting reserved keys such as tag
|
203
|
-
placeholders.store("${#{k}}", v) # foo
|
204
|
-
end
|
205
208
|
placeholders.store(%Q[${#{key}["#{k}"]}], v) # record["foo"]
|
206
209
|
end
|
207
210
|
else # string, interger, float, and others?
|
@@ -304,31 +307,16 @@ module Fluent
|
|
304
307
|
placeholders['hostname'],
|
305
308
|
)
|
306
309
|
rescue => e
|
307
|
-
|
308
|
-
log.warn_backtrace
|
309
|
-
nil
|
310
|
+
raise "failed to expand `#{str}` : error = #{e}"
|
310
311
|
end
|
311
312
|
|
312
313
|
class CleanroomExpander
|
313
314
|
def expand(__str_to_eval__, tag, time, record, tag_parts, tag_prefix, tag_suffix, hostname)
|
314
|
-
tags = tag_parts # for old version compatibility
|
315
|
-
Thread.current[:record_transformer_record] = record # for old version compatibility
|
316
315
|
instance_eval(__str_to_eval__)
|
317
316
|
end
|
318
317
|
|
319
|
-
# for old version compatibility
|
320
|
-
def method_missing(name)
|
321
|
-
key = name.to_s
|
322
|
-
record = Thread.current[:record_transformer_record]
|
323
|
-
if record.has_key?(key)
|
324
|
-
record[key]
|
325
|
-
else
|
326
|
-
raise NameError, "undefined local variable or method `#{key}'"
|
327
|
-
end
|
328
|
-
end
|
329
|
-
|
330
318
|
(Object.instance_methods).each do |m|
|
331
|
-
undef_method m unless m.to_s =~ /^__|respond_to_missing\?|object_id|public_methods|instance_eval|method_missing|define_singleton_method|respond_to\?|new_ostruct_member
|
319
|
+
undef_method m unless m.to_s =~ /^__|respond_to_missing\?|object_id|public_methods|instance_eval|method_missing|define_singleton_method|respond_to\?|new_ostruct_member|^class$/
|
332
320
|
end
|
333
321
|
end
|
334
322
|
end
|
@@ -14,31 +14,34 @@
|
|
14
14
|
# limitations under the License.
|
15
15
|
#
|
16
16
|
|
17
|
-
require 'fluent/filter'
|
18
|
-
require 'fluent/plugin'
|
17
|
+
require 'fluent/plugin/filter'
|
19
18
|
|
20
|
-
module Fluent
|
19
|
+
module Fluent::Plugin
|
21
20
|
class StdoutFilter < Filter
|
22
|
-
Plugin.register_filter('stdout', self)
|
21
|
+
Fluent::Plugin.register_filter('stdout', self)
|
22
|
+
|
23
|
+
helpers :formatter, :compat_parameters, :inject
|
24
|
+
|
25
|
+
DEFAULT_FORMAT_TYPE = 'stdout'
|
26
|
+
|
27
|
+
config_section :format do
|
28
|
+
config_set_default :@type, DEFAULT_FORMAT_TYPE
|
29
|
+
end
|
23
30
|
|
24
31
|
# for tests
|
25
32
|
attr_reader :formatter
|
26
33
|
|
27
|
-
desc 'The format of the output.'
|
28
|
-
config_param :format, :string, default: 'stdout'
|
29
|
-
# config_param :output_type, :string, :default => 'json' (StdoutFormatter defines this)
|
30
|
-
|
31
34
|
def configure(conf)
|
35
|
+
compat_parameters_convert(conf, :inject, :formatter)
|
32
36
|
super
|
33
|
-
|
34
|
-
@formatter = Plugin.new_formatter(@format)
|
35
|
-
@formatter.configure(conf)
|
37
|
+
@formatter = formatter_create
|
36
38
|
end
|
37
39
|
|
38
40
|
def filter_stream(tag, es)
|
39
41
|
es.each { |time, record|
|
40
42
|
begin
|
41
|
-
|
43
|
+
r = inject_values_to_record(tag, time, record)
|
44
|
+
log.write @formatter.format(tag, time, r)
|
42
45
|
rescue => e
|
43
46
|
router.emit_error_event(tag, time, record, e)
|
44
47
|
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/plugin/base'
|
18
|
+
require 'fluent/plugin/owned_by_mixin'
|
19
|
+
require 'fluent/time'
|
20
|
+
|
21
|
+
module Fluent
|
22
|
+
module Plugin
|
23
|
+
class Formatter < Base
|
24
|
+
include OwnedByMixin
|
25
|
+
include TimeMixin::Formatter
|
26
|
+
|
27
|
+
configured_in :format
|
28
|
+
|
29
|
+
PARSER_TYPES = [:text_per_line, :text, :binary]
|
30
|
+
def formatter_type
|
31
|
+
:text_per_line
|
32
|
+
end
|
33
|
+
|
34
|
+
def format(tag, time, record)
|
35
|
+
raise NotImplementedError, "Implement this method in child class"
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
class ProcWrappedFormatter < Formatter
|
40
|
+
def initialize(proc)
|
41
|
+
super()
|
42
|
+
@proc = proc
|
43
|
+
end
|
44
|
+
|
45
|
+
def format(tag, time, record)
|
46
|
+
@proc.call(tag, time, record)
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
@@ -0,0 +1,52 @@
|
|
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/formatter'
|
18
|
+
require 'csv'
|
19
|
+
|
20
|
+
module Fluent
|
21
|
+
module Plugin
|
22
|
+
class CsvFormatter < Formatter
|
23
|
+
Plugin.register_formatter('csv', self)
|
24
|
+
|
25
|
+
config_param :delimiter, default: ',' do |val|
|
26
|
+
['\t', 'TAB'].include?(val) ? "\t" : val
|
27
|
+
end
|
28
|
+
config_param :force_quotes, :bool, default: true
|
29
|
+
# "array" looks good for type of :fields, but this implementation removes tailing comma
|
30
|
+
# TODO: Is it needed to support tailing comma?
|
31
|
+
config_param :fields, :array, value_type: :string
|
32
|
+
config_param :add_newline, :bool, default: true
|
33
|
+
|
34
|
+
def configure(conf)
|
35
|
+
super
|
36
|
+
@fields = fields.select{|f| !f.empty? }
|
37
|
+
raise ConfigError, "empty value is specified in fields parameter" if @fields.empty?
|
38
|
+
|
39
|
+
@generate_opts = {col_sep: @delimiter, force_quotes: @force_quotes}
|
40
|
+
end
|
41
|
+
|
42
|
+
def format(tag, time, record)
|
43
|
+
row = @fields.map do |key|
|
44
|
+
record[key]
|
45
|
+
end
|
46
|
+
line = CSV.generate_line(row, @generate_opts)
|
47
|
+
line.chomp! unless @add_newline
|
48
|
+
line
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
#
|
2
|
+
# Fluentd
|
3
|
+
#
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
5
|
+
# you may not use this file except in compliance with the License.
|
6
|
+
# You may obtain a copy of the License at
|
7
|
+
#
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
9
|
+
#
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
12
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
13
|
+
# See the License for the specific language governing permissions and
|
14
|
+
# limitations under the License.
|
15
|
+
#
|
16
|
+
|
17
|
+
require 'fluent/plugin/formatter'
|
18
|
+
|
19
|
+
module Fluent
|
20
|
+
module Plugin
|
21
|
+
class HashFormatter < Formatter
|
22
|
+
Plugin.register_formatter('hash', self)
|
23
|
+
|
24
|
+
config_param :add_newline, :bool, default: true
|
25
|
+
|
26
|
+
def format(tag, time, record)
|
27
|
+
line = record.to_s
|
28
|
+
line << "\n".freeze if @add_newline
|
29
|
+
line
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,55 @@
|
|
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/formatter'
|
18
|
+
require 'fluent/env'
|
19
|
+
|
20
|
+
module Fluent
|
21
|
+
module Plugin
|
22
|
+
class JSONFormatter < Formatter
|
23
|
+
Plugin.register_formatter('json', self)
|
24
|
+
|
25
|
+
config_param :json_parser, :string, default: 'oj'
|
26
|
+
config_param :add_newline, :bool, default: true
|
27
|
+
|
28
|
+
def configure(conf)
|
29
|
+
super
|
30
|
+
|
31
|
+
begin
|
32
|
+
raise LoadError unless @json_parser == 'oj'
|
33
|
+
require 'oj'
|
34
|
+
Oj.default_options = Fluent::DEFAULT_OJ_OPTIONS
|
35
|
+
@dump_proc = Oj.method(:dump)
|
36
|
+
rescue LoadError
|
37
|
+
@dump_proc = Yajl.method(:dump)
|
38
|
+
end
|
39
|
+
|
40
|
+
# format json is used on various highload environment, so re-define method to skip if check
|
41
|
+
unless @add_newline
|
42
|
+
define_singleton_method(:format, method(:format_without_nl))
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
def format(tag, time, record)
|
47
|
+
"#{@dump_proc.call(record)}\n"
|
48
|
+
end
|
49
|
+
|
50
|
+
def format_without_nl(tag, time, record)
|
51
|
+
@dump_proc.call(record)
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
@@ -0,0 +1,42 @@
|
|
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/formatter'
|
18
|
+
|
19
|
+
module Fluent
|
20
|
+
module Plugin
|
21
|
+
class LabeledTSVFormatter < Formatter
|
22
|
+
Plugin.register_formatter('ltsv', self)
|
23
|
+
|
24
|
+
# http://ltsv.org/
|
25
|
+
|
26
|
+
config_param :delimiter, :string, default: "\t"
|
27
|
+
config_param :label_delimiter, :string, default: ":"
|
28
|
+
config_param :add_newline, :bool, default: true
|
29
|
+
|
30
|
+
# TODO: escaping for \t in values
|
31
|
+
def format(tag, time, record)
|
32
|
+
formatted = ""
|
33
|
+
record.each do |label, value|
|
34
|
+
formatted << @delimiter if formatted.length.nonzero?
|
35
|
+
formatted << "#{label}#{@label_delimiter}#{value}"
|
36
|
+
end
|
37
|
+
formatted << "\n".freeze if @add_newline
|
38
|
+
formatted
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
#
|
2
|
+
# Fluentd
|
3
|
+
#
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
5
|
+
# you may not use this file except in compliance with the License.
|
6
|
+
# You may obtain a copy of the License at
|
7
|
+
#
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
9
|
+
#
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
12
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
13
|
+
# See the License for the specific language governing permissions and
|
14
|
+
# limitations under the License.
|
15
|
+
#
|
16
|
+
|
17
|
+
require 'fluent/plugin/formatter'
|
18
|
+
|
19
|
+
module Fluent
|
20
|
+
module Plugin
|
21
|
+
class MessagePackFormatter < Formatter
|
22
|
+
Plugin.register_formatter('msgpack', self)
|
23
|
+
|
24
|
+
def formatter_type
|
25
|
+
:binary
|
26
|
+
end
|
27
|
+
|
28
|
+
def format(tag, time, record)
|
29
|
+
record.to_msgpack
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|