fluentd222 1.16.2-x86_64-linux
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.deepsource.toml +13 -0
- data/.github/ISSUE_TEMPLATE/bug_report.yaml +71 -0
- data/.github/ISSUE_TEMPLATE/config.yml +5 -0
- data/.github/ISSUE_TEMPLATE/feature_request.yaml +39 -0
- data/.github/ISSUE_TEMPLATE.md +17 -0
- data/.github/PULL_REQUEST_TEMPLATE.md +14 -0
- data/.github/workflows/stale-actions.yml +24 -0
- data/.github/workflows/test-ruby-head.yaml +31 -0
- data/.github/workflows/test.yaml +32 -0
- data/.gitignore +30 -0
- data/ADOPTERS.md +5 -0
- data/AUTHORS +2 -0
- data/CHANGELOG.md +2720 -0
- data/CONTRIBUTING.md +45 -0
- data/GOVERNANCE.md +55 -0
- data/Gemfile +9 -0
- data/GithubWorkflow.md +78 -0
- data/LICENSE +202 -0
- data/MAINTAINERS.md +13 -0
- data/README.md +75 -0
- data/Rakefile +79 -0
- data/SECURITY.md +14 -0
- data/bin/fluent-binlog-reader +7 -0
- data/bin/fluent-ca-generate +6 -0
- data/bin/fluent-cap-ctl +7 -0
- data/bin/fluent-cat +5 -0
- data/bin/fluent-ctl +7 -0
- data/bin/fluent-debug +5 -0
- data/bin/fluent-gem +9 -0
- data/bin/fluent-plugin-config-format +5 -0
- data/bin/fluent-plugin-generate +5 -0
- data/bin/fluentd +15 -0
- data/code-of-conduct.md +3 -0
- data/docs/SECURITY_AUDIT.pdf +0 -0
- data/example/copy_roundrobin.conf +39 -0
- data/example/counter.conf +18 -0
- data/example/filter_stdout.conf +22 -0
- data/example/in_forward.conf +14 -0
- data/example/in_forward_client.conf +37 -0
- data/example/in_forward_shared_key.conf +15 -0
- data/example/in_forward_tls.conf +14 -0
- data/example/in_forward_users.conf +24 -0
- data/example/in_forward_workers.conf +21 -0
- data/example/in_http.conf +16 -0
- data/example/in_out_forward.conf +17 -0
- data/example/in_sample_blocks.conf +17 -0
- data/example/in_sample_with_compression.conf +23 -0
- data/example/in_syslog.conf +15 -0
- data/example/in_tail.conf +14 -0
- data/example/in_tcp.conf +13 -0
- data/example/in_udp.conf +13 -0
- data/example/logevents.conf +25 -0
- data/example/multi_filters.conf +61 -0
- data/example/out_copy.conf +20 -0
- data/example/out_exec_filter.conf +42 -0
- data/example/out_file.conf +13 -0
- data/example/out_forward.conf +35 -0
- data/example/out_forward_buf_file.conf +23 -0
- data/example/out_forward_client.conf +109 -0
- data/example/out_forward_heartbeat_none.conf +16 -0
- data/example/out_forward_sd.conf +17 -0
- data/example/out_forward_shared_key.conf +36 -0
- data/example/out_forward_tls.conf +18 -0
- data/example/out_forward_users.conf +65 -0
- data/example/out_null.conf +36 -0
- data/example/sd.yaml +8 -0
- data/example/secondary_file.conf +42 -0
- data/example/suppress_config_dump.conf +7 -0
- data/example/v0_12_filter.conf +78 -0
- data/example/v1_literal_example.conf +36 -0
- data/example/worker_section.conf +36 -0
- data/fluent.conf +139 -0
- data/fluentd.gemspec +54 -0
- data/lib/fluent/agent.rb +168 -0
- data/lib/fluent/capability.rb +87 -0
- data/lib/fluent/clock.rb +66 -0
- data/lib/fluent/command/binlog_reader.rb +244 -0
- data/lib/fluent/command/bundler_injection.rb +45 -0
- data/lib/fluent/command/ca_generate.rb +184 -0
- data/lib/fluent/command/cap_ctl.rb +174 -0
- data/lib/fluent/command/cat.rb +365 -0
- data/lib/fluent/command/ctl.rb +180 -0
- data/lib/fluent/command/debug.rb +103 -0
- data/lib/fluent/command/fluentd.rb +374 -0
- data/lib/fluent/command/plugin_config_formatter.rb +308 -0
- data/lib/fluent/command/plugin_generator.rb +365 -0
- data/lib/fluent/compat/call_super_mixin.rb +76 -0
- data/lib/fluent/compat/detach_process_mixin.rb +33 -0
- data/lib/fluent/compat/exec_util.rb +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 +721 -0
- data/lib/fluent/compat/output_chain.rb +60 -0
- data/lib/fluent/compat/parser.rb +310 -0
- data/lib/fluent/compat/parser_utils.rb +40 -0
- data/lib/fluent/compat/propagate_default.rb +62 -0
- data/lib/fluent/compat/record_filter_mixin.rb +34 -0
- data/lib/fluent/compat/set_tag_key_mixin.rb +50 -0
- data/lib/fluent/compat/set_time_key_mixin.rb +69 -0
- data/lib/fluent/compat/socket_util.rb +165 -0
- data/lib/fluent/compat/string_util.rb +34 -0
- data/lib/fluent/compat/structured_format_mixin.rb +26 -0
- data/lib/fluent/compat/type_converter.rb +90 -0
- data/lib/fluent/config/basic_parser.rb +123 -0
- data/lib/fluent/config/configure_proxy.rb +424 -0
- data/lib/fluent/config/dsl.rb +152 -0
- data/lib/fluent/config/element.rb +265 -0
- data/lib/fluent/config/error.rb +44 -0
- data/lib/fluent/config/literal_parser.rb +286 -0
- data/lib/fluent/config/parser.rb +107 -0
- data/lib/fluent/config/section.rb +272 -0
- data/lib/fluent/config/types.rb +249 -0
- data/lib/fluent/config/v1_parser.rb +192 -0
- data/lib/fluent/config/yaml_parser/fluent_value.rb +47 -0
- data/lib/fluent/config/yaml_parser/loader.rb +108 -0
- data/lib/fluent/config/yaml_parser/parser.rb +166 -0
- data/lib/fluent/config/yaml_parser/section_builder.rb +107 -0
- data/lib/fluent/config/yaml_parser.rb +56 -0
- data/lib/fluent/config.rb +89 -0
- data/lib/fluent/configurable.rb +201 -0
- data/lib/fluent/counter/base_socket.rb +44 -0
- data/lib/fluent/counter/client.rb +297 -0
- data/lib/fluent/counter/error.rb +86 -0
- data/lib/fluent/counter/mutex_hash.rb +163 -0
- data/lib/fluent/counter/server.rb +273 -0
- data/lib/fluent/counter/store.rb +205 -0
- data/lib/fluent/counter/validator.rb +145 -0
- data/lib/fluent/counter.rb +23 -0
- data/lib/fluent/daemon.rb +13 -0
- data/lib/fluent/daemonizer.rb +88 -0
- data/lib/fluent/engine.rb +253 -0
- data/lib/fluent/env.rb +40 -0
- data/lib/fluent/error.rb +37 -0
- data/lib/fluent/event.rb +330 -0
- data/lib/fluent/event_router.rb +315 -0
- data/lib/fluent/ext_monitor_require.rb +28 -0
- data/lib/fluent/file_wrapper.rb +137 -0
- data/lib/fluent/filter.rb +21 -0
- data/lib/fluent/fluent_log_event_router.rb +139 -0
- data/lib/fluent/formatter.rb +23 -0
- data/lib/fluent/input.rb +21 -0
- data/lib/fluent/label.rb +46 -0
- data/lib/fluent/load.rb +34 -0
- data/lib/fluent/log/console_adapter.rb +66 -0
- data/lib/fluent/log.rb +752 -0
- data/lib/fluent/match.rb +187 -0
- data/lib/fluent/mixin.rb +31 -0
- data/lib/fluent/msgpack_factory.rb +111 -0
- data/lib/fluent/oj_options.rb +61 -0
- data/lib/fluent/output.rb +29 -0
- data/lib/fluent/output_chain.rb +23 -0
- data/lib/fluent/parser.rb +23 -0
- data/lib/fluent/plugin/bare_output.rb +104 -0
- data/lib/fluent/plugin/base.rb +214 -0
- data/lib/fluent/plugin/buf_file.rb +242 -0
- data/lib/fluent/plugin/buf_file_single.rb +254 -0
- data/lib/fluent/plugin/buf_memory.rb +34 -0
- data/lib/fluent/plugin/buffer/chunk.rb +240 -0
- data/lib/fluent/plugin/buffer/file_chunk.rb +413 -0
- data/lib/fluent/plugin/buffer/file_single_chunk.rb +310 -0
- data/lib/fluent/plugin/buffer/memory_chunk.rb +91 -0
- data/lib/fluent/plugin/buffer.rb +941 -0
- data/lib/fluent/plugin/compressable.rb +96 -0
- data/lib/fluent/plugin/exec_util.rb +22 -0
- data/lib/fluent/plugin/file_util.rb +22 -0
- data/lib/fluent/plugin/filter.rb +127 -0
- data/lib/fluent/plugin/filter_grep.rb +189 -0
- data/lib/fluent/plugin/filter_parser.rb +130 -0
- data/lib/fluent/plugin/filter_record_transformer.rb +324 -0
- data/lib/fluent/plugin/filter_stdout.rb +53 -0
- data/lib/fluent/plugin/formatter.rb +75 -0
- data/lib/fluent/plugin/formatter_csv.rb +78 -0
- data/lib/fluent/plugin/formatter_hash.rb +35 -0
- data/lib/fluent/plugin/formatter_json.rb +59 -0
- data/lib/fluent/plugin/formatter_ltsv.rb +44 -0
- data/lib/fluent/plugin/formatter_msgpack.rb +33 -0
- data/lib/fluent/plugin/formatter_out_file.rb +53 -0
- data/lib/fluent/plugin/formatter_single_value.rb +36 -0
- data/lib/fluent/plugin/formatter_stdout.rb +76 -0
- data/lib/fluent/plugin/formatter_tsv.rb +40 -0
- data/lib/fluent/plugin/in_debug_agent.rb +71 -0
- data/lib/fluent/plugin/in_dummy.rb +18 -0
- data/lib/fluent/plugin/in_exec.rb +110 -0
- data/lib/fluent/plugin/in_forward.rb +473 -0
- data/lib/fluent/plugin/in_gc_stat.rb +72 -0
- data/lib/fluent/plugin/in_http.rb +677 -0
- data/lib/fluent/plugin/in_monitor_agent.rb +412 -0
- data/lib/fluent/plugin/in_object_space.rb +93 -0
- data/lib/fluent/plugin/in_sample.rb +141 -0
- data/lib/fluent/plugin/in_syslog.rb +276 -0
- data/lib/fluent/plugin/in_tail/group_watch.rb +204 -0
- data/lib/fluent/plugin/in_tail/position_file.rb +269 -0
- data/lib/fluent/plugin/in_tail.rb +1299 -0
- data/lib/fluent/plugin/in_tcp.rb +226 -0
- data/lib/fluent/plugin/in_udp.rb +92 -0
- data/lib/fluent/plugin/in_unix.rb +195 -0
- data/lib/fluent/plugin/input.rb +75 -0
- data/lib/fluent/plugin/metrics.rb +119 -0
- data/lib/fluent/plugin/metrics_local.rb +96 -0
- data/lib/fluent/plugin/multi_output.rb +195 -0
- data/lib/fluent/plugin/out_copy.rb +120 -0
- data/lib/fluent/plugin/out_exec.rb +105 -0
- data/lib/fluent/plugin/out_exec_filter.rb +319 -0
- data/lib/fluent/plugin/out_file.rb +340 -0
- data/lib/fluent/plugin/out_forward/ack_handler.rb +176 -0
- data/lib/fluent/plugin/out_forward/connection_manager.rb +113 -0
- data/lib/fluent/plugin/out_forward/error.rb +28 -0
- data/lib/fluent/plugin/out_forward/failure_detector.rb +84 -0
- data/lib/fluent/plugin/out_forward/handshake_protocol.rb +125 -0
- data/lib/fluent/plugin/out_forward/load_balancer.rb +114 -0
- data/lib/fluent/plugin/out_forward/socket_cache.rb +142 -0
- data/lib/fluent/plugin/out_forward.rb +826 -0
- data/lib/fluent/plugin/out_http.rb +275 -0
- data/lib/fluent/plugin/out_null.rb +74 -0
- data/lib/fluent/plugin/out_relabel.rb +32 -0
- data/lib/fluent/plugin/out_roundrobin.rb +84 -0
- data/lib/fluent/plugin/out_secondary_file.rb +148 -0
- data/lib/fluent/plugin/out_stdout.rb +74 -0
- data/lib/fluent/plugin/out_stream.rb +130 -0
- data/lib/fluent/plugin/output.rb +1603 -0
- data/lib/fluent/plugin/owned_by_mixin.rb +41 -0
- data/lib/fluent/plugin/parser.rb +274 -0
- data/lib/fluent/plugin/parser_apache.rb +28 -0
- data/lib/fluent/plugin/parser_apache2.rb +88 -0
- data/lib/fluent/plugin/parser_apache_error.rb +26 -0
- data/lib/fluent/plugin/parser_csv.rb +114 -0
- data/lib/fluent/plugin/parser_json.rb +96 -0
- data/lib/fluent/plugin/parser_ltsv.rb +51 -0
- data/lib/fluent/plugin/parser_msgpack.rb +50 -0
- data/lib/fluent/plugin/parser_multiline.rb +152 -0
- data/lib/fluent/plugin/parser_nginx.rb +28 -0
- data/lib/fluent/plugin/parser_none.rb +36 -0
- data/lib/fluent/plugin/parser_regexp.rb +68 -0
- data/lib/fluent/plugin/parser_syslog.rb +496 -0
- data/lib/fluent/plugin/parser_tsv.rb +42 -0
- data/lib/fluent/plugin/sd_file.rb +156 -0
- data/lib/fluent/plugin/sd_srv.rb +135 -0
- data/lib/fluent/plugin/sd_static.rb +58 -0
- data/lib/fluent/plugin/service_discovery.rb +65 -0
- data/lib/fluent/plugin/socket_util.rb +22 -0
- data/lib/fluent/plugin/storage.rb +84 -0
- data/lib/fluent/plugin/storage_local.rb +162 -0
- data/lib/fluent/plugin/string_util.rb +22 -0
- data/lib/fluent/plugin.rb +206 -0
- data/lib/fluent/plugin_helper/cert_option.rb +191 -0
- data/lib/fluent/plugin_helper/child_process.rb +369 -0
- data/lib/fluent/plugin_helper/compat_parameters.rb +343 -0
- data/lib/fluent/plugin_helper/counter.rb +51 -0
- data/lib/fluent/plugin_helper/event_emitter.rb +100 -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 +92 -0
- data/lib/fluent/plugin_helper/http_server/compat/ssl_context_extractor.rb +52 -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 +94 -0
- data/lib/fluent/plugin_helper/http_server/ssl_context_builder.rb +41 -0
- data/lib/fluent/plugin_helper/http_server.rb +135 -0
- data/lib/fluent/plugin_helper/inject.rb +154 -0
- data/lib/fluent/plugin_helper/metrics.rb +129 -0
- data/lib/fluent/plugin_helper/parser.rb +147 -0
- data/lib/fluent/plugin_helper/record_accessor.rb +207 -0
- data/lib/fluent/plugin_helper/retry_state.rb +219 -0
- data/lib/fluent/plugin_helper/server.rb +828 -0
- data/lib/fluent/plugin_helper/service_discovery/manager.rb +146 -0
- data/lib/fluent/plugin_helper/service_discovery/round_robin_balancer.rb +43 -0
- data/lib/fluent/plugin_helper/service_discovery.rb +125 -0
- data/lib/fluent/plugin_helper/socket.rb +288 -0
- data/lib/fluent/plugin_helper/socket_option.rb +98 -0
- data/lib/fluent/plugin_helper/storage.rb +349 -0
- data/lib/fluent/plugin_helper/thread.rb +180 -0
- data/lib/fluent/plugin_helper/timer.rb +92 -0
- data/lib/fluent/plugin_helper.rb +75 -0
- data/lib/fluent/plugin_id.rb +93 -0
- data/lib/fluent/process.rb +22 -0
- data/lib/fluent/registry.rb +117 -0
- data/lib/fluent/root_agent.rb +372 -0
- data/lib/fluent/rpc.rb +95 -0
- data/lib/fluent/static_config_analysis.rb +194 -0
- data/lib/fluent/supervisor.rb +1076 -0
- data/lib/fluent/system_config.rb +189 -0
- data/lib/fluent/test/base.rb +78 -0
- data/lib/fluent/test/driver/base.rb +231 -0
- data/lib/fluent/test/driver/base_owned.rb +83 -0
- data/lib/fluent/test/driver/base_owner.rb +135 -0
- data/lib/fluent/test/driver/event_feeder.rb +98 -0
- data/lib/fluent/test/driver/filter.rb +61 -0
- data/lib/fluent/test/driver/formatter.rb +30 -0
- data/lib/fluent/test/driver/input.rb +31 -0
- data/lib/fluent/test/driver/multi_output.rb +53 -0
- data/lib/fluent/test/driver/output.rb +102 -0
- data/lib/fluent/test/driver/parser.rb +30 -0
- data/lib/fluent/test/driver/storage.rb +30 -0
- data/lib/fluent/test/driver/test_event_router.rb +45 -0
- data/lib/fluent/test/filter_test.rb +77 -0
- data/lib/fluent/test/formatter_test.rb +65 -0
- data/lib/fluent/test/helpers.rb +134 -0
- data/lib/fluent/test/input_test.rb +174 -0
- data/lib/fluent/test/log.rb +79 -0
- data/lib/fluent/test/output_test.rb +156 -0
- data/lib/fluent/test/parser_test.rb +70 -0
- data/lib/fluent/test/startup_shutdown.rb +44 -0
- data/lib/fluent/test.rb +58 -0
- data/lib/fluent/time.rb +512 -0
- data/lib/fluent/timezone.rb +171 -0
- data/lib/fluent/tls.rb +81 -0
- data/lib/fluent/unique_id.rb +39 -0
- data/lib/fluent/variable_store.rb +40 -0
- data/lib/fluent/version.rb +21 -0
- data/lib/fluent/win32api.rb +38 -0
- data/lib/fluent/winsvc.rb +100 -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/lib/fluent/plugin/storage.rb.erb +40 -0
- data/templates/new_gem/test/helper.rb.erb +7 -0
- data/templates/new_gem/test/plugin/test_filter.rb.erb +18 -0
- data/templates/new_gem/test/plugin/test_formatter.rb.erb +18 -0
- data/templates/new_gem/test/plugin/test_input.rb.erb +18 -0
- data/templates/new_gem/test/plugin/test_output.rb.erb +18 -0
- data/templates/new_gem/test/plugin/test_parser.rb.erb +18 -0
- data/templates/new_gem/test/plugin/test_storage.rb.erb +18 -0
- data/templates/plugin_config_formatter/param.md-compact.erb +25 -0
- data/templates/plugin_config_formatter/param.md-table.erb +10 -0
- data/templates/plugin_config_formatter/param.md.erb +34 -0
- data/templates/plugin_config_formatter/section.md.erb +12 -0
- data/test/command/test_binlog_reader.rb +362 -0
- data/test/command/test_ca_generate.rb +70 -0
- data/test/command/test_cap_ctl.rb +100 -0
- data/test/command/test_cat.rb +128 -0
- data/test/command/test_ctl.rb +56 -0
- data/test/command/test_fluentd.rb +1291 -0
- data/test/command/test_plugin_config_formatter.rb +397 -0
- data/test/command/test_plugin_generator.rb +109 -0
- data/test/compat/test_calls_super.rb +166 -0
- data/test/compat/test_parser.rb +92 -0
- data/test/config/assertions.rb +42 -0
- data/test/config/test_config_parser.rb +551 -0
- data/test/config/test_configurable.rb +1784 -0
- data/test/config/test_configure_proxy.rb +604 -0
- data/test/config/test_dsl.rb +415 -0
- data/test/config/test_element.rb +518 -0
- data/test/config/test_literal_parser.rb +309 -0
- data/test/config/test_plugin_configuration.rb +56 -0
- data/test/config/test_section.rb +191 -0
- data/test/config/test_system_config.rb +195 -0
- data/test/config/test_types.rb +408 -0
- data/test/counter/test_client.rb +563 -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 +155 -0
- data/test/helpers/fuzzy_assert.rb +89 -0
- data/test/helpers/process_extenstion.rb +33 -0
- data/test/log/test_console_adapter.rb +110 -0
- data/test/plugin/data/2010/01/20100102-030405.log +0 -0
- data/test/plugin/data/2010/01/20100102-030406.log +0 -0
- data/test/plugin/data/2010/01/20100102.log +0 -0
- data/test/plugin/data/log/bar +0 -0
- data/test/plugin/data/log/foo/bar.log +0 -0
- data/test/plugin/data/log/foo/bar2 +0 -0
- data/test/plugin/data/log/test.log +0 -0
- data/test/plugin/data/sd_file/config +11 -0
- data/test/plugin/data/sd_file/config.json +17 -0
- data/test/plugin/data/sd_file/config.yaml +11 -0
- data/test/plugin/data/sd_file/config.yml +11 -0
- data/test/plugin/data/sd_file/invalid_config.yml +7 -0
- data/test/plugin/in_tail/test_fifo.rb +121 -0
- data/test/plugin/in_tail/test_io_handler.rb +150 -0
- data/test/plugin/in_tail/test_position_file.rb +346 -0
- data/test/plugin/out_forward/test_ack_handler.rb +140 -0
- data/test/plugin/out_forward/test_connection_manager.rb +145 -0
- data/test/plugin/out_forward/test_handshake_protocol.rb +112 -0
- data/test/plugin/out_forward/test_load_balancer.rb +106 -0
- data/test/plugin/out_forward/test_socket_cache.rb +174 -0
- data/test/plugin/test_bare_output.rb +131 -0
- data/test/plugin/test_base.rb +247 -0
- data/test/plugin/test_buf_file.rb +1314 -0
- data/test/plugin/test_buf_file_single.rb +898 -0
- data/test/plugin/test_buf_memory.rb +42 -0
- data/test/plugin/test_buffer.rb +1434 -0
- data/test/plugin/test_buffer_chunk.rb +209 -0
- data/test/plugin/test_buffer_file_chunk.rb +871 -0
- data/test/plugin/test_buffer_file_single_chunk.rb +611 -0
- data/test/plugin/test_buffer_memory_chunk.rb +339 -0
- data/test/plugin/test_compressable.rb +87 -0
- data/test/plugin/test_file_util.rb +96 -0
- data/test/plugin/test_filter.rb +368 -0
- data/test/plugin/test_filter_grep.rb +697 -0
- data/test/plugin/test_filter_parser.rb +731 -0
- data/test/plugin/test_filter_record_transformer.rb +577 -0
- data/test/plugin/test_filter_stdout.rb +207 -0
- data/test/plugin/test_formatter_csv.rb +136 -0
- data/test/plugin/test_formatter_hash.rb +38 -0
- data/test/plugin/test_formatter_json.rb +61 -0
- data/test/plugin/test_formatter_ltsv.rb +70 -0
- data/test/plugin/test_formatter_msgpack.rb +28 -0
- data/test/plugin/test_formatter_out_file.rb +116 -0
- data/test/plugin/test_formatter_single_value.rb +44 -0
- data/test/plugin/test_formatter_tsv.rb +76 -0
- data/test/plugin/test_in_debug_agent.rb +49 -0
- data/test/plugin/test_in_exec.rb +261 -0
- data/test/plugin/test_in_forward.rb +1178 -0
- data/test/plugin/test_in_gc_stat.rb +62 -0
- data/test/plugin/test_in_http.rb +1102 -0
- data/test/plugin/test_in_monitor_agent.rb +922 -0
- data/test/plugin/test_in_object_space.rb +66 -0
- data/test/plugin/test_in_sample.rb +190 -0
- data/test/plugin/test_in_syslog.rb +505 -0
- data/test/plugin/test_in_tail.rb +3125 -0
- data/test/plugin/test_in_tcp.rb +328 -0
- data/test/plugin/test_in_udp.rb +296 -0
- data/test/plugin/test_in_unix.rb +181 -0
- data/test/plugin/test_input.rb +137 -0
- data/test/plugin/test_metadata.rb +89 -0
- data/test/plugin/test_metrics.rb +294 -0
- data/test/plugin/test_metrics_local.rb +96 -0
- data/test/plugin/test_multi_output.rb +204 -0
- data/test/plugin/test_out_copy.rb +308 -0
- data/test/plugin/test_out_exec.rb +312 -0
- data/test/plugin/test_out_exec_filter.rb +606 -0
- data/test/plugin/test_out_file.rb +1038 -0
- data/test/plugin/test_out_forward.rb +1361 -0
- data/test/plugin/test_out_http.rb +429 -0
- 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 +146 -0
- data/test/plugin/test_out_secondary_file.rb +458 -0
- data/test/plugin/test_out_stdout.rb +205 -0
- data/test/plugin/test_out_stream.rb +103 -0
- data/test/plugin/test_output.rb +1334 -0
- data/test/plugin/test_output_as_buffered.rb +2024 -0
- data/test/plugin/test_output_as_buffered_backup.rb +363 -0
- data/test/plugin/test_output_as_buffered_compress.rb +179 -0
- data/test/plugin/test_output_as_buffered_overflow.rb +250 -0
- data/test/plugin/test_output_as_buffered_retries.rb +966 -0
- data/test/plugin/test_output_as_buffered_secondary.rb +882 -0
- data/test/plugin/test_output_as_standard.rb +374 -0
- data/test/plugin/test_owned_by.rb +34 -0
- data/test/plugin/test_parser.rb +399 -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 +200 -0
- data/test/plugin/test_parser_json.rb +138 -0
- data/test/plugin/test_parser_labeled_tsv.rb +160 -0
- data/test/plugin/test_parser_multiline.rb +111 -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 +284 -0
- data/test/plugin/test_parser_syslog.rb +650 -0
- data/test/plugin/test_parser_tsv.rb +122 -0
- data/test/plugin/test_sd_file.rb +228 -0
- data/test/plugin/test_sd_srv.rb +230 -0
- data/test/plugin/test_storage.rb +166 -0
- data/test/plugin/test_storage_local.rb +335 -0
- data/test/plugin/test_string_util.rb +26 -0
- data/test/plugin_helper/data/cert/cert-key.pem +27 -0
- data/test/plugin_helper/data/cert/cert-with-CRLF.pem +19 -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/data/cert/cert_chains/ca-cert-key.pem +27 -0
- data/test/plugin_helper/data/cert/cert_chains/ca-cert.pem +20 -0
- data/test/plugin_helper/data/cert/cert_chains/cert-key.pem +27 -0
- data/test/plugin_helper/data/cert/cert_chains/cert.pem +40 -0
- data/test/plugin_helper/data/cert/empty.pem +0 -0
- data/test/plugin_helper/data/cert/generate_cert.rb +125 -0
- data/test/plugin_helper/data/cert/with_ca/ca-cert-key-pass.pem +30 -0
- data/test/plugin_helper/data/cert/with_ca/ca-cert-key.pem +27 -0
- data/test/plugin_helper/data/cert/with_ca/ca-cert-pass.pem +20 -0
- data/test/plugin_helper/data/cert/with_ca/ca-cert.pem +20 -0
- data/test/plugin_helper/data/cert/with_ca/cert-key-pass.pem +30 -0
- data/test/plugin_helper/data/cert/with_ca/cert-key.pem +27 -0
- data/test/plugin_helper/data/cert/with_ca/cert-pass.pem +21 -0
- data/test/plugin_helper/data/cert/with_ca/cert.pem +21 -0
- data/test/plugin_helper/data/cert/without_ca/cert-key-pass.pem +30 -0
- data/test/plugin_helper/data/cert/without_ca/cert-key.pem +27 -0
- data/test/plugin_helper/data/cert/without_ca/cert-pass.pem +20 -0
- data/test/plugin_helper/data/cert/without_ca/cert.pem +20 -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/service_discovery/test_manager.rb +93 -0
- data/test/plugin_helper/service_discovery/test_round_robin_balancer.rb +21 -0
- data/test/plugin_helper/test_cert_option.rb +25 -0
- data/test/plugin_helper/test_child_process.rb +862 -0
- data/test/plugin_helper/test_compat_parameters.rb +358 -0
- data/test/plugin_helper/test_event_emitter.rb +80 -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 +372 -0
- data/test/plugin_helper/test_inject.rb +561 -0
- data/test/plugin_helper/test_metrics.rb +137 -0
- data/test/plugin_helper/test_parser.rb +264 -0
- data/test/plugin_helper/test_record_accessor.rb +238 -0
- data/test/plugin_helper/test_retry_state.rb +1006 -0
- data/test/plugin_helper/test_server.rb +1895 -0
- data/test/plugin_helper/test_service_discovery.rb +165 -0
- data/test/plugin_helper/test_socket.rb +146 -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 +130 -0
- data/test/scripts/exec_script.rb +32 -0
- 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/formatter_known.rb +8 -0
- data/test/scripts/fluent/plugin/out_test.rb +81 -0
- data/test/scripts/fluent/plugin/out_test2.rb +80 -0
- data/test/scripts/fluent/plugin/parser_known.rb +4 -0
- data/test/test_capability.rb +74 -0
- data/test/test_clock.rb +164 -0
- data/test/test_config.rb +369 -0
- data/test/test_configdsl.rb +148 -0
- data/test/test_daemonizer.rb +91 -0
- data/test/test_engine.rb +203 -0
- data/test/test_event.rb +531 -0
- data/test/test_event_router.rb +348 -0
- data/test/test_event_time.rb +199 -0
- data/test/test_file_wrapper.rb +53 -0
- data/test/test_filter.rb +121 -0
- data/test/test_fluent_log_event_router.rb +99 -0
- data/test/test_formatter.rb +369 -0
- data/test/test_input.rb +31 -0
- data/test/test_log.rb +1076 -0
- data/test/test_match.rb +148 -0
- data/test/test_mixin.rb +351 -0
- data/test/test_msgpack_factory.rb +50 -0
- data/test/test_oj_options.rb +55 -0
- data/test/test_output.rb +278 -0
- data/test/test_plugin.rb +251 -0
- data/test/test_plugin_classes.rb +370 -0
- data/test/test_plugin_helper.rb +81 -0
- data/test/test_plugin_id.rb +119 -0
- data/test/test_process.rb +14 -0
- data/test/test_root_agent.rb +951 -0
- data/test/test_static_config_analysis.rb +177 -0
- data/test/test_supervisor.rb +821 -0
- data/test/test_test_drivers.rb +136 -0
- data/test/test_time_formatter.rb +301 -0
- data/test/test_time_parser.rb +362 -0
- data/test/test_tls.rb +65 -0
- data/test/test_unique_id.rb +47 -0
- data/test/test_variable_store.rb +65 -0
- metadata +1183 -0
@@ -0,0 +1,324 @@
|
|
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 'socket'
|
18
|
+
require 'json'
|
19
|
+
require 'ostruct'
|
20
|
+
|
21
|
+
require 'fluent/plugin/filter'
|
22
|
+
require 'fluent/config/error'
|
23
|
+
require 'fluent/event'
|
24
|
+
require 'fluent/time'
|
25
|
+
|
26
|
+
module Fluent::Plugin
|
27
|
+
class RecordTransformerFilter < Fluent::Plugin::Filter
|
28
|
+
Fluent::Plugin.register_filter('record_transformer', self)
|
29
|
+
|
30
|
+
helpers :record_accessor
|
31
|
+
|
32
|
+
desc 'A comma-delimited list of keys to delete.'
|
33
|
+
config_param :remove_keys, :array, default: nil
|
34
|
+
desc 'A comma-delimited list of keys to keep.'
|
35
|
+
config_param :keep_keys, :array, default: nil
|
36
|
+
desc 'Create new Hash to transform incoming data'
|
37
|
+
config_param :renew_record, :bool, default: false
|
38
|
+
desc 'Specify field name of the record to overwrite the time of events. Its value must be unix time.'
|
39
|
+
config_param :renew_time_key, :string, default: nil
|
40
|
+
desc 'When set to true, the full Ruby syntax is enabled in the ${...} expression.'
|
41
|
+
config_param :enable_ruby, :bool, default: false
|
42
|
+
desc 'Use original value type.'
|
43
|
+
config_param :auto_typecast, :bool, default: true
|
44
|
+
|
45
|
+
def configure(conf)
|
46
|
+
super
|
47
|
+
|
48
|
+
map = {}
|
49
|
+
# <record></record> directive
|
50
|
+
conf.elements.select { |element| element.name == 'record' }.each do |element|
|
51
|
+
element.each_pair do |k, v|
|
52
|
+
element.has_key?(k) # to suppress unread configuration warning
|
53
|
+
map[k] = parse_value(v)
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
if @keep_keys
|
58
|
+
raise Fluent::ConfigError, "`renew_record` must be true to use `keep_keys`" unless @renew_record
|
59
|
+
end
|
60
|
+
|
61
|
+
@key_deleters = if @remove_keys
|
62
|
+
@remove_keys.map { |k| record_accessor_create(k) }
|
63
|
+
end
|
64
|
+
|
65
|
+
placeholder_expander_params = {
|
66
|
+
log: log,
|
67
|
+
auto_typecast: @auto_typecast,
|
68
|
+
}
|
69
|
+
@placeholder_expander =
|
70
|
+
if @enable_ruby
|
71
|
+
# require utilities which would be used in ruby placeholders
|
72
|
+
require 'pathname'
|
73
|
+
require 'uri'
|
74
|
+
require 'cgi'
|
75
|
+
RubyPlaceholderExpander.new(placeholder_expander_params)
|
76
|
+
else
|
77
|
+
PlaceholderExpander.new(placeholder_expander_params)
|
78
|
+
end
|
79
|
+
@map = @placeholder_expander.preprocess_map(map)
|
80
|
+
|
81
|
+
@hostname = Socket.gethostname
|
82
|
+
end
|
83
|
+
|
84
|
+
def filter_stream(tag, es)
|
85
|
+
new_es = Fluent::MultiEventStream.new
|
86
|
+
tag_parts = tag.split('.')
|
87
|
+
tag_prefix = tag_prefix(tag_parts)
|
88
|
+
tag_suffix = tag_suffix(tag_parts)
|
89
|
+
placeholder_values = {
|
90
|
+
'tag' => tag,
|
91
|
+
'tag_parts' => tag_parts,
|
92
|
+
'tag_prefix' => tag_prefix,
|
93
|
+
'tag_suffix' => tag_suffix,
|
94
|
+
'hostname' => @hostname,
|
95
|
+
}
|
96
|
+
es.each do |time, record|
|
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}" }
|
110
|
+
end
|
111
|
+
end
|
112
|
+
new_es
|
113
|
+
end
|
114
|
+
|
115
|
+
private
|
116
|
+
|
117
|
+
def parse_value(value_str)
|
118
|
+
if value_str.start_with?('{', '[')
|
119
|
+
JSON.parse(value_str)
|
120
|
+
else
|
121
|
+
value_str
|
122
|
+
end
|
123
|
+
rescue => e
|
124
|
+
log.warn "failed to parse #{value_str} as json. Assuming #{value_str} is a string", error: e
|
125
|
+
value_str # emit as string
|
126
|
+
end
|
127
|
+
|
128
|
+
def reform(record, placeholder_values)
|
129
|
+
placeholders = @placeholder_expander.prepare_placeholders(placeholder_values)
|
130
|
+
|
131
|
+
new_record = @renew_record ? {} : record.dup
|
132
|
+
@keep_keys.each do |k|
|
133
|
+
new_record[k] = record[k] if record.has_key?(k)
|
134
|
+
end if @keep_keys && @renew_record
|
135
|
+
new_record.merge!(expand_placeholders(@map, placeholders))
|
136
|
+
|
137
|
+
new_record
|
138
|
+
end
|
139
|
+
|
140
|
+
def expand_placeholders(value, placeholders)
|
141
|
+
if value.is_a?(String)
|
142
|
+
new_value = @placeholder_expander.expand(value, placeholders)
|
143
|
+
elsif value.is_a?(Hash)
|
144
|
+
new_value = {}
|
145
|
+
value.each_pair do |k, v|
|
146
|
+
new_key = @placeholder_expander.expand(k, placeholders, true)
|
147
|
+
new_value[new_key] = expand_placeholders(v, placeholders)
|
148
|
+
end
|
149
|
+
elsif value.is_a?(Array)
|
150
|
+
new_value = []
|
151
|
+
value.each_with_index do |v, i|
|
152
|
+
new_value[i] = expand_placeholders(v, placeholders)
|
153
|
+
end
|
154
|
+
else
|
155
|
+
new_value = value
|
156
|
+
end
|
157
|
+
new_value
|
158
|
+
end
|
159
|
+
|
160
|
+
def tag_prefix(tag_parts)
|
161
|
+
return [] if tag_parts.empty?
|
162
|
+
tag_prefix = [tag_parts.first]
|
163
|
+
1.upto(tag_parts.size-1).each do |i|
|
164
|
+
tag_prefix[i] = "#{tag_prefix[i-1]}.#{tag_parts[i]}"
|
165
|
+
end
|
166
|
+
tag_prefix
|
167
|
+
end
|
168
|
+
|
169
|
+
def tag_suffix(tag_parts)
|
170
|
+
return [] if tag_parts.empty?
|
171
|
+
rev_tag_parts = tag_parts.reverse
|
172
|
+
rev_tag_suffix = [rev_tag_parts.first]
|
173
|
+
1.upto(tag_parts.size-1).each do |i|
|
174
|
+
rev_tag_suffix[i] = "#{rev_tag_parts[i]}.#{rev_tag_suffix[i-1]}"
|
175
|
+
end
|
176
|
+
rev_tag_suffix.reverse!
|
177
|
+
end
|
178
|
+
|
179
|
+
# THIS CLASS MUST BE THREAD-SAFE
|
180
|
+
class PlaceholderExpander
|
181
|
+
attr_reader :placeholders, :log
|
182
|
+
|
183
|
+
def initialize(params)
|
184
|
+
@log = params[:log]
|
185
|
+
@auto_typecast = params[:auto_typecast]
|
186
|
+
end
|
187
|
+
|
188
|
+
def time_value(time)
|
189
|
+
Time.at(time).to_s
|
190
|
+
end
|
191
|
+
|
192
|
+
def preprocess_map(value, force_stringify = false)
|
193
|
+
value
|
194
|
+
end
|
195
|
+
|
196
|
+
def prepare_placeholders(placeholder_values)
|
197
|
+
placeholders = {}
|
198
|
+
|
199
|
+
placeholder_values.each do |key, value|
|
200
|
+
if value.kind_of?(Array) # tag_parts, etc
|
201
|
+
size = value.size
|
202
|
+
value.each_with_index do |v, idx|
|
203
|
+
placeholders.store("${#{key}[#{idx}]}", v)
|
204
|
+
placeholders.store("${#{key}[#{idx-size}]}", v) # support [-1]
|
205
|
+
end
|
206
|
+
elsif value.kind_of?(Hash) # record, etc
|
207
|
+
value.each do |k, v|
|
208
|
+
placeholders.store(%Q[${#{key}["#{k}"]}], v) # record["foo"]
|
209
|
+
end
|
210
|
+
else # string, interger, float, and others?
|
211
|
+
placeholders.store("${#{key}}", value)
|
212
|
+
end
|
213
|
+
end
|
214
|
+
|
215
|
+
placeholders
|
216
|
+
end
|
217
|
+
|
218
|
+
# Expand string with placeholders
|
219
|
+
#
|
220
|
+
# @param [String] str
|
221
|
+
# @param [Boolean] force_stringify the value must be string, used for hash key
|
222
|
+
def expand(str, placeholders, force_stringify = false)
|
223
|
+
if @auto_typecast && !force_stringify
|
224
|
+
single_placeholder_matched = str.match(/\A(\${[^}]+}|__[A-Z_]+__)\z/)
|
225
|
+
if single_placeholder_matched
|
226
|
+
log_if_unknown_placeholder($1, placeholders)
|
227
|
+
return placeholders[single_placeholder_matched[1]]
|
228
|
+
end
|
229
|
+
end
|
230
|
+
str.gsub(/(\${[^}]+}|__[A-Z_]+__)/) {
|
231
|
+
log_if_unknown_placeholder($1, placeholders)
|
232
|
+
placeholders[$1]
|
233
|
+
}
|
234
|
+
end
|
235
|
+
|
236
|
+
private
|
237
|
+
|
238
|
+
def log_if_unknown_placeholder(placeholder, placeholders)
|
239
|
+
unless placeholders.include?(placeholder)
|
240
|
+
log.warn "unknown placeholder `#{placeholder}` found"
|
241
|
+
end
|
242
|
+
end
|
243
|
+
end
|
244
|
+
|
245
|
+
# THIS CLASS MUST BE THREAD-SAFE
|
246
|
+
class RubyPlaceholderExpander
|
247
|
+
attr_reader :log
|
248
|
+
|
249
|
+
def initialize(params)
|
250
|
+
@log = params[:log]
|
251
|
+
@auto_typecast = params[:auto_typecast]
|
252
|
+
@cleanroom_expander = CleanroomExpander.new
|
253
|
+
end
|
254
|
+
|
255
|
+
def time_value(time)
|
256
|
+
Time.at(time)
|
257
|
+
end
|
258
|
+
|
259
|
+
# Preprocess record map to convert into ruby string expansion
|
260
|
+
#
|
261
|
+
# @param [Hash|String|Array] value record map config
|
262
|
+
# @param [Boolean] force_stringify the value must be string, used for hash key
|
263
|
+
def preprocess_map(value, force_stringify = false)
|
264
|
+
new_value = nil
|
265
|
+
if value.is_a?(String)
|
266
|
+
if @auto_typecast && !force_stringify
|
267
|
+
num_placeholders = value.scan('${').size
|
268
|
+
if num_placeholders == 1 && value.start_with?('${') && value.end_with?('}')
|
269
|
+
new_value = value[2..-2] # ${..} => ..
|
270
|
+
end
|
271
|
+
end
|
272
|
+
unless new_value
|
273
|
+
new_value = "%Q[#{value.gsub('${', '#{')}]" # xx${..}xx => %Q[xx#{..}xx]
|
274
|
+
end
|
275
|
+
elsif value.is_a?(Hash)
|
276
|
+
new_value = {}
|
277
|
+
value.each_pair do |k, v|
|
278
|
+
new_value[preprocess_map(k, true)] = preprocess_map(v)
|
279
|
+
end
|
280
|
+
elsif value.is_a?(Array)
|
281
|
+
new_value = []
|
282
|
+
value.each_with_index do |v, i|
|
283
|
+
new_value[i] = preprocess_map(v)
|
284
|
+
end
|
285
|
+
else
|
286
|
+
new_value = value
|
287
|
+
end
|
288
|
+
new_value
|
289
|
+
end
|
290
|
+
|
291
|
+
def prepare_placeholders(placeholder_values)
|
292
|
+
placeholder_values
|
293
|
+
end
|
294
|
+
|
295
|
+
# Expand string with placeholders
|
296
|
+
#
|
297
|
+
# @param [String] str
|
298
|
+
def expand(str, placeholders, force_stringify = false)
|
299
|
+
@cleanroom_expander.expand(
|
300
|
+
str,
|
301
|
+
placeholders['tag'],
|
302
|
+
placeholders['time'],
|
303
|
+
placeholders['record'],
|
304
|
+
placeholders['tag_parts'],
|
305
|
+
placeholders['tag_prefix'],
|
306
|
+
placeholders['tag_suffix'],
|
307
|
+
placeholders['hostname'],
|
308
|
+
)
|
309
|
+
rescue => e
|
310
|
+
raise "failed to expand `#{str}` : error = #{e}"
|
311
|
+
end
|
312
|
+
|
313
|
+
class CleanroomExpander
|
314
|
+
def expand(__str_to_eval__, tag, time, record, tag_parts, tag_prefix, tag_suffix, hostname)
|
315
|
+
instance_eval(__str_to_eval__)
|
316
|
+
end
|
317
|
+
|
318
|
+
(Object.instance_methods).each do |m|
|
319
|
+
undef_method m unless /^__|respond_to_missing\?|object_id|public_methods|instance_eval|method_missing|define_singleton_method|respond_to\?|new_ostruct_member|^class$/.match?(m.to_s)
|
320
|
+
end
|
321
|
+
end
|
322
|
+
end
|
323
|
+
end
|
324
|
+
end
|
@@ -0,0 +1,53 @@
|
|
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/filter'
|
18
|
+
|
19
|
+
module Fluent::Plugin
|
20
|
+
class StdoutFilter < Filter
|
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
|
30
|
+
|
31
|
+
# for tests
|
32
|
+
attr_reader :formatter
|
33
|
+
|
34
|
+
def configure(conf)
|
35
|
+
compat_parameters_convert(conf, :inject, :formatter)
|
36
|
+
super
|
37
|
+
@formatter = formatter_create
|
38
|
+
end
|
39
|
+
|
40
|
+
def filter_stream(tag, es)
|
41
|
+
es.each { |time, record|
|
42
|
+
begin
|
43
|
+
r = inject_values_to_record(tag, time, record)
|
44
|
+
log.write @formatter.format(tag, time, r)
|
45
|
+
rescue => e
|
46
|
+
router.emit_error_event(tag, time, record, e)
|
47
|
+
end
|
48
|
+
}
|
49
|
+
log.flush
|
50
|
+
es
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
@@ -0,0 +1,75 @@
|
|
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/env'
|
18
|
+
require 'fluent/plugin/base'
|
19
|
+
require 'fluent/plugin/owned_by_mixin'
|
20
|
+
require 'fluent/time'
|
21
|
+
|
22
|
+
module Fluent
|
23
|
+
module Plugin
|
24
|
+
class Formatter < Base
|
25
|
+
include OwnedByMixin
|
26
|
+
include TimeMixin::Formatter
|
27
|
+
|
28
|
+
configured_in :format
|
29
|
+
|
30
|
+
PARSER_TYPES = [:text_per_line, :text, :binary]
|
31
|
+
def formatter_type
|
32
|
+
:text_per_line
|
33
|
+
end
|
34
|
+
|
35
|
+
def format(tag, time, record)
|
36
|
+
raise NotImplementedError, "Implement this method in child class"
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
class ProcWrappedFormatter < Formatter
|
41
|
+
def initialize(proc)
|
42
|
+
super()
|
43
|
+
@proc = proc
|
44
|
+
end
|
45
|
+
|
46
|
+
def format(tag, time, record)
|
47
|
+
@proc.call(tag, time, record)
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
module Newline
|
52
|
+
module Mixin
|
53
|
+
include Fluent::Configurable
|
54
|
+
|
55
|
+
DEFAULT_NEWLINE = if Fluent.windows?
|
56
|
+
:crlf
|
57
|
+
else
|
58
|
+
:lf
|
59
|
+
end
|
60
|
+
|
61
|
+
config_param :newline, :enum, list: [:lf, :crlf], default: DEFAULT_NEWLINE
|
62
|
+
|
63
|
+
def configure(conf)
|
64
|
+
super
|
65
|
+
@newline = case newline
|
66
|
+
when :lf
|
67
|
+
"\n".freeze
|
68
|
+
when :crlf
|
69
|
+
"\r\n".freeze
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
@@ -0,0 +1,78 @@
|
|
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'
|
18
|
+
require 'fluent/plugin/formatter'
|
19
|
+
require 'csv'
|
20
|
+
|
21
|
+
module Fluent
|
22
|
+
module Plugin
|
23
|
+
class CsvFormatter < Formatter
|
24
|
+
Plugin.register_formatter('csv', self)
|
25
|
+
|
26
|
+
include PluginHelper::Mixin
|
27
|
+
helpers :record_accessor
|
28
|
+
|
29
|
+
config_param :delimiter, default: ',' do |val|
|
30
|
+
['\t', 'TAB'].include?(val) ? "\t".freeze : val.freeze
|
31
|
+
end
|
32
|
+
config_param :force_quotes, :bool, default: true
|
33
|
+
# "array" looks good for type of :fields, but this implementation removes tailing comma
|
34
|
+
# TODO: Is it needed to support tailing comma?
|
35
|
+
config_param :fields, :array, value_type: :string
|
36
|
+
config_param :add_newline, :bool, default: true
|
37
|
+
|
38
|
+
def configure(conf)
|
39
|
+
super
|
40
|
+
|
41
|
+
@fields = fields.select{|f| !f.empty? }
|
42
|
+
raise ConfigError, "empty value is specified in fields parameter" if @fields.empty?
|
43
|
+
|
44
|
+
if @fields.any? { |f| record_accessor_nested?(f) }
|
45
|
+
@accessors = @fields.map { |f| record_accessor_create(f) }
|
46
|
+
mformat = method(:format_with_nested_fields)
|
47
|
+
singleton_class.module_eval do
|
48
|
+
define_method(:format, mformat)
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
@generate_opts = {col_sep: @delimiter, force_quotes: @force_quotes, headers: @fields,
|
53
|
+
row_sep: @add_newline ? :auto : "".force_encoding(Encoding::ASCII_8BIT)}
|
54
|
+
# Cache CSV object per thread to avoid internal state sharing
|
55
|
+
@cache = {}
|
56
|
+
end
|
57
|
+
|
58
|
+
def format(tag, time, record)
|
59
|
+
csv = (@cache[Thread.current] ||= CSV.new("".force_encoding(Encoding::ASCII_8BIT), **@generate_opts))
|
60
|
+
line = (csv << record).string.dup
|
61
|
+
# Need manual cleanup because CSV writer doesn't provide such method.
|
62
|
+
csv.rewind
|
63
|
+
csv.truncate(0)
|
64
|
+
line
|
65
|
+
end
|
66
|
+
|
67
|
+
def format_with_nested_fields(tag, time, record)
|
68
|
+
csv = (@cache[Thread.current] ||= CSV.new("".force_encoding(Encoding::ASCII_8BIT), **@generate_opts))
|
69
|
+
values = @accessors.map { |a| a.call(record) }
|
70
|
+
line = (csv << values).string.dup
|
71
|
+
# Need manual cleanup because CSV writer doesn't provide such method.
|
72
|
+
csv.rewind
|
73
|
+
csv.truncate(0)
|
74
|
+
line
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
@@ -0,0 +1,35 @@
|
|
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
|
+
include Fluent::Plugin::Newline::Mixin
|
23
|
+
|
24
|
+
Plugin.register_formatter('hash', self)
|
25
|
+
|
26
|
+
config_param :add_newline, :bool, default: true
|
27
|
+
|
28
|
+
def format(tag, time, record)
|
29
|
+
line = record.to_s
|
30
|
+
line << @newline if @add_newline
|
31
|
+
line
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,59 @@
|
|
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/oj_options'
|
19
|
+
|
20
|
+
module Fluent
|
21
|
+
module Plugin
|
22
|
+
class JSONFormatter < Formatter
|
23
|
+
include Fluent::Plugin::Newline::Mixin
|
24
|
+
|
25
|
+
Plugin.register_formatter('json', self)
|
26
|
+
|
27
|
+
config_param :json_parser, :string, default: 'oj'
|
28
|
+
config_param :add_newline, :bool, default: true
|
29
|
+
|
30
|
+
def configure(conf)
|
31
|
+
super
|
32
|
+
|
33
|
+
if @json_parser == 'oj'
|
34
|
+
if Fluent::OjOptions.available?
|
35
|
+
@dump_proc = Oj.method(:dump)
|
36
|
+
else
|
37
|
+
log.info "Oj isn't installed, fallback to Yajl as json parser"
|
38
|
+
@dump_proc = Yajl.method(:dump)
|
39
|
+
end
|
40
|
+
else
|
41
|
+
@dump_proc = Yajl.method(:dump)
|
42
|
+
end
|
43
|
+
|
44
|
+
# format json is used on various highload environment, so re-define method to skip if check
|
45
|
+
unless @add_newline
|
46
|
+
define_singleton_method(:format, method(:format_without_nl))
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
def format(tag, time, record)
|
51
|
+
"#{@dump_proc.call(record)}#{@newline}"
|
52
|
+
end
|
53
|
+
|
54
|
+
def format_without_nl(tag, time, record)
|
55
|
+
@dump_proc.call(record)
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
@@ -0,0 +1,44 @@
|
|
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
|
+
include Fluent::Plugin::Newline::Mixin
|
23
|
+
|
24
|
+
Plugin.register_formatter('ltsv', self)
|
25
|
+
|
26
|
+
# http://ltsv.org/
|
27
|
+
|
28
|
+
config_param :delimiter, :string, default: "\t".freeze
|
29
|
+
config_param :label_delimiter, :string, default: ":".freeze
|
30
|
+
config_param :replacement, :string, default: " ".freeze
|
31
|
+
config_param :add_newline, :bool, default: true
|
32
|
+
|
33
|
+
def format(tag, time, record)
|
34
|
+
formatted = ""
|
35
|
+
record.each do |label, value|
|
36
|
+
formatted << @delimiter if formatted.length.nonzero?
|
37
|
+
formatted << "#{label}#{@label_delimiter}#{value.to_s.gsub(@delimiter, @replacement)}"
|
38
|
+
end
|
39
|
+
formatted << @newline if @add_newline
|
40
|
+
formatted
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
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
|