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,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
|
+
module Fluent
|
18
|
+
module Plugin
|
19
|
+
module OwnedByMixin
|
20
|
+
def owner=(plugin)
|
21
|
+
@_owner = plugin
|
22
|
+
|
23
|
+
@_plugin_id = plugin.plugin_id
|
24
|
+
@_plugin_id_configured = plugin.plugin_id_configured?
|
25
|
+
|
26
|
+
@log = plugin.log
|
27
|
+
end
|
28
|
+
|
29
|
+
def owner
|
30
|
+
if instance_variable_defined?("@_owner")
|
31
|
+
@_owner
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
def log
|
36
|
+
if instance_variable_defined?("@log")
|
37
|
+
@log
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1,191 @@
|
|
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
|
+
|
20
|
+
require 'fluent/mixin' # for TypeConverter
|
21
|
+
require 'fluent/time'
|
22
|
+
require 'fluent/plugin/string_util'
|
23
|
+
|
24
|
+
module Fluent
|
25
|
+
module Plugin
|
26
|
+
class Parser < Base
|
27
|
+
include OwnedByMixin
|
28
|
+
include TimeMixin::Parser
|
29
|
+
|
30
|
+
class ParserError < StandardError; end
|
31
|
+
|
32
|
+
configured_in :parse
|
33
|
+
|
34
|
+
### types can be specified as string-based hash style
|
35
|
+
# field1:type, field2:type, field3:type:option, field4:type:option
|
36
|
+
### or, JSON format
|
37
|
+
# {"field1":"type", "field2":"type", "field3":"type:option", "field4":"type:option"}
|
38
|
+
config_param :types, :hash, value_type: :string, default: nil
|
39
|
+
|
40
|
+
# available options are:
|
41
|
+
# array: (1st) delimiter
|
42
|
+
# time : type[, format, timezone] -> type should be a valid "time_type"(string/unixtime/float)
|
43
|
+
# : format[, timezone]
|
44
|
+
|
45
|
+
config_param :time_key, :string, default: nil
|
46
|
+
config_param :null_value_pattern, :string, default: nil
|
47
|
+
config_param :null_empty_string, :bool, default: false
|
48
|
+
config_param :estimate_current_event, :bool, default: true
|
49
|
+
config_param :keep_time_key, :bool, default: false
|
50
|
+
|
51
|
+
AVAILABLE_PARSER_VALUE_TYPES = ['string', 'integer', 'float', 'bool', 'time', 'array']
|
52
|
+
|
53
|
+
# for tests
|
54
|
+
attr_reader :type_converters
|
55
|
+
|
56
|
+
PARSER_TYPES = [:text_per_line, :text, :binary]
|
57
|
+
def parser_type
|
58
|
+
:text_per_line
|
59
|
+
end
|
60
|
+
|
61
|
+
def configure(conf)
|
62
|
+
super
|
63
|
+
|
64
|
+
@time_parser = time_parser_create
|
65
|
+
@null_value_regexp = @null_value_pattern && Regexp.new(@null_value_pattern)
|
66
|
+
@type_converters = build_type_converters(@types)
|
67
|
+
@execute_convert_values = @type_converters || @null_value_regexp || @null_empty_string
|
68
|
+
end
|
69
|
+
|
70
|
+
def parse(text, &block)
|
71
|
+
raise NotImplementedError, "Implement this method in child class"
|
72
|
+
end
|
73
|
+
|
74
|
+
def call(*a, &b)
|
75
|
+
# Keep backward compatibility for existing plugins
|
76
|
+
# TODO: warn when deprecated
|
77
|
+
parse(*a, &b)
|
78
|
+
end
|
79
|
+
|
80
|
+
def implement?(feature)
|
81
|
+
methods_of_plugin = self.class.instance_methods(false)
|
82
|
+
case feature
|
83
|
+
when :parse_io then methods_of_plugin.include?(:parse_io)
|
84
|
+
when :parse_partial_data then methods_of_plugin.include?(:parse_partial_data)
|
85
|
+
else
|
86
|
+
raise ArgumentError, "Unknown feature for parser plugin: #{feature}"
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
def parse_io(io, &block)
|
91
|
+
raise NotImplementedError, "Optional API #parse_io is not implemented"
|
92
|
+
end
|
93
|
+
|
94
|
+
def parse_partial_data(data, &block)
|
95
|
+
raise NotImplementedError, "Optional API #parse_partial_data is not implemented"
|
96
|
+
end
|
97
|
+
|
98
|
+
def parse_time(record)
|
99
|
+
if @time_key && record.respond_to?(:has_key?) && record.has_key?(@time_key)
|
100
|
+
src = if @keep_time_key
|
101
|
+
record[@time_key]
|
102
|
+
else
|
103
|
+
record.delete(@time_key)
|
104
|
+
end
|
105
|
+
@time_parser.parse(src)
|
106
|
+
elsif @estimate_current_event
|
107
|
+
Fluent::EventTime.now
|
108
|
+
else
|
109
|
+
nil
|
110
|
+
end
|
111
|
+
rescue Fluent::TimeParser::TimeParseError => e
|
112
|
+
raise ParserError, e.message
|
113
|
+
end
|
114
|
+
|
115
|
+
# def parse(text, &block)
|
116
|
+
# time, record = convert_values(time, record)
|
117
|
+
# yield time, record
|
118
|
+
# end
|
119
|
+
def convert_values(time, record)
|
120
|
+
return time, record unless @execute_convert_values
|
121
|
+
|
122
|
+
record.each_key do |key|
|
123
|
+
value = record[key]
|
124
|
+
next unless value # nil/null value is always left as-is.
|
125
|
+
|
126
|
+
if value.is_a?(String) && string_like_null(value)
|
127
|
+
record[key] = nil
|
128
|
+
next
|
129
|
+
end
|
130
|
+
|
131
|
+
if @type_converters && @type_converters.has_key?(key)
|
132
|
+
record[key] = @type_converters[key].call(value)
|
133
|
+
end
|
134
|
+
end
|
135
|
+
|
136
|
+
return time, record
|
137
|
+
end
|
138
|
+
|
139
|
+
def string_like_null(value, null_empty_string = @null_empty_string, null_value_regexp = @null_value_regexp)
|
140
|
+
null_empty_string && value.empty? || null_value_regexp && string_safe_encoding(value){|s| null_value_regexp.match(s) }
|
141
|
+
end
|
142
|
+
|
143
|
+
TRUTHY_VALUES = ['true', 'yes', '1']
|
144
|
+
|
145
|
+
def build_type_converters(types)
|
146
|
+
return nil unless types
|
147
|
+
|
148
|
+
converters = {}
|
149
|
+
|
150
|
+
types.each_pair do |field_name, type_definition|
|
151
|
+
type, option = type_definition.split(":", 2)
|
152
|
+
unless AVAILABLE_PARSER_VALUE_TYPES.include?(type)
|
153
|
+
raise Fluent::ConfigError, "unknown value conversion for key:'#{field_name}', type:'#{type}'"
|
154
|
+
end
|
155
|
+
|
156
|
+
conv = case type
|
157
|
+
when 'string' then ->(v){ v.to_s }
|
158
|
+
when 'integer' then ->(v){ v.to_i rescue v.to_s.to_i }
|
159
|
+
when 'float' then ->(v){ v.to_f rescue v.to_s.to_f }
|
160
|
+
when 'bool' then ->(v){ TRUTHY_VALUES.include?(v.to_s.downcase) }
|
161
|
+
when 'time'
|
162
|
+
# comma-separated: time:[timezone:]time_format
|
163
|
+
# time_format is unixtime/float/string-time-format
|
164
|
+
timep = if option
|
165
|
+
time_type = 'string' # estimate
|
166
|
+
timezone, time_format = option.split(':', 2)
|
167
|
+
unless Fluent::Timezone.validate(timezone)
|
168
|
+
timezone, time_format = nil, option
|
169
|
+
end
|
170
|
+
if Fluent::TimeMixin::TIME_TYPES.include?(time_format)
|
171
|
+
time_type, time_format = time_format, nil # unixtime/float
|
172
|
+
end
|
173
|
+
time_parser_create(type: time_type.to_sym, format: time_format, timezone: timezone)
|
174
|
+
else
|
175
|
+
time_parser_create(type: :string, format: nil, timezone: nil)
|
176
|
+
end
|
177
|
+
->(v){ timep.parse(v) rescue nil }
|
178
|
+
when 'array'
|
179
|
+
delimiter = option ? option.to_s : ','
|
180
|
+
->(v){ string_safe_encoding(v.to_s){|s| s.split(delimiter) } }
|
181
|
+
else
|
182
|
+
raise "BUG: unknown type even after check: #{type}"
|
183
|
+
end
|
184
|
+
converters[field_name] = conv
|
185
|
+
end
|
186
|
+
|
187
|
+
converters
|
188
|
+
end
|
189
|
+
end
|
190
|
+
end
|
191
|
+
end
|
@@ -0,0 +1,28 @@
|
|
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/parser_regexp'
|
18
|
+
|
19
|
+
module Fluent
|
20
|
+
module Plugin
|
21
|
+
class ApacheParser < RegexpParser
|
22
|
+
Plugin.register_parser("apache", self)
|
23
|
+
|
24
|
+
config_set_default :expression, /^(?<host>[^ ]*) [^ ]* (?<user>[^ ]*) \[(?<time>[^\]]*)\] "(?<method>\S+)(?: +(?<path>[^ ]*) +\S*)?" (?<code>[^ ]*) (?<size>[^ ]*)(?: "(?<referer>[^\"]*)" "(?<agent>[^\"]*)")?$/
|
25
|
+
config_set_default :time_format, "%d/%b/%Y:%H:%M:%S %z"
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,88 @@
|
|
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/parser'
|
18
|
+
|
19
|
+
module Fluent
|
20
|
+
module Plugin
|
21
|
+
class Apache2Parser < Parser
|
22
|
+
Plugin.register_parser('apache2', self)
|
23
|
+
|
24
|
+
REGEXP = /^(?<host>[^ ]*) [^ ]* (?<user>[^ ]*) \[(?<time>[^\]]*)\] "(?<method>\S+)(?: +(?<path>(?:[^\"]|\\.)*?)(?: +\S*)?)?" (?<code>[^ ]*) (?<size>[^ ]*)(?: "(?<referer>(?:[^\"]|\\.)*)" "(?<agent>(?:[^\"]|\\.)*)")?$/
|
25
|
+
TIME_FORMAT = "%d/%b/%Y:%H:%M:%S %z"
|
26
|
+
|
27
|
+
def initialize
|
28
|
+
super
|
29
|
+
@mutex = Mutex.new
|
30
|
+
end
|
31
|
+
|
32
|
+
def configure(conf)
|
33
|
+
super
|
34
|
+
@time_parser = time_parser_create(format: TIME_FORMAT)
|
35
|
+
end
|
36
|
+
|
37
|
+
def patterns
|
38
|
+
{'format' => REGEXP, 'time_format' => TIME_FORMAT}
|
39
|
+
end
|
40
|
+
|
41
|
+
def parse(text)
|
42
|
+
m = REGEXP.match(text)
|
43
|
+
unless m
|
44
|
+
yield nil, nil
|
45
|
+
return
|
46
|
+
end
|
47
|
+
|
48
|
+
host = m['host']
|
49
|
+
host = (host == '-') ? nil : host
|
50
|
+
|
51
|
+
user = m['user']
|
52
|
+
user = (user == '-') ? nil : user
|
53
|
+
|
54
|
+
time = m['time']
|
55
|
+
time = @mutex.synchronize { @time_parser.parse(time) }
|
56
|
+
|
57
|
+
method = m['method']
|
58
|
+
path = m['path']
|
59
|
+
|
60
|
+
code = m['code'].to_i
|
61
|
+
code = nil if code == 0
|
62
|
+
|
63
|
+
size = m['size']
|
64
|
+
size = (size == '-') ? nil : size.to_i
|
65
|
+
|
66
|
+
referer = m['referer']
|
67
|
+
referer = (referer == '-') ? nil : referer
|
68
|
+
|
69
|
+
agent = m['agent']
|
70
|
+
agent = (agent == '-') ? nil : agent
|
71
|
+
|
72
|
+
record = {
|
73
|
+
"host" => host,
|
74
|
+
"user" => user,
|
75
|
+
"method" => method,
|
76
|
+
"path" => path,
|
77
|
+
"code" => code,
|
78
|
+
"size" => size,
|
79
|
+
"referer" => referer,
|
80
|
+
"agent" => agent,
|
81
|
+
}
|
82
|
+
record["time"] = m['time'] if @keep_time_key
|
83
|
+
|
84
|
+
yield time, record
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
88
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
#
|
2
|
+
# Fluentd
|
3
|
+
#
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
5
|
+
# you may not use this file except in compliance with the License.
|
6
|
+
# You may obtain a copy of the License at
|
7
|
+
#
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
9
|
+
#
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
12
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
13
|
+
# See the License for the specific language governing permissions and
|
14
|
+
# limitations under the License.
|
15
|
+
#
|
16
|
+
|
17
|
+
require 'fluent/plugin/parser_regexp'
|
18
|
+
|
19
|
+
module Fluent
|
20
|
+
module Plugin
|
21
|
+
class ApacheErrorParser < RegexpParser
|
22
|
+
Plugin.register_parser("apache_error", self)
|
23
|
+
config_set_default :expression, /^\[[^ ]* (?<time>[^\]]*)\] \[(?<level>[^\]]*)\](?: \[pid (?<pid>[^\]]*)\])?( \[client (?<client>[^\]]*)\])? (?<message>.*)$/
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,39 @@
|
|
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/parser'
|
18
|
+
|
19
|
+
require 'csv'
|
20
|
+
|
21
|
+
module Fluent
|
22
|
+
module Plugin
|
23
|
+
class CSVParser < Parser
|
24
|
+
Plugin.register_parser('csv', self)
|
25
|
+
|
26
|
+
desc 'Names of fields included in each lines'
|
27
|
+
config_param :keys, :array, value_type: :string
|
28
|
+
desc 'The delimiter character (or string) of CSV values'
|
29
|
+
config_param :delimiter, :string, default: ','
|
30
|
+
|
31
|
+
def parse(text, &block)
|
32
|
+
values = CSV.parse_line(text, col_sep: @delimiter)
|
33
|
+
r = Hash[@keys.zip(values)]
|
34
|
+
time, record = convert_values(parse_time(r), r)
|
35
|
+
yield time, record
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,94 @@
|
|
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/parser'
|
18
|
+
require 'fluent/env'
|
19
|
+
require 'fluent/time'
|
20
|
+
|
21
|
+
require 'yajl'
|
22
|
+
require 'json'
|
23
|
+
|
24
|
+
module Fluent
|
25
|
+
module Plugin
|
26
|
+
class JSONParser < Parser
|
27
|
+
Plugin.register_parser('json', self)
|
28
|
+
|
29
|
+
config_set_default :time_key, 'time'
|
30
|
+
desc 'Set JSON parser'
|
31
|
+
config_param :json_parser, :enum, list: [:oj, :yajl, :json], default: :oj
|
32
|
+
|
33
|
+
# The Yajl library defines a default buffer size of 8KiB when parsing
|
34
|
+
# from IO streams, so maintain this for backwards-compatibility.
|
35
|
+
# https://www.rubydoc.info/github/brianmario/yajl-ruby/Yajl%2FParser:parse
|
36
|
+
desc 'Set the buffer size that Yajl will use when parsing streaming input'
|
37
|
+
config_param :stream_buffer_size, :integer, default: 8192
|
38
|
+
|
39
|
+
config_set_default :time_type, :float
|
40
|
+
|
41
|
+
def configure(conf)
|
42
|
+
if conf.has_key?('time_format')
|
43
|
+
conf['time_type'] ||= 'string'
|
44
|
+
end
|
45
|
+
|
46
|
+
super
|
47
|
+
@load_proc, @error_class = configure_json_parser(@json_parser)
|
48
|
+
end
|
49
|
+
|
50
|
+
def configure_json_parser(name)
|
51
|
+
case name
|
52
|
+
when :oj
|
53
|
+
require 'oj'
|
54
|
+
Oj.default_options = Fluent::DEFAULT_OJ_OPTIONS
|
55
|
+
[Oj.method(:load), Oj::ParseError]
|
56
|
+
when :json then [JSON.method(:load), JSON::ParserError]
|
57
|
+
when :yajl then [Yajl.method(:load), Yajl::ParseError]
|
58
|
+
else
|
59
|
+
raise "BUG: unknown json parser specified: #{name}"
|
60
|
+
end
|
61
|
+
rescue LoadError => ex
|
62
|
+
name = :yajl
|
63
|
+
if log
|
64
|
+
if /\boj\z/ =~ ex.message
|
65
|
+
log.info "Oj is not installed, and failing back to Yajl for json parser"
|
66
|
+
else
|
67
|
+
log.warn ex.message
|
68
|
+
end
|
69
|
+
end
|
70
|
+
retry
|
71
|
+
end
|
72
|
+
|
73
|
+
def parse(text)
|
74
|
+
r = @load_proc.call(text)
|
75
|
+
time, record = convert_values(parse_time(r), r)
|
76
|
+
yield time, record
|
77
|
+
rescue @error_class, EncodingError # EncodingError is for oj 3.x or later
|
78
|
+
yield nil, nil
|
79
|
+
end
|
80
|
+
|
81
|
+
def parser_type
|
82
|
+
:text
|
83
|
+
end
|
84
|
+
|
85
|
+
def parse_io(io, &block)
|
86
|
+
y = Yajl::Parser.new
|
87
|
+
y.on_parse_complete = ->(record){
|
88
|
+
block.call(parse_time(record), record)
|
89
|
+
}
|
90
|
+
y.parse(io, @stream_buffer_size)
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
94
|
+
end
|
@@ -0,0 +1,49 @@
|
|
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/parser'
|
18
|
+
|
19
|
+
module Fluent
|
20
|
+
module Plugin
|
21
|
+
class LabeledTSVParser < Parser
|
22
|
+
Plugin.register_parser('ltsv', self)
|
23
|
+
|
24
|
+
desc 'The delimiter character (or string) of TSV values'
|
25
|
+
config_param :delimiter, :string, default: "\t"
|
26
|
+
desc 'The delimiter pattern of TSV values'
|
27
|
+
config_param :delimiter_pattern, :regexp, default: nil
|
28
|
+
desc 'The delimiter character between field name and value'
|
29
|
+
config_param :label_delimiter, :string, default: ":"
|
30
|
+
|
31
|
+
config_set_default :time_key, 'time'
|
32
|
+
|
33
|
+
def configure(conf)
|
34
|
+
super
|
35
|
+
@delimiter = @delimiter_pattern || @delimiter
|
36
|
+
end
|
37
|
+
|
38
|
+
def parse(text)
|
39
|
+
r = {}
|
40
|
+
text.split(@delimiter).each do |pair|
|
41
|
+
key, value = pair.split(@label_delimiter, 2)
|
42
|
+
r[key] = value
|
43
|
+
end
|
44
|
+
time, record = convert_values(parse_time(r), r)
|
45
|
+
yield time, record
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
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/parser'
|
18
|
+
require 'fluent/msgpack_factory'
|
19
|
+
|
20
|
+
module Fluent
|
21
|
+
module Plugin
|
22
|
+
class MessagePackParser < Parser
|
23
|
+
Plugin.register_parser('msgpack', self)
|
24
|
+
|
25
|
+
def configure(conf)
|
26
|
+
super
|
27
|
+
@unpacker = Fluent::MessagePackFactory.engine_factory.unpacker
|
28
|
+
end
|
29
|
+
|
30
|
+
def parser_type
|
31
|
+
:binary
|
32
|
+
end
|
33
|
+
|
34
|
+
def parse(data)
|
35
|
+
@unpacker.feed_each(data) do |obj|
|
36
|
+
yield convert_values(parse_time(obj), obj)
|
37
|
+
end
|
38
|
+
end
|
39
|
+
alias parse_partial_data parse
|
40
|
+
|
41
|
+
def parse_io(io, &block)
|
42
|
+
u = Fluent::MessagePackFactory.engine_factory.unpacker(io)
|
43
|
+
u.each do |obj|
|
44
|
+
time, record = convert_values(parse_time(obj), obj)
|
45
|
+
yield time, record
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|