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.

Files changed (428) hide show
  1. checksums.yaml +5 -5
  2. data/.github/ISSUE_TEMPLATE/bug_report.md +39 -0
  3. data/.github/ISSUE_TEMPLATE/feature_request.md +23 -0
  4. data/.github/ISSUE_TEMPLATE.md +17 -0
  5. data/.github/PULL_REQUEST_TEMPLATE.md +13 -0
  6. data/.gitignore +5 -0
  7. data/.gitlab/cicd-template.yaml +10 -0
  8. data/.gitlab-ci.yml +147 -0
  9. data/.travis.yml +56 -20
  10. data/ADOPTERS.md +5 -0
  11. data/CHANGELOG.md +1369 -0
  12. data/CONTRIBUTING.md +16 -5
  13. data/GOVERNANCE.md +55 -0
  14. data/Gemfile +5 -0
  15. data/GithubWorkflow.md +78 -0
  16. data/LICENSE +202 -0
  17. data/MAINTAINERS.md +7 -0
  18. data/README.md +23 -11
  19. data/Rakefile +48 -2
  20. data/Vagrantfile +17 -0
  21. data/appveyor.yml +37 -0
  22. data/bin/fluent-binlog-reader +7 -0
  23. data/bin/fluent-ca-generate +6 -0
  24. data/bin/fluent-plugin-config-format +5 -0
  25. data/bin/fluent-plugin-generate +5 -0
  26. data/bin/fluentd +3 -0
  27. data/code-of-conduct.md +3 -0
  28. data/example/copy_roundrobin.conf +39 -0
  29. data/example/counter.conf +18 -0
  30. data/example/in_dummy_blocks.conf +17 -0
  31. data/example/in_dummy_with_compression.conf +23 -0
  32. data/example/in_forward.conf +7 -0
  33. data/example/in_forward_client.conf +37 -0
  34. data/example/in_forward_shared_key.conf +15 -0
  35. data/example/in_forward_tls.conf +14 -0
  36. data/example/in_forward_users.conf +24 -0
  37. data/example/in_forward_workers.conf +21 -0
  38. data/example/in_http.conf +3 -1
  39. data/example/in_out_forward.conf +17 -0
  40. data/example/logevents.conf +25 -0
  41. data/example/multi_filters.conf +61 -0
  42. data/example/out_exec_filter.conf +42 -0
  43. data/example/out_forward.conf +13 -13
  44. data/example/out_forward_buf_file.conf +23 -0
  45. data/example/out_forward_client.conf +109 -0
  46. data/example/out_forward_heartbeat_none.conf +16 -0
  47. data/example/out_forward_shared_key.conf +36 -0
  48. data/example/out_forward_tls.conf +18 -0
  49. data/example/out_forward_users.conf +65 -0
  50. data/example/out_null.conf +36 -0
  51. data/example/secondary_file.conf +42 -0
  52. data/example/suppress_config_dump.conf +7 -0
  53. data/example/worker_section.conf +36 -0
  54. data/fluent.conf +29 -0
  55. data/fluentd.gemspec +21 -11
  56. data/lib/fluent/agent.rb +67 -90
  57. data/lib/fluent/clock.rb +62 -0
  58. data/lib/fluent/command/binlog_reader.rb +244 -0
  59. data/lib/fluent/command/ca_generate.rb +181 -0
  60. data/lib/fluent/command/cat.rb +42 -18
  61. data/lib/fluent/command/debug.rb +12 -10
  62. data/lib/fluent/command/fluentd.rb +153 -5
  63. data/lib/fluent/command/plugin_config_formatter.rb +292 -0
  64. data/lib/fluent/command/plugin_generator.rb +324 -0
  65. data/lib/fluent/compat/call_super_mixin.rb +67 -0
  66. data/lib/fluent/compat/detach_process_mixin.rb +33 -0
  67. data/lib/fluent/compat/exec_util.rb +129 -0
  68. data/lib/fluent/compat/file_util.rb +54 -0
  69. data/lib/fluent/compat/filter.rb +68 -0
  70. data/lib/fluent/compat/formatter.rb +111 -0
  71. data/lib/fluent/compat/formatter_utils.rb +85 -0
  72. data/lib/fluent/compat/handle_tag_and_time_mixin.rb +62 -0
  73. data/lib/fluent/compat/handle_tag_name_mixin.rb +53 -0
  74. data/lib/fluent/compat/input.rb +49 -0
  75. data/lib/fluent/compat/output.rb +718 -0
  76. data/lib/fluent/compat/output_chain.rb +60 -0
  77. data/lib/fluent/compat/parser.rb +310 -0
  78. data/lib/fluent/compat/parser_utils.rb +40 -0
  79. data/lib/fluent/compat/propagate_default.rb +62 -0
  80. data/lib/fluent/compat/record_filter_mixin.rb +34 -0
  81. data/lib/fluent/compat/set_tag_key_mixin.rb +50 -0
  82. data/lib/fluent/compat/set_time_key_mixin.rb +69 -0
  83. data/lib/fluent/compat/socket_util.rb +165 -0
  84. data/lib/fluent/compat/string_util.rb +34 -0
  85. data/lib/fluent/compat/structured_format_mixin.rb +26 -0
  86. data/lib/fluent/compat/type_converter.rb +90 -0
  87. data/lib/fluent/config/configure_proxy.rb +210 -62
  88. data/lib/fluent/config/dsl.rb +12 -5
  89. data/lib/fluent/config/element.rb +107 -9
  90. data/lib/fluent/config/literal_parser.rb +9 -3
  91. data/lib/fluent/config/parser.rb +4 -4
  92. data/lib/fluent/config/section.rb +51 -14
  93. data/lib/fluent/config/types.rb +28 -13
  94. data/lib/fluent/config/v1_parser.rb +3 -5
  95. data/lib/fluent/config.rb +23 -20
  96. data/lib/fluent/configurable.rb +79 -21
  97. data/lib/fluent/counter/base_socket.rb +46 -0
  98. data/lib/fluent/counter/client.rb +297 -0
  99. data/lib/fluent/counter/error.rb +86 -0
  100. data/lib/fluent/counter/mutex_hash.rb +163 -0
  101. data/lib/fluent/counter/server.rb +273 -0
  102. data/lib/fluent/counter/store.rb +205 -0
  103. data/lib/fluent/counter/validator.rb +145 -0
  104. data/lib/fluent/counter.rb +23 -0
  105. data/lib/fluent/daemon.rb +15 -0
  106. data/lib/fluent/engine.rb +102 -65
  107. data/lib/fluent/env.rb +7 -3
  108. data/lib/fluent/error.rb +30 -0
  109. data/lib/fluent/event.rb +197 -21
  110. data/lib/fluent/event_router.rb +93 -10
  111. data/lib/fluent/filter.rb +2 -50
  112. data/lib/fluent/formatter.rb +4 -293
  113. data/lib/fluent/input.rb +2 -32
  114. data/lib/fluent/label.rb +10 -2
  115. data/lib/fluent/load.rb +3 -3
  116. data/lib/fluent/log.rb +348 -81
  117. data/lib/fluent/match.rb +37 -36
  118. data/lib/fluent/mixin.rb +12 -176
  119. data/lib/fluent/msgpack_factory.rb +62 -0
  120. data/lib/fluent/output.rb +10 -612
  121. data/lib/fluent/output_chain.rb +23 -0
  122. data/lib/fluent/parser.rb +4 -800
  123. data/lib/fluent/plugin/bare_output.rb +63 -0
  124. data/lib/fluent/plugin/base.rb +192 -0
  125. data/lib/fluent/plugin/buf_file.rb +128 -174
  126. data/lib/fluent/plugin/buf_memory.rb +9 -92
  127. data/lib/fluent/plugin/buffer/chunk.rb +221 -0
  128. data/lib/fluent/plugin/buffer/file_chunk.rb +383 -0
  129. data/lib/fluent/plugin/buffer/memory_chunk.rb +90 -0
  130. data/lib/fluent/plugin/buffer.rb +779 -0
  131. data/lib/fluent/plugin/compressable.rb +92 -0
  132. data/lib/fluent/plugin/exec_util.rb +3 -108
  133. data/lib/fluent/plugin/file_util.rb +4 -34
  134. data/lib/fluent/plugin/file_wrapper.rb +120 -0
  135. data/lib/fluent/plugin/filter.rb +93 -0
  136. data/lib/fluent/plugin/filter_grep.rb +117 -34
  137. data/lib/fluent/plugin/filter_parser.rb +85 -62
  138. data/lib/fluent/plugin/filter_record_transformer.rb +27 -39
  139. data/lib/fluent/plugin/filter_stdout.rb +15 -12
  140. data/lib/fluent/plugin/formatter.rb +50 -0
  141. data/lib/fluent/plugin/formatter_csv.rb +52 -0
  142. data/lib/fluent/plugin/formatter_hash.rb +33 -0
  143. data/lib/fluent/plugin/formatter_json.rb +55 -0
  144. data/lib/fluent/plugin/formatter_ltsv.rb +42 -0
  145. data/lib/fluent/plugin/formatter_msgpack.rb +33 -0
  146. data/lib/fluent/plugin/formatter_out_file.rb +51 -0
  147. data/lib/fluent/plugin/formatter_single_value.rb +34 -0
  148. data/lib/fluent/plugin/formatter_stdout.rb +76 -0
  149. data/lib/fluent/plugin/formatter_tsv.rb +38 -0
  150. data/lib/fluent/plugin/in_debug_agent.rb +17 -6
  151. data/lib/fluent/plugin/in_dummy.rb +47 -20
  152. data/lib/fluent/plugin/in_exec.rb +55 -123
  153. data/lib/fluent/plugin/in_forward.rb +299 -216
  154. data/lib/fluent/plugin/in_gc_stat.rb +14 -36
  155. data/lib/fluent/plugin/in_http.rb +204 -91
  156. data/lib/fluent/plugin/in_monitor_agent.rb +186 -258
  157. data/lib/fluent/plugin/in_object_space.rb +13 -41
  158. data/lib/fluent/plugin/in_syslog.rb +112 -134
  159. data/lib/fluent/plugin/in_tail.rb +408 -745
  160. data/lib/fluent/plugin/in_tcp.rb +66 -9
  161. data/lib/fluent/plugin/in_udp.rb +60 -11
  162. data/lib/fluent/plugin/{in_stream.rb → in_unix.rb} +8 -4
  163. data/lib/fluent/plugin/input.rb +37 -0
  164. data/lib/fluent/plugin/multi_output.rb +158 -0
  165. data/lib/fluent/plugin/out_copy.rb +23 -35
  166. data/lib/fluent/plugin/out_exec.rb +67 -70
  167. data/lib/fluent/plugin/out_exec_filter.rb +204 -271
  168. data/lib/fluent/plugin/out_file.rb +267 -73
  169. data/lib/fluent/plugin/out_forward.rb +854 -325
  170. data/lib/fluent/plugin/out_null.rb +42 -9
  171. data/lib/fluent/plugin/out_relabel.rb +9 -5
  172. data/lib/fluent/plugin/out_roundrobin.rb +18 -37
  173. data/lib/fluent/plugin/out_secondary_file.rb +133 -0
  174. data/lib/fluent/plugin/out_stdout.rb +43 -10
  175. data/lib/fluent/plugin/out_stream.rb +7 -2
  176. data/lib/fluent/plugin/output.rb +1498 -0
  177. data/lib/fluent/plugin/owned_by_mixin.rb +42 -0
  178. data/lib/fluent/plugin/parser.rb +191 -0
  179. data/lib/fluent/plugin/parser_apache.rb +28 -0
  180. data/lib/fluent/plugin/parser_apache2.rb +88 -0
  181. data/lib/fluent/plugin/parser_apache_error.rb +26 -0
  182. data/lib/fluent/plugin/parser_csv.rb +39 -0
  183. data/lib/fluent/plugin/parser_json.rb +94 -0
  184. data/lib/fluent/plugin/parser_ltsv.rb +49 -0
  185. data/lib/fluent/plugin/parser_msgpack.rb +50 -0
  186. data/lib/fluent/plugin/parser_multiline.rb +106 -0
  187. data/lib/fluent/plugin/parser_nginx.rb +28 -0
  188. data/lib/fluent/plugin/parser_none.rb +36 -0
  189. data/lib/fluent/plugin/parser_regexp.rb +68 -0
  190. data/lib/fluent/plugin/parser_syslog.rb +142 -0
  191. data/lib/fluent/plugin/parser_tsv.rb +42 -0
  192. data/lib/fluent/plugin/socket_util.rb +3 -143
  193. data/lib/fluent/plugin/storage.rb +84 -0
  194. data/lib/fluent/plugin/storage_local.rb +164 -0
  195. data/lib/fluent/plugin/string_util.rb +3 -15
  196. data/lib/fluent/plugin.rb +122 -121
  197. data/lib/fluent/plugin_helper/cert_option.rb +178 -0
  198. data/lib/fluent/plugin_helper/child_process.rb +364 -0
  199. data/lib/fluent/plugin_helper/compat_parameters.rb +333 -0
  200. data/lib/fluent/plugin_helper/counter.rb +51 -0
  201. data/lib/fluent/plugin_helper/event_emitter.rb +93 -0
  202. data/lib/fluent/plugin_helper/event_loop.rb +170 -0
  203. data/lib/fluent/plugin_helper/extract.rb +104 -0
  204. data/lib/fluent/plugin_helper/formatter.rb +147 -0
  205. data/lib/fluent/plugin_helper/http_server/app.rb +79 -0
  206. data/lib/fluent/plugin_helper/http_server/compat/server.rb +81 -0
  207. data/lib/fluent/plugin_helper/http_server/compat/webrick_handler.rb +58 -0
  208. data/lib/fluent/plugin_helper/http_server/methods.rb +35 -0
  209. data/lib/fluent/plugin_helper/http_server/request.rb +42 -0
  210. data/lib/fluent/plugin_helper/http_server/router.rb +54 -0
  211. data/lib/fluent/plugin_helper/http_server/server.rb +87 -0
  212. data/lib/fluent/plugin_helper/http_server.rb +76 -0
  213. data/lib/fluent/plugin_helper/inject.rb +151 -0
  214. data/lib/fluent/plugin_helper/parser.rb +147 -0
  215. data/lib/fluent/plugin_helper/record_accessor.rb +210 -0
  216. data/lib/fluent/plugin_helper/retry_state.rb +205 -0
  217. data/lib/fluent/plugin_helper/server.rb +807 -0
  218. data/lib/fluent/plugin_helper/socket.rb +250 -0
  219. data/lib/fluent/plugin_helper/socket_option.rb +80 -0
  220. data/lib/fluent/plugin_helper/storage.rb +349 -0
  221. data/lib/fluent/plugin_helper/thread.rb +179 -0
  222. data/lib/fluent/plugin_helper/timer.rb +92 -0
  223. data/lib/fluent/plugin_helper.rb +73 -0
  224. data/lib/fluent/plugin_id.rb +80 -0
  225. data/lib/fluent/process.rb +3 -489
  226. data/lib/fluent/registry.rb +52 -10
  227. data/lib/fluent/root_agent.rb +204 -42
  228. data/lib/fluent/supervisor.rb +597 -359
  229. data/lib/fluent/system_config.rb +131 -42
  230. data/lib/fluent/test/base.rb +6 -54
  231. data/lib/fluent/test/driver/base.rb +224 -0
  232. data/lib/fluent/test/driver/base_owned.rb +70 -0
  233. data/lib/fluent/test/driver/base_owner.rb +135 -0
  234. data/lib/fluent/test/driver/event_feeder.rb +98 -0
  235. data/lib/fluent/test/driver/filter.rb +57 -0
  236. data/lib/fluent/test/driver/formatter.rb +30 -0
  237. data/lib/fluent/test/driver/input.rb +31 -0
  238. data/lib/fluent/test/driver/multi_output.rb +53 -0
  239. data/lib/fluent/test/driver/output.rb +102 -0
  240. data/lib/fluent/test/driver/parser.rb +30 -0
  241. data/lib/fluent/test/driver/test_event_router.rb +45 -0
  242. data/lib/fluent/test/filter_test.rb +0 -1
  243. data/lib/fluent/test/formatter_test.rb +4 -1
  244. data/lib/fluent/test/helpers.rb +58 -10
  245. data/lib/fluent/test/input_test.rb +27 -19
  246. data/lib/fluent/test/log.rb +79 -0
  247. data/lib/fluent/test/output_test.rb +28 -39
  248. data/lib/fluent/test/parser_test.rb +3 -1
  249. data/lib/fluent/test/startup_shutdown.rb +46 -0
  250. data/lib/fluent/test.rb +33 -1
  251. data/lib/fluent/time.rb +450 -1
  252. data/lib/fluent/timezone.rb +27 -3
  253. data/lib/fluent/{status.rb → unique_id.rb} +15 -24
  254. data/lib/fluent/version.rb +1 -1
  255. data/lib/fluent/winsvc.rb +85 -0
  256. data/templates/new_gem/Gemfile +3 -0
  257. data/templates/new_gem/README.md.erb +43 -0
  258. data/templates/new_gem/Rakefile +13 -0
  259. data/templates/new_gem/fluent-plugin.gemspec.erb +27 -0
  260. data/templates/new_gem/lib/fluent/plugin/filter.rb.erb +14 -0
  261. data/templates/new_gem/lib/fluent/plugin/formatter.rb.erb +14 -0
  262. data/templates/new_gem/lib/fluent/plugin/input.rb.erb +11 -0
  263. data/templates/new_gem/lib/fluent/plugin/output.rb.erb +11 -0
  264. data/templates/new_gem/lib/fluent/plugin/parser.rb.erb +15 -0
  265. data/templates/new_gem/test/helper.rb.erb +8 -0
  266. data/templates/new_gem/test/plugin/test_filter.rb.erb +18 -0
  267. data/templates/new_gem/test/plugin/test_formatter.rb.erb +18 -0
  268. data/templates/new_gem/test/plugin/test_input.rb.erb +18 -0
  269. data/templates/new_gem/test/plugin/test_output.rb.erb +18 -0
  270. data/templates/new_gem/test/plugin/test_parser.rb.erb +18 -0
  271. data/templates/plugin_config_formatter/param.md-compact.erb +25 -0
  272. data/templates/plugin_config_formatter/param.md.erb +34 -0
  273. data/templates/plugin_config_formatter/section.md.erb +12 -0
  274. data/test/command/test_binlog_reader.rb +346 -0
  275. data/test/command/test_ca_generate.rb +70 -0
  276. data/test/command/test_fluentd.rb +901 -0
  277. data/test/command/test_plugin_config_formatter.rb +276 -0
  278. data/test/command/test_plugin_generator.rb +92 -0
  279. data/test/compat/test_calls_super.rb +166 -0
  280. data/test/compat/test_parser.rb +92 -0
  281. data/test/config/test_config_parser.rb +126 -2
  282. data/test/config/test_configurable.rb +946 -187
  283. data/test/config/test_configure_proxy.rb +424 -74
  284. data/test/config/test_dsl.rb +11 -11
  285. data/test/config/test_element.rb +500 -0
  286. data/test/config/test_literal_parser.rb +8 -0
  287. data/test/config/test_plugin_configuration.rb +56 -0
  288. data/test/config/test_section.rb +79 -7
  289. data/test/config/test_system_config.rb +122 -35
  290. data/test/config/test_types.rb +38 -0
  291. data/test/counter/test_client.rb +559 -0
  292. data/test/counter/test_error.rb +44 -0
  293. data/test/counter/test_mutex_hash.rb +179 -0
  294. data/test/counter/test_server.rb +589 -0
  295. data/test/counter/test_store.rb +258 -0
  296. data/test/counter/test_validator.rb +137 -0
  297. data/test/helper.rb +89 -6
  298. data/test/helpers/fuzzy_assert.rb +89 -0
  299. data/test/plugin/test_bare_output.rb +118 -0
  300. data/test/plugin/test_base.rb +115 -0
  301. data/test/plugin/test_buf_file.rb +823 -460
  302. data/test/plugin/test_buf_memory.rb +32 -194
  303. data/test/plugin/test_buffer.rb +1233 -0
  304. data/test/plugin/test_buffer_chunk.rb +198 -0
  305. data/test/plugin/test_buffer_file_chunk.rb +844 -0
  306. data/test/plugin/test_buffer_memory_chunk.rb +338 -0
  307. data/test/plugin/test_compressable.rb +84 -0
  308. data/test/plugin/test_filter.rb +357 -0
  309. data/test/plugin/test_filter_grep.rb +540 -29
  310. data/test/plugin/test_filter_parser.rb +439 -452
  311. data/test/plugin/test_filter_record_transformer.rb +123 -166
  312. data/test/plugin/test_filter_stdout.rb +160 -72
  313. data/test/plugin/test_formatter_csv.rb +111 -0
  314. data/test/plugin/test_formatter_hash.rb +35 -0
  315. data/test/plugin/test_formatter_json.rb +51 -0
  316. data/test/plugin/test_formatter_ltsv.rb +62 -0
  317. data/test/plugin/test_formatter_msgpack.rb +28 -0
  318. data/test/plugin/test_formatter_out_file.rb +95 -0
  319. data/test/plugin/test_formatter_single_value.rb +38 -0
  320. data/test/plugin/test_formatter_tsv.rb +68 -0
  321. data/test/plugin/test_in_debug_agent.rb +24 -1
  322. data/test/plugin/test_in_dummy.rb +111 -18
  323. data/test/plugin/test_in_exec.rb +200 -113
  324. data/test/plugin/test_in_forward.rb +990 -387
  325. data/test/plugin/test_in_gc_stat.rb +10 -8
  326. data/test/plugin/test_in_http.rb +600 -224
  327. data/test/plugin/test_in_monitor_agent.rb +690 -0
  328. data/test/plugin/test_in_object_space.rb +24 -8
  329. data/test/plugin/test_in_syslog.rb +154 -215
  330. data/test/plugin/test_in_tail.rb +1006 -707
  331. data/test/plugin/test_in_tcp.rb +125 -48
  332. data/test/plugin/test_in_udp.rb +204 -63
  333. data/test/plugin/{test_in_stream.rb → test_in_unix.rb} +14 -13
  334. data/test/plugin/test_input.rb +126 -0
  335. data/test/plugin/test_metadata.rb +89 -0
  336. data/test/plugin/test_multi_output.rb +180 -0
  337. data/test/plugin/test_out_copy.rb +117 -112
  338. data/test/plugin/test_out_exec.rb +258 -53
  339. data/test/plugin/test_out_exec_filter.rb +538 -115
  340. data/test/plugin/test_out_file.rb +865 -178
  341. data/test/plugin/test_out_forward.rb +998 -210
  342. data/test/plugin/test_out_null.rb +105 -0
  343. data/test/plugin/test_out_relabel.rb +28 -0
  344. data/test/plugin/test_out_roundrobin.rb +36 -29
  345. data/test/plugin/test_out_secondary_file.rb +458 -0
  346. data/test/plugin/test_out_stdout.rb +135 -37
  347. data/test/plugin/test_out_stream.rb +18 -0
  348. data/test/plugin/test_output.rb +984 -0
  349. data/test/plugin/test_output_as_buffered.rb +2021 -0
  350. data/test/plugin/test_output_as_buffered_backup.rb +312 -0
  351. data/test/plugin/test_output_as_buffered_compress.rb +165 -0
  352. data/test/plugin/test_output_as_buffered_overflow.rb +250 -0
  353. data/test/plugin/test_output_as_buffered_retries.rb +911 -0
  354. data/test/plugin/test_output_as_buffered_secondary.rb +874 -0
  355. data/test/plugin/test_output_as_standard.rb +374 -0
  356. data/test/plugin/test_owned_by.rb +35 -0
  357. data/test/plugin/test_parser.rb +359 -0
  358. data/test/plugin/test_parser_apache.rb +42 -0
  359. data/test/plugin/test_parser_apache2.rb +47 -0
  360. data/test/plugin/test_parser_apache_error.rb +45 -0
  361. data/test/plugin/test_parser_csv.rb +103 -0
  362. data/test/plugin/test_parser_json.rb +138 -0
  363. data/test/plugin/test_parser_labeled_tsv.rb +145 -0
  364. data/test/plugin/test_parser_multiline.rb +100 -0
  365. data/test/plugin/test_parser_nginx.rb +88 -0
  366. data/test/plugin/test_parser_none.rb +52 -0
  367. data/test/plugin/test_parser_regexp.rb +289 -0
  368. data/test/plugin/test_parser_syslog.rb +441 -0
  369. data/test/plugin/test_parser_tsv.rb +122 -0
  370. data/test/plugin/test_storage.rb +167 -0
  371. data/test/plugin/test_storage_local.rb +335 -0
  372. data/test/plugin_helper/data/cert/cert-key.pem +27 -0
  373. data/test/plugin_helper/data/cert/cert-with-no-newline.pem +19 -0
  374. data/test/plugin_helper/data/cert/cert.pem +19 -0
  375. data/test/plugin_helper/http_server/test_app.rb +65 -0
  376. data/test/plugin_helper/http_server/test_route.rb +32 -0
  377. data/test/plugin_helper/test_cert_option.rb +16 -0
  378. data/test/plugin_helper/test_child_process.rb +794 -0
  379. data/test/plugin_helper/test_compat_parameters.rb +353 -0
  380. data/test/plugin_helper/test_event_emitter.rb +51 -0
  381. data/test/plugin_helper/test_event_loop.rb +52 -0
  382. data/test/plugin_helper/test_extract.rb +194 -0
  383. data/test/plugin_helper/test_formatter.rb +255 -0
  384. data/test/plugin_helper/test_http_server_helper.rb +205 -0
  385. data/test/plugin_helper/test_inject.rb +519 -0
  386. data/test/plugin_helper/test_parser.rb +264 -0
  387. data/test/plugin_helper/test_record_accessor.rb +197 -0
  388. data/test/plugin_helper/test_retry_state.rb +442 -0
  389. data/test/plugin_helper/test_server.rb +1714 -0
  390. data/test/plugin_helper/test_storage.rb +542 -0
  391. data/test/plugin_helper/test_thread.rb +164 -0
  392. data/test/plugin_helper/test_timer.rb +132 -0
  393. data/test/scripts/exec_script.rb +0 -6
  394. data/test/scripts/fluent/plugin/formatter1/formatter_test1.rb +7 -0
  395. data/test/scripts/fluent/plugin/formatter2/formatter_test2.rb +7 -0
  396. data/test/scripts/fluent/plugin/out_test.rb +23 -15
  397. data/test/scripts/fluent/plugin/out_test2.rb +80 -0
  398. data/test/test_clock.rb +164 -0
  399. data/test/test_config.rb +16 -7
  400. data/test/test_configdsl.rb +2 -2
  401. data/test/test_event.rb +360 -13
  402. data/test/test_event_router.rb +108 -11
  403. data/test/test_event_time.rb +199 -0
  404. data/test/test_filter.rb +48 -6
  405. data/test/test_formatter.rb +11 -391
  406. data/test/test_input.rb +1 -1
  407. data/test/test_log.rb +591 -31
  408. data/test/test_mixin.rb +1 -1
  409. data/test/test_output.rb +121 -185
  410. data/test/test_plugin.rb +251 -0
  411. data/test/test_plugin_classes.rb +177 -10
  412. data/test/test_plugin_helper.rb +81 -0
  413. data/test/test_plugin_id.rb +101 -0
  414. data/test/test_process.rb +8 -42
  415. data/test/test_root_agent.rb +766 -21
  416. data/test/test_supervisor.rb +481 -0
  417. data/test/test_test_drivers.rb +135 -0
  418. data/test/test_time_formatter.rb +282 -0
  419. data/test/test_time_parser.rb +231 -0
  420. data/test/test_unique_id.rb +47 -0
  421. metadata +454 -60
  422. data/COPYING +0 -14
  423. data/ChangeLog +0 -666
  424. data/lib/fluent/buffer.rb +0 -365
  425. data/lib/fluent/plugin/in_status.rb +0 -76
  426. data/test/plugin/test_in_status.rb +0 -38
  427. data/test/test_buffer.rb +0 -624
  428. data/test/test_parser.rb +0 -1305
@@ -0,0 +1,65 @@
1
+ <source>
2
+ @type dummy
3
+ tag test
4
+ </source>
5
+ <source>
6
+ @type dummy
7
+ tag test2
8
+ </source>
9
+ <source>
10
+ @type dummy
11
+ tag test3
12
+ </source>
13
+
14
+ <match test>
15
+ @type forward
16
+ flush_interval 0
17
+ <security>
18
+ self_hostname output.testing.local
19
+ shared_key secure_communication_is_awesome
20
+ </security>
21
+ <server>
22
+ host 127.0.0.1
23
+ port 24224
24
+ username user1
25
+ password yes_this_is_user1
26
+ </server>
27
+ </match>
28
+
29
+ <match test2>
30
+ @type forward
31
+ flush_interval 0
32
+ <security>
33
+ self_hostname output-alt1.testing.local
34
+ shared_key secure_communication_is_awesome
35
+ </security>
36
+ <server>
37
+ host 127.0.0.1
38
+ port 24224
39
+ username user1
40
+ password yes_this_is_user1
41
+ </server>
42
+ <server>
43
+ host 127.0.0.1
44
+ port 24224
45
+ username user2
46
+ password yes_this_is_really_user2
47
+ </server>
48
+ </match>
49
+
50
+ <match test3>
51
+ @type forward
52
+ flush_interval 0
53
+ <security>
54
+ self_hostname output-fail.testing.local
55
+ shared_key secure_communication_is_awesome
56
+ </security>
57
+ <server>
58
+ host 127.0.0.1
59
+ port 24224
60
+ username user3
61
+ password no_there_are_not_such_user
62
+ # input plugin warns authentication erro:
63
+ # [warn]: Authentication failed address="127.0.0.1" hostname="output-fail.testing.local" username="user3"
64
+ </server>
65
+ </match>
@@ -0,0 +1,36 @@
1
+ #
2
+ # bundle exec bin/fluentd -c example/out_buffered_null.conf
3
+ # (+ --emit-error-log-interval 10)
4
+ <source>
5
+ @type dummy
6
+ tag dummy
7
+ rate 500000000
8
+ dummy [
9
+ {"message": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"},
10
+ {"message": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"},
11
+ {"message": "ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc"}
12
+ ]
13
+ </source>
14
+
15
+ <match dummy.**>
16
+ @type null
17
+ <buffer>
18
+ flush_interval 60s
19
+ chunk_limit_size 1k
20
+ total_limit_size 4k
21
+ </buffer>
22
+ </match>
23
+
24
+ <label error_log>
25
+ <match **>
26
+ @type stdout
27
+ # <buffer>
28
+ # flush_interval 1s
29
+ # </buffer>
30
+ </match>
31
+ </label>
32
+
33
+ <match fluent.**>
34
+ @type relabel
35
+ @label error_log
36
+ </match>
@@ -0,0 +1,42 @@
1
+ <system>
2
+ rpc_endpoint 0.0.0.0:24444
3
+ </system>
4
+
5
+ <source>
6
+ @type dummy
7
+ tag test
8
+ </source>
9
+
10
+ <source>
11
+ @type forward
12
+ @label @raw
13
+ </source>
14
+
15
+ <label @raw>
16
+ <match>
17
+ @type stdout
18
+ </match>
19
+ </label>
20
+
21
+ <match test>
22
+ @type forward
23
+
24
+ <buffer time,tag,message>
25
+ @type memory
26
+ timekey 2s
27
+ timekey_wait 1s
28
+ flush_mode interval
29
+ flush_interval 1s
30
+ </buffer>
31
+
32
+ <server>
33
+ host 0.0.0.0
34
+ port 24224
35
+ </server>
36
+
37
+ <secondary>
38
+ @type secondary_file
39
+ directory log/secondary/
40
+ basename ${tag}_%Y%m%d%L_${message}
41
+ </secondary>
42
+ </match>
@@ -0,0 +1,7 @@
1
+ <system>
2
+ suppress_config_dump false
3
+ </system>
4
+
5
+ <match data.*>
6
+ @type stdout
7
+ </match>
@@ -0,0 +1,36 @@
1
+ <system>
2
+ workers 4
3
+ root_dir /path/fluentd/root
4
+ </system>
5
+
6
+ <source> # top-level sections works on all workers in parallel
7
+ @type forward
8
+ port 24224
9
+ </source>
10
+
11
+ <match all> # this sections also works on all workers in parallel
12
+ @type stdout
13
+ <inject>
14
+ worker_id_key worker_id
15
+ </inject>
16
+ </match>
17
+
18
+ <worker 0> # this section works only on first worker process
19
+ <source>
20
+ @type tail
21
+ format none
22
+ path /var/log/fluentd_test.log
23
+ pos_file /var/log/fluentd_test.pos
24
+ tag tail
25
+ rotate_wait 5
26
+ read_from_head true
27
+ refresh_interval 60
28
+ </source>
29
+
30
+ <match tail>
31
+ @type stdout
32
+ <inject>
33
+ worker_id_key worker_id
34
+ </inject>
35
+ </match>
36
+ </worker>
data/fluent.conf CHANGED
@@ -31,6 +31,24 @@
31
31
  # tag apache.access
32
32
  #</source>
33
33
 
34
+ ## Mutating event filter
35
+ ## Add hostname and tag fields to apache.access tag events
36
+ #<filter apache.access>
37
+ # @type record_transformer
38
+ # <record>
39
+ # hostname ${hostname}
40
+ # tag ${tag}
41
+ # </record>
42
+ #</filter>
43
+
44
+ ## Selecting event filter
45
+ ## Remove unnecessary events from apache prefixed tag events
46
+ #<filter apache.**>
47
+ # @type grep
48
+ # include1 method GET # pass only GET in 'method' field
49
+ # exclude1 message debug # remove debug event
50
+ #</filter>
51
+
34
52
  # Listen HTTP for monitoring
35
53
  # http://localhost:24220/api/plugins
36
54
  # http://localhost:24220/api/plugins?type=TYPE
@@ -108,3 +126,14 @@
108
126
  # path /var/log/fluent/else
109
127
  # compress gz
110
128
  #</match>
129
+
130
+ ## Label: For handling complex event routing
131
+ #<label @STAGING>
132
+ # <match system.**>
133
+ # @type forward
134
+ # @id staging_forward_output
135
+ # <server>
136
+ # host 192.168.0.101
137
+ # </server>
138
+ # </match>
139
+ #</label>
data/fluentd.gemspec CHANGED
@@ -8,28 +8,38 @@ Gem::Specification.new do |gem|
8
8
  gem.email = ["frsyuki@gmail.com"]
9
9
  gem.description = %q{Fluentd is an open source data collector designed to scale and simplify log management. It can collect, process and ship many kinds of data in near real-time.}
10
10
  gem.summary = %q{Fluentd event collector}
11
- gem.homepage = "http://fluentd.org/"
11
+ gem.homepage = "https://www.fluentd.org/"
12
12
 
13
13
  gem.files = `git ls-files`.split($\)
14
14
  gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
15
15
  gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
16
16
  gem.require_paths = ["lib"]
17
- gem.has_rdoc = false
18
17
  gem.license = "Apache-2.0"
19
18
 
20
- gem.required_ruby_version = '>= 1.9.3'
19
+ gem.required_ruby_version = '>= 2.1'
21
20
 
22
- gem.add_runtime_dependency("msgpack", [">= 0.5.11", "< 2"])
23
- gem.add_runtime_dependency("json", [">= 1.4.3"])
21
+ gem.add_runtime_dependency("msgpack", [">= 0.7.0", "< 2.0.0"])
24
22
  gem.add_runtime_dependency("yajl-ruby", ["~> 1.0"])
25
- gem.add_runtime_dependency("cool.io", [">= 1.2.2", "< 2.0.0"])
23
+ gem.add_runtime_dependency("cool.io", [">= 1.4.5", "< 2.0.0"])
24
+ gem.add_runtime_dependency("serverengine", [">= 2.0.4", "< 3.0.0"])
26
25
  gem.add_runtime_dependency("http_parser.rb", [">= 0.5.1", "< 0.7.0"])
27
26
  gem.add_runtime_dependency("sigdump", ["~> 0.2.2"])
28
- gem.add_runtime_dependency("tzinfo", [">= 1.0.0"])
29
- gem.add_runtime_dependency("tzinfo-data", [">= 1.0.0"])
30
- gem.add_runtime_dependency("string-scrub", [">= 0.0.3", "<= 0.0.5"])
27
+ gem.add_runtime_dependency("tzinfo", ["~> 1.0"])
28
+ gem.add_runtime_dependency("tzinfo-data", ["~> 1.0"])
29
+ gem.add_runtime_dependency("strptime", [">= 0.2.2", "< 1.0.0"])
30
+ gem.add_runtime_dependency("dig_rb", ["~> 1.0.0"])
31
31
 
32
- gem.add_development_dependency("rake", [">= 0.9.2"])
32
+ # build gem for a certain platform. see also Rakefile
33
+ fake_platform = ENV['GEM_BUILD_FAKE_PLATFORM'].to_s
34
+ gem.platform = fake_platform unless fake_platform.empty?
35
+ if /mswin|mingw/ =~ fake_platform || (/mswin|mingw/ =~ RUBY_PLATFORM && fake_platform.empty?)
36
+ gem.add_runtime_dependency("win32-service", ["~> 0.8.3"])
37
+ gem.add_runtime_dependency("win32-ipc", ["~> 0.6.1"])
38
+ gem.add_runtime_dependency("win32-event", ["~> 0.6.1"])
39
+ gem.add_runtime_dependency("windows-pr", ["~> 1.2.5"])
40
+ end
41
+
42
+ gem.add_development_dependency("rake", ["~> 11.0"])
33
43
  gem.add_development_dependency("flexmock", ["~> 2.0"])
34
44
  gem.add_development_dependency("parallel_tests", ["~> 0.15.3"])
35
45
  gem.add_development_dependency("simplecov", ["~> 0.7"])
@@ -37,5 +47,5 @@ Gem::Specification.new do |gem|
37
47
  gem.add_development_dependency("timecop", ["~> 0.3"])
38
48
  gem.add_development_dependency("test-unit", ["~> 3.2"])
39
49
  gem.add_development_dependency("test-unit-rr", ["~> 1.0"])
40
- gem.add_development_dependency("oj", ["~> 2.14"])
50
+ gem.add_development_dependency("oj", [">= 2.14", "< 4"])
41
51
  end
data/lib/fluent/agent.rb CHANGED
@@ -15,9 +15,9 @@
15
15
  #
16
16
 
17
17
  require 'fluent/configurable'
18
- require 'fluent/engine'
19
18
  require 'fluent/plugin'
20
19
  require 'fluent/output'
20
+ require 'fluent/match'
21
21
 
22
22
  module Fluent
23
23
  #
@@ -29,16 +29,23 @@ module Fluent
29
29
  class Agent
30
30
  include Configurable
31
31
 
32
- def initialize(opts = {})
32
+ def initialize(log:)
33
33
  super()
34
34
 
35
35
  @context = nil
36
36
  @outputs = []
37
37
  @filters = []
38
- @started_outputs = []
39
- @started_filters = []
40
38
 
41
- @log = Engine.log
39
+ @lifecycle_control_list = nil
40
+ # lifecycle_control_list is the list of plugins in this agent, and ordered
41
+ # from plugins which DOES emit, then DOESN'T emit
42
+ # (input -> output w/ router -> filter -> output w/o router)
43
+ # for start: use this order DESC
44
+ # (because plugins which appears later in configurations will receive events from plugins which appears earlier)
45
+ # for stop/before_shutdown/shutdown/after_shutdown/close/terminate: use this order ASC
46
+ @lifecycle_cache = nil
47
+
48
+ @log = log
42
49
  @event_router = EventRouter.new(NoMatchMatch.new(log), self)
43
50
  @error_collector = nil
44
51
  end
@@ -54,9 +61,10 @@ module Fluent
54
61
  super
55
62
 
56
63
  # initialize <match> and <filter> elements
57
- conf.elements.select { |e| e.name == 'filter' || e.name == 'match' }.each { |e|
64
+ conf.elements('filter', 'match').each { |e|
65
+ next if e.for_another_worker?
58
66
  pattern = e.arg.empty? ? '**' : e.arg
59
- type = e['@type'] || e['type']
67
+ type = e['@type']
60
68
  raise ConfigError, "Missing '@type' parameter on <#{e.name}> directive" unless type
61
69
  if e.name == 'filter'
62
70
  add_filter(type, pattern, e)
@@ -66,82 +74,81 @@ module Fluent
66
74
  }
67
75
  end
68
76
 
69
- def start
70
- @outputs.each { |o|
71
- o.start
72
- @started_outputs << o
73
- }
77
+ def lifecycle_control_list
78
+ return @lifecycle_control_list if @lifecycle_control_list
74
79
 
75
- @filters.each { |f|
76
- f.start
77
- @started_filters << f
80
+ lifecycle_control_list = {
81
+ input: [],
82
+ output_with_router: [],
83
+ filter: [],
84
+ output: [],
78
85
  }
79
- end
80
-
81
- def shutdown
82
- @started_filters.map { |f|
83
- Thread.new do
84
- begin
85
- log.info "shutting down filter#{@context.nil? ? '' : " in #{@context}"}", type: Plugin.lookup_name_from_class(f.class), plugin_id: f.plugin_id
86
- f.shutdown
87
- rescue => e
88
- log.warn "unexpected error while shutting down filter plugins", plugin: f.class, plugin_id: f.plugin_id, error_class: e.class, error: e
89
- log.warn_backtrace
90
- end
86
+ if self.respond_to?(:inputs)
87
+ inputs.each do |i|
88
+ lifecycle_control_list[:input] << i
91
89
  end
92
- }.each { |t| t.join }
93
-
94
- # Output plugin as filter emits records at shutdown so emit problem still exist.
95
- # This problem will be resolved after actual filter mechanizm.
96
- @started_outputs.map { |o|
97
- Thread.new do
98
- begin
99
- log.info "shutting down output#{@context.nil? ? '' : " in #{@context}"}", type: Plugin.lookup_name_from_class(o.class), plugin_id: o.plugin_id
100
- o.shutdown
101
- rescue => e
102
- log.warn "unexpected error while shutting down output plugins", plugin: o.class, plugin_id: o.plugin_id, error_class: e.class, error: e
103
- log.warn_backtrace
104
- end
90
+ end
91
+ outputs.each do |o|
92
+ if o.has_router?
93
+ lifecycle_control_list[:output_with_router] << o
94
+ else
95
+ lifecycle_control_list[:output] << o
105
96
  end
106
- }.each { |t| t.join }
107
- end
97
+ end
98
+ filters.each do |f|
99
+ lifecycle_control_list[:filter] << f
100
+ end
108
101
 
109
- def flush!
110
- flush_recursive(@outputs)
102
+ @lifecycle_control_list = lifecycle_control_list
111
103
  end
112
104
 
113
- def flush_recursive(array)
114
- array.each { |o|
115
- begin
116
- if o.is_a?(BufferedOutput)
117
- o.force_flush
118
- elsif o.is_a?(MultiOutput)
119
- flush_recursive(o.outputs)
120
- end
121
- rescue => e
122
- log.debug "error while force flushing", error_class: e.class, error: e
123
- log.debug_backtrace
105
+ def lifecycle(desc: false)
106
+ kind_list = if desc
107
+ [:output, :filter, :output_with_router]
108
+ else
109
+ [:output_with_router, :filter, :output]
110
+ end
111
+ kind_list.each do |kind|
112
+ list = if desc
113
+ lifecycle_control_list[kind].reverse
114
+ else
115
+ lifecycle_control_list[kind]
116
+ end
117
+ display_kind = (kind == :output_with_router ? :output : kind)
118
+ list.each do |instance|
119
+ yield instance, display_kind
124
120
  end
125
- }
121
+ end
126
122
  end
127
123
 
128
124
  def add_match(type, pattern, conf)
129
- log.info "adding match#{@context.nil? ? '' : " in #{@context}"}", pattern: pattern, type: type
125
+ log_type = conf.for_this_worker? ? :default : :worker0
126
+ log.info log_type, "adding match#{@context.nil? ? '' : " in #{@context}"}", pattern: pattern, type: type
130
127
 
131
128
  output = Plugin.new_output(type)
132
- output.router = @event_router
129
+ output.context_router = @event_router
133
130
  output.configure(conf)
134
131
  @outputs << output
132
+ if output.respond_to?(:outputs) && output.respond_to?(:multi_output?) && output.multi_output?
133
+ # TODO: ruby 2.3 or later: replace `output.respond_to?(:multi_output?) && output.multi_output?` with output&.multi_output?
134
+ outputs = if output.respond_to?(:static_outputs)
135
+ output.static_outputs
136
+ else
137
+ output.outputs
138
+ end
139
+ @outputs.push(*outputs)
140
+ end
135
141
  @event_router.add_rule(pattern, output)
136
142
 
137
143
  output
138
144
  end
139
145
 
140
146
  def add_filter(type, pattern, conf)
141
- log.info "adding filter#{@context.nil? ? '' : " in #{@context}"}", pattern: pattern, type: type
147
+ log_type = conf.for_this_worker? ? :default : :worker0
148
+ log.info log_type, "adding filter#{@context.nil? ? '' : " in #{@context}"}", pattern: pattern, type: type
142
149
 
143
150
  filter = Plugin.new_filter(type)
144
- filter.router = @event_router
151
+ filter.context_router = @event_router
145
152
  filter.configure(conf)
146
153
  @filters << filter
147
154
  @event_router.add_rule(pattern, filter)
@@ -155,35 +162,5 @@ module Fluent
155
162
 
156
163
  def handle_emits_error(tag, es, error)
157
164
  end
158
-
159
- class NoMatchMatch
160
- def initialize(log)
161
- @log = log
162
- @count = 0
163
- end
164
-
165
- def emit(tag, es, chain)
166
- # TODO use time instead of num of records
167
- c = (@count += 1)
168
- if c < 512
169
- if Math.log(c) / Math.log(2) % 1.0 == 0
170
- @log.warn "no patterns matched", tag: tag
171
- return
172
- end
173
- else
174
- if c % 512 == 0
175
- @log.warn "no patterns matched", tag: tag
176
- return
177
- end
178
- end
179
- @log.on_trace { @log.trace "no patterns matched", tag: tag }
180
- end
181
-
182
- def start
183
- end
184
-
185
- def shutdown
186
- end
187
- end
188
165
  end
189
166
  end
@@ -0,0 +1,62 @@
1
+ #
2
+ # Fluentd
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+ #
16
+
17
+ module Fluent
18
+ module Clock
19
+ CLOCK_ID = Process::CLOCK_MONOTONIC_RAW rescue Process::CLOCK_MONOTONIC
20
+
21
+ @@block_level = 0
22
+ @@frozen_clock = nil
23
+
24
+ def self.now
25
+ @@frozen_clock || now_raw
26
+ end
27
+
28
+ def self.freeze(dst = nil, &block)
29
+ return freeze_block(dst, &block) if block_given?
30
+
31
+ dst = dst_clock_from_time(dst) if dst.is_a?(Time)
32
+ @@frozen_clock = dst || now_raw
33
+ end
34
+
35
+ def self.return
36
+ raise "invalid return while running code in blocks" if @@block_level > 0
37
+ @@frozen_clock = nil
38
+ end
39
+
40
+ # internal use
41
+
42
+ def self.now_raw
43
+ Process.clock_gettime(CLOCK_ID)
44
+ end
45
+
46
+ def self.dst_clock_from_time(time)
47
+ diff_sec = Time.now - time
48
+ now_raw - diff_sec
49
+ end
50
+
51
+ def self.freeze_block(dst)
52
+ dst = dst_clock_from_time(dst) if dst.is_a?(Time)
53
+ pre_frozen_clock = @@frozen_clock
54
+ @@frozen_clock = dst || now_raw
55
+ @@block_level += 1
56
+ yield
57
+ ensure
58
+ @@block_level -= 1
59
+ @@frozen_clock = pre_frozen_clock
60
+ end
61
+ end
62
+ end