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.
Files changed (562) hide show
  1. checksums.yaml +7 -0
  2. data/.deepsource.toml +13 -0
  3. data/.github/ISSUE_TEMPLATE/bug_report.yaml +71 -0
  4. data/.github/ISSUE_TEMPLATE/config.yml +5 -0
  5. data/.github/ISSUE_TEMPLATE/feature_request.yaml +39 -0
  6. data/.github/ISSUE_TEMPLATE.md +17 -0
  7. data/.github/PULL_REQUEST_TEMPLATE.md +14 -0
  8. data/.github/workflows/stale-actions.yml +24 -0
  9. data/.github/workflows/test-ruby-head.yaml +31 -0
  10. data/.github/workflows/test.yaml +32 -0
  11. data/.gitignore +30 -0
  12. data/ADOPTERS.md +5 -0
  13. data/AUTHORS +2 -0
  14. data/CHANGELOG.md +2720 -0
  15. data/CONTRIBUTING.md +45 -0
  16. data/GOVERNANCE.md +55 -0
  17. data/Gemfile +9 -0
  18. data/GithubWorkflow.md +78 -0
  19. data/LICENSE +202 -0
  20. data/MAINTAINERS.md +13 -0
  21. data/README.md +75 -0
  22. data/Rakefile +79 -0
  23. data/SECURITY.md +14 -0
  24. data/bin/fluent-binlog-reader +7 -0
  25. data/bin/fluent-ca-generate +6 -0
  26. data/bin/fluent-cap-ctl +7 -0
  27. data/bin/fluent-cat +5 -0
  28. data/bin/fluent-ctl +7 -0
  29. data/bin/fluent-debug +5 -0
  30. data/bin/fluent-gem +9 -0
  31. data/bin/fluent-plugin-config-format +5 -0
  32. data/bin/fluent-plugin-generate +5 -0
  33. data/bin/fluentd +15 -0
  34. data/code-of-conduct.md +3 -0
  35. data/docs/SECURITY_AUDIT.pdf +0 -0
  36. data/example/copy_roundrobin.conf +39 -0
  37. data/example/counter.conf +18 -0
  38. data/example/filter_stdout.conf +22 -0
  39. data/example/in_forward.conf +14 -0
  40. data/example/in_forward_client.conf +37 -0
  41. data/example/in_forward_shared_key.conf +15 -0
  42. data/example/in_forward_tls.conf +14 -0
  43. data/example/in_forward_users.conf +24 -0
  44. data/example/in_forward_workers.conf +21 -0
  45. data/example/in_http.conf +16 -0
  46. data/example/in_out_forward.conf +17 -0
  47. data/example/in_sample_blocks.conf +17 -0
  48. data/example/in_sample_with_compression.conf +23 -0
  49. data/example/in_syslog.conf +15 -0
  50. data/example/in_tail.conf +14 -0
  51. data/example/in_tcp.conf +13 -0
  52. data/example/in_udp.conf +13 -0
  53. data/example/logevents.conf +25 -0
  54. data/example/multi_filters.conf +61 -0
  55. data/example/out_copy.conf +20 -0
  56. data/example/out_exec_filter.conf +42 -0
  57. data/example/out_file.conf +13 -0
  58. data/example/out_forward.conf +35 -0
  59. data/example/out_forward_buf_file.conf +23 -0
  60. data/example/out_forward_client.conf +109 -0
  61. data/example/out_forward_heartbeat_none.conf +16 -0
  62. data/example/out_forward_sd.conf +17 -0
  63. data/example/out_forward_shared_key.conf +36 -0
  64. data/example/out_forward_tls.conf +18 -0
  65. data/example/out_forward_users.conf +65 -0
  66. data/example/out_null.conf +36 -0
  67. data/example/sd.yaml +8 -0
  68. data/example/secondary_file.conf +42 -0
  69. data/example/suppress_config_dump.conf +7 -0
  70. data/example/v0_12_filter.conf +78 -0
  71. data/example/v1_literal_example.conf +36 -0
  72. data/example/worker_section.conf +36 -0
  73. data/fluent.conf +139 -0
  74. data/fluentd.gemspec +54 -0
  75. data/lib/fluent/agent.rb +168 -0
  76. data/lib/fluent/capability.rb +87 -0
  77. data/lib/fluent/clock.rb +66 -0
  78. data/lib/fluent/command/binlog_reader.rb +244 -0
  79. data/lib/fluent/command/bundler_injection.rb +45 -0
  80. data/lib/fluent/command/ca_generate.rb +184 -0
  81. data/lib/fluent/command/cap_ctl.rb +174 -0
  82. data/lib/fluent/command/cat.rb +365 -0
  83. data/lib/fluent/command/ctl.rb +180 -0
  84. data/lib/fluent/command/debug.rb +103 -0
  85. data/lib/fluent/command/fluentd.rb +374 -0
  86. data/lib/fluent/command/plugin_config_formatter.rb +308 -0
  87. data/lib/fluent/command/plugin_generator.rb +365 -0
  88. data/lib/fluent/compat/call_super_mixin.rb +76 -0
  89. data/lib/fluent/compat/detach_process_mixin.rb +33 -0
  90. data/lib/fluent/compat/exec_util.rb +129 -0
  91. data/lib/fluent/compat/file_util.rb +54 -0
  92. data/lib/fluent/compat/filter.rb +68 -0
  93. data/lib/fluent/compat/formatter.rb +111 -0
  94. data/lib/fluent/compat/formatter_utils.rb +85 -0
  95. data/lib/fluent/compat/handle_tag_and_time_mixin.rb +62 -0
  96. data/lib/fluent/compat/handle_tag_name_mixin.rb +53 -0
  97. data/lib/fluent/compat/input.rb +49 -0
  98. data/lib/fluent/compat/output.rb +721 -0
  99. data/lib/fluent/compat/output_chain.rb +60 -0
  100. data/lib/fluent/compat/parser.rb +310 -0
  101. data/lib/fluent/compat/parser_utils.rb +40 -0
  102. data/lib/fluent/compat/propagate_default.rb +62 -0
  103. data/lib/fluent/compat/record_filter_mixin.rb +34 -0
  104. data/lib/fluent/compat/set_tag_key_mixin.rb +50 -0
  105. data/lib/fluent/compat/set_time_key_mixin.rb +69 -0
  106. data/lib/fluent/compat/socket_util.rb +165 -0
  107. data/lib/fluent/compat/string_util.rb +34 -0
  108. data/lib/fluent/compat/structured_format_mixin.rb +26 -0
  109. data/lib/fluent/compat/type_converter.rb +90 -0
  110. data/lib/fluent/config/basic_parser.rb +123 -0
  111. data/lib/fluent/config/configure_proxy.rb +424 -0
  112. data/lib/fluent/config/dsl.rb +152 -0
  113. data/lib/fluent/config/element.rb +265 -0
  114. data/lib/fluent/config/error.rb +44 -0
  115. data/lib/fluent/config/literal_parser.rb +286 -0
  116. data/lib/fluent/config/parser.rb +107 -0
  117. data/lib/fluent/config/section.rb +272 -0
  118. data/lib/fluent/config/types.rb +249 -0
  119. data/lib/fluent/config/v1_parser.rb +192 -0
  120. data/lib/fluent/config/yaml_parser/fluent_value.rb +47 -0
  121. data/lib/fluent/config/yaml_parser/loader.rb +108 -0
  122. data/lib/fluent/config/yaml_parser/parser.rb +166 -0
  123. data/lib/fluent/config/yaml_parser/section_builder.rb +107 -0
  124. data/lib/fluent/config/yaml_parser.rb +56 -0
  125. data/lib/fluent/config.rb +89 -0
  126. data/lib/fluent/configurable.rb +201 -0
  127. data/lib/fluent/counter/base_socket.rb +44 -0
  128. data/lib/fluent/counter/client.rb +297 -0
  129. data/lib/fluent/counter/error.rb +86 -0
  130. data/lib/fluent/counter/mutex_hash.rb +163 -0
  131. data/lib/fluent/counter/server.rb +273 -0
  132. data/lib/fluent/counter/store.rb +205 -0
  133. data/lib/fluent/counter/validator.rb +145 -0
  134. data/lib/fluent/counter.rb +23 -0
  135. data/lib/fluent/daemon.rb +13 -0
  136. data/lib/fluent/daemonizer.rb +88 -0
  137. data/lib/fluent/engine.rb +253 -0
  138. data/lib/fluent/env.rb +40 -0
  139. data/lib/fluent/error.rb +37 -0
  140. data/lib/fluent/event.rb +330 -0
  141. data/lib/fluent/event_router.rb +315 -0
  142. data/lib/fluent/ext_monitor_require.rb +28 -0
  143. data/lib/fluent/file_wrapper.rb +137 -0
  144. data/lib/fluent/filter.rb +21 -0
  145. data/lib/fluent/fluent_log_event_router.rb +139 -0
  146. data/lib/fluent/formatter.rb +23 -0
  147. data/lib/fluent/input.rb +21 -0
  148. data/lib/fluent/label.rb +46 -0
  149. data/lib/fluent/load.rb +34 -0
  150. data/lib/fluent/log/console_adapter.rb +66 -0
  151. data/lib/fluent/log.rb +752 -0
  152. data/lib/fluent/match.rb +187 -0
  153. data/lib/fluent/mixin.rb +31 -0
  154. data/lib/fluent/msgpack_factory.rb +111 -0
  155. data/lib/fluent/oj_options.rb +61 -0
  156. data/lib/fluent/output.rb +29 -0
  157. data/lib/fluent/output_chain.rb +23 -0
  158. data/lib/fluent/parser.rb +23 -0
  159. data/lib/fluent/plugin/bare_output.rb +104 -0
  160. data/lib/fluent/plugin/base.rb +214 -0
  161. data/lib/fluent/plugin/buf_file.rb +242 -0
  162. data/lib/fluent/plugin/buf_file_single.rb +254 -0
  163. data/lib/fluent/plugin/buf_memory.rb +34 -0
  164. data/lib/fluent/plugin/buffer/chunk.rb +240 -0
  165. data/lib/fluent/plugin/buffer/file_chunk.rb +413 -0
  166. data/lib/fluent/plugin/buffer/file_single_chunk.rb +310 -0
  167. data/lib/fluent/plugin/buffer/memory_chunk.rb +91 -0
  168. data/lib/fluent/plugin/buffer.rb +941 -0
  169. data/lib/fluent/plugin/compressable.rb +96 -0
  170. data/lib/fluent/plugin/exec_util.rb +22 -0
  171. data/lib/fluent/plugin/file_util.rb +22 -0
  172. data/lib/fluent/plugin/filter.rb +127 -0
  173. data/lib/fluent/plugin/filter_grep.rb +189 -0
  174. data/lib/fluent/plugin/filter_parser.rb +130 -0
  175. data/lib/fluent/plugin/filter_record_transformer.rb +324 -0
  176. data/lib/fluent/plugin/filter_stdout.rb +53 -0
  177. data/lib/fluent/plugin/formatter.rb +75 -0
  178. data/lib/fluent/plugin/formatter_csv.rb +78 -0
  179. data/lib/fluent/plugin/formatter_hash.rb +35 -0
  180. data/lib/fluent/plugin/formatter_json.rb +59 -0
  181. data/lib/fluent/plugin/formatter_ltsv.rb +44 -0
  182. data/lib/fluent/plugin/formatter_msgpack.rb +33 -0
  183. data/lib/fluent/plugin/formatter_out_file.rb +53 -0
  184. data/lib/fluent/plugin/formatter_single_value.rb +36 -0
  185. data/lib/fluent/plugin/formatter_stdout.rb +76 -0
  186. data/lib/fluent/plugin/formatter_tsv.rb +40 -0
  187. data/lib/fluent/plugin/in_debug_agent.rb +71 -0
  188. data/lib/fluent/plugin/in_dummy.rb +18 -0
  189. data/lib/fluent/plugin/in_exec.rb +110 -0
  190. data/lib/fluent/plugin/in_forward.rb +473 -0
  191. data/lib/fluent/plugin/in_gc_stat.rb +72 -0
  192. data/lib/fluent/plugin/in_http.rb +677 -0
  193. data/lib/fluent/plugin/in_monitor_agent.rb +412 -0
  194. data/lib/fluent/plugin/in_object_space.rb +93 -0
  195. data/lib/fluent/plugin/in_sample.rb +141 -0
  196. data/lib/fluent/plugin/in_syslog.rb +276 -0
  197. data/lib/fluent/plugin/in_tail/group_watch.rb +204 -0
  198. data/lib/fluent/plugin/in_tail/position_file.rb +269 -0
  199. data/lib/fluent/plugin/in_tail.rb +1299 -0
  200. data/lib/fluent/plugin/in_tcp.rb +226 -0
  201. data/lib/fluent/plugin/in_udp.rb +92 -0
  202. data/lib/fluent/plugin/in_unix.rb +195 -0
  203. data/lib/fluent/plugin/input.rb +75 -0
  204. data/lib/fluent/plugin/metrics.rb +119 -0
  205. data/lib/fluent/plugin/metrics_local.rb +96 -0
  206. data/lib/fluent/plugin/multi_output.rb +195 -0
  207. data/lib/fluent/plugin/out_copy.rb +120 -0
  208. data/lib/fluent/plugin/out_exec.rb +105 -0
  209. data/lib/fluent/plugin/out_exec_filter.rb +319 -0
  210. data/lib/fluent/plugin/out_file.rb +340 -0
  211. data/lib/fluent/plugin/out_forward/ack_handler.rb +176 -0
  212. data/lib/fluent/plugin/out_forward/connection_manager.rb +113 -0
  213. data/lib/fluent/plugin/out_forward/error.rb +28 -0
  214. data/lib/fluent/plugin/out_forward/failure_detector.rb +84 -0
  215. data/lib/fluent/plugin/out_forward/handshake_protocol.rb +125 -0
  216. data/lib/fluent/plugin/out_forward/load_balancer.rb +114 -0
  217. data/lib/fluent/plugin/out_forward/socket_cache.rb +142 -0
  218. data/lib/fluent/plugin/out_forward.rb +826 -0
  219. data/lib/fluent/plugin/out_http.rb +275 -0
  220. data/lib/fluent/plugin/out_null.rb +74 -0
  221. data/lib/fluent/plugin/out_relabel.rb +32 -0
  222. data/lib/fluent/plugin/out_roundrobin.rb +84 -0
  223. data/lib/fluent/plugin/out_secondary_file.rb +148 -0
  224. data/lib/fluent/plugin/out_stdout.rb +74 -0
  225. data/lib/fluent/plugin/out_stream.rb +130 -0
  226. data/lib/fluent/plugin/output.rb +1603 -0
  227. data/lib/fluent/plugin/owned_by_mixin.rb +41 -0
  228. data/lib/fluent/plugin/parser.rb +274 -0
  229. data/lib/fluent/plugin/parser_apache.rb +28 -0
  230. data/lib/fluent/plugin/parser_apache2.rb +88 -0
  231. data/lib/fluent/plugin/parser_apache_error.rb +26 -0
  232. data/lib/fluent/plugin/parser_csv.rb +114 -0
  233. data/lib/fluent/plugin/parser_json.rb +96 -0
  234. data/lib/fluent/plugin/parser_ltsv.rb +51 -0
  235. data/lib/fluent/plugin/parser_msgpack.rb +50 -0
  236. data/lib/fluent/plugin/parser_multiline.rb +152 -0
  237. data/lib/fluent/plugin/parser_nginx.rb +28 -0
  238. data/lib/fluent/plugin/parser_none.rb +36 -0
  239. data/lib/fluent/plugin/parser_regexp.rb +68 -0
  240. data/lib/fluent/plugin/parser_syslog.rb +496 -0
  241. data/lib/fluent/plugin/parser_tsv.rb +42 -0
  242. data/lib/fluent/plugin/sd_file.rb +156 -0
  243. data/lib/fluent/plugin/sd_srv.rb +135 -0
  244. data/lib/fluent/plugin/sd_static.rb +58 -0
  245. data/lib/fluent/plugin/service_discovery.rb +65 -0
  246. data/lib/fluent/plugin/socket_util.rb +22 -0
  247. data/lib/fluent/plugin/storage.rb +84 -0
  248. data/lib/fluent/plugin/storage_local.rb +162 -0
  249. data/lib/fluent/plugin/string_util.rb +22 -0
  250. data/lib/fluent/plugin.rb +206 -0
  251. data/lib/fluent/plugin_helper/cert_option.rb +191 -0
  252. data/lib/fluent/plugin_helper/child_process.rb +369 -0
  253. data/lib/fluent/plugin_helper/compat_parameters.rb +343 -0
  254. data/lib/fluent/plugin_helper/counter.rb +51 -0
  255. data/lib/fluent/plugin_helper/event_emitter.rb +100 -0
  256. data/lib/fluent/plugin_helper/event_loop.rb +170 -0
  257. data/lib/fluent/plugin_helper/extract.rb +104 -0
  258. data/lib/fluent/plugin_helper/formatter.rb +147 -0
  259. data/lib/fluent/plugin_helper/http_server/app.rb +79 -0
  260. data/lib/fluent/plugin_helper/http_server/compat/server.rb +92 -0
  261. data/lib/fluent/plugin_helper/http_server/compat/ssl_context_extractor.rb +52 -0
  262. data/lib/fluent/plugin_helper/http_server/compat/webrick_handler.rb +58 -0
  263. data/lib/fluent/plugin_helper/http_server/methods.rb +35 -0
  264. data/lib/fluent/plugin_helper/http_server/request.rb +42 -0
  265. data/lib/fluent/plugin_helper/http_server/router.rb +54 -0
  266. data/lib/fluent/plugin_helper/http_server/server.rb +94 -0
  267. data/lib/fluent/plugin_helper/http_server/ssl_context_builder.rb +41 -0
  268. data/lib/fluent/plugin_helper/http_server.rb +135 -0
  269. data/lib/fluent/plugin_helper/inject.rb +154 -0
  270. data/lib/fluent/plugin_helper/metrics.rb +129 -0
  271. data/lib/fluent/plugin_helper/parser.rb +147 -0
  272. data/lib/fluent/plugin_helper/record_accessor.rb +207 -0
  273. data/lib/fluent/plugin_helper/retry_state.rb +219 -0
  274. data/lib/fluent/plugin_helper/server.rb +828 -0
  275. data/lib/fluent/plugin_helper/service_discovery/manager.rb +146 -0
  276. data/lib/fluent/plugin_helper/service_discovery/round_robin_balancer.rb +43 -0
  277. data/lib/fluent/plugin_helper/service_discovery.rb +125 -0
  278. data/lib/fluent/plugin_helper/socket.rb +288 -0
  279. data/lib/fluent/plugin_helper/socket_option.rb +98 -0
  280. data/lib/fluent/plugin_helper/storage.rb +349 -0
  281. data/lib/fluent/plugin_helper/thread.rb +180 -0
  282. data/lib/fluent/plugin_helper/timer.rb +92 -0
  283. data/lib/fluent/plugin_helper.rb +75 -0
  284. data/lib/fluent/plugin_id.rb +93 -0
  285. data/lib/fluent/process.rb +22 -0
  286. data/lib/fluent/registry.rb +117 -0
  287. data/lib/fluent/root_agent.rb +372 -0
  288. data/lib/fluent/rpc.rb +95 -0
  289. data/lib/fluent/static_config_analysis.rb +194 -0
  290. data/lib/fluent/supervisor.rb +1076 -0
  291. data/lib/fluent/system_config.rb +189 -0
  292. data/lib/fluent/test/base.rb +78 -0
  293. data/lib/fluent/test/driver/base.rb +231 -0
  294. data/lib/fluent/test/driver/base_owned.rb +83 -0
  295. data/lib/fluent/test/driver/base_owner.rb +135 -0
  296. data/lib/fluent/test/driver/event_feeder.rb +98 -0
  297. data/lib/fluent/test/driver/filter.rb +61 -0
  298. data/lib/fluent/test/driver/formatter.rb +30 -0
  299. data/lib/fluent/test/driver/input.rb +31 -0
  300. data/lib/fluent/test/driver/multi_output.rb +53 -0
  301. data/lib/fluent/test/driver/output.rb +102 -0
  302. data/lib/fluent/test/driver/parser.rb +30 -0
  303. data/lib/fluent/test/driver/storage.rb +30 -0
  304. data/lib/fluent/test/driver/test_event_router.rb +45 -0
  305. data/lib/fluent/test/filter_test.rb +77 -0
  306. data/lib/fluent/test/formatter_test.rb +65 -0
  307. data/lib/fluent/test/helpers.rb +134 -0
  308. data/lib/fluent/test/input_test.rb +174 -0
  309. data/lib/fluent/test/log.rb +79 -0
  310. data/lib/fluent/test/output_test.rb +156 -0
  311. data/lib/fluent/test/parser_test.rb +70 -0
  312. data/lib/fluent/test/startup_shutdown.rb +44 -0
  313. data/lib/fluent/test.rb +58 -0
  314. data/lib/fluent/time.rb +512 -0
  315. data/lib/fluent/timezone.rb +171 -0
  316. data/lib/fluent/tls.rb +81 -0
  317. data/lib/fluent/unique_id.rb +39 -0
  318. data/lib/fluent/variable_store.rb +40 -0
  319. data/lib/fluent/version.rb +21 -0
  320. data/lib/fluent/win32api.rb +38 -0
  321. data/lib/fluent/winsvc.rb +100 -0
  322. data/templates/new_gem/Gemfile +3 -0
  323. data/templates/new_gem/README.md.erb +43 -0
  324. data/templates/new_gem/Rakefile +13 -0
  325. data/templates/new_gem/fluent-plugin.gemspec.erb +27 -0
  326. data/templates/new_gem/lib/fluent/plugin/filter.rb.erb +14 -0
  327. data/templates/new_gem/lib/fluent/plugin/formatter.rb.erb +14 -0
  328. data/templates/new_gem/lib/fluent/plugin/input.rb.erb +11 -0
  329. data/templates/new_gem/lib/fluent/plugin/output.rb.erb +11 -0
  330. data/templates/new_gem/lib/fluent/plugin/parser.rb.erb +15 -0
  331. data/templates/new_gem/lib/fluent/plugin/storage.rb.erb +40 -0
  332. data/templates/new_gem/test/helper.rb.erb +7 -0
  333. data/templates/new_gem/test/plugin/test_filter.rb.erb +18 -0
  334. data/templates/new_gem/test/plugin/test_formatter.rb.erb +18 -0
  335. data/templates/new_gem/test/plugin/test_input.rb.erb +18 -0
  336. data/templates/new_gem/test/plugin/test_output.rb.erb +18 -0
  337. data/templates/new_gem/test/plugin/test_parser.rb.erb +18 -0
  338. data/templates/new_gem/test/plugin/test_storage.rb.erb +18 -0
  339. data/templates/plugin_config_formatter/param.md-compact.erb +25 -0
  340. data/templates/plugin_config_formatter/param.md-table.erb +10 -0
  341. data/templates/plugin_config_formatter/param.md.erb +34 -0
  342. data/templates/plugin_config_formatter/section.md.erb +12 -0
  343. data/test/command/test_binlog_reader.rb +362 -0
  344. data/test/command/test_ca_generate.rb +70 -0
  345. data/test/command/test_cap_ctl.rb +100 -0
  346. data/test/command/test_cat.rb +128 -0
  347. data/test/command/test_ctl.rb +56 -0
  348. data/test/command/test_fluentd.rb +1291 -0
  349. data/test/command/test_plugin_config_formatter.rb +397 -0
  350. data/test/command/test_plugin_generator.rb +109 -0
  351. data/test/compat/test_calls_super.rb +166 -0
  352. data/test/compat/test_parser.rb +92 -0
  353. data/test/config/assertions.rb +42 -0
  354. data/test/config/test_config_parser.rb +551 -0
  355. data/test/config/test_configurable.rb +1784 -0
  356. data/test/config/test_configure_proxy.rb +604 -0
  357. data/test/config/test_dsl.rb +415 -0
  358. data/test/config/test_element.rb +518 -0
  359. data/test/config/test_literal_parser.rb +309 -0
  360. data/test/config/test_plugin_configuration.rb +56 -0
  361. data/test/config/test_section.rb +191 -0
  362. data/test/config/test_system_config.rb +195 -0
  363. data/test/config/test_types.rb +408 -0
  364. data/test/counter/test_client.rb +563 -0
  365. data/test/counter/test_error.rb +44 -0
  366. data/test/counter/test_mutex_hash.rb +179 -0
  367. data/test/counter/test_server.rb +589 -0
  368. data/test/counter/test_store.rb +258 -0
  369. data/test/counter/test_validator.rb +137 -0
  370. data/test/helper.rb +155 -0
  371. data/test/helpers/fuzzy_assert.rb +89 -0
  372. data/test/helpers/process_extenstion.rb +33 -0
  373. data/test/log/test_console_adapter.rb +110 -0
  374. data/test/plugin/data/2010/01/20100102-030405.log +0 -0
  375. data/test/plugin/data/2010/01/20100102-030406.log +0 -0
  376. data/test/plugin/data/2010/01/20100102.log +0 -0
  377. data/test/plugin/data/log/bar +0 -0
  378. data/test/plugin/data/log/foo/bar.log +0 -0
  379. data/test/plugin/data/log/foo/bar2 +0 -0
  380. data/test/plugin/data/log/test.log +0 -0
  381. data/test/plugin/data/sd_file/config +11 -0
  382. data/test/plugin/data/sd_file/config.json +17 -0
  383. data/test/plugin/data/sd_file/config.yaml +11 -0
  384. data/test/plugin/data/sd_file/config.yml +11 -0
  385. data/test/plugin/data/sd_file/invalid_config.yml +7 -0
  386. data/test/plugin/in_tail/test_fifo.rb +121 -0
  387. data/test/plugin/in_tail/test_io_handler.rb +150 -0
  388. data/test/plugin/in_tail/test_position_file.rb +346 -0
  389. data/test/plugin/out_forward/test_ack_handler.rb +140 -0
  390. data/test/plugin/out_forward/test_connection_manager.rb +145 -0
  391. data/test/plugin/out_forward/test_handshake_protocol.rb +112 -0
  392. data/test/plugin/out_forward/test_load_balancer.rb +106 -0
  393. data/test/plugin/out_forward/test_socket_cache.rb +174 -0
  394. data/test/plugin/test_bare_output.rb +131 -0
  395. data/test/plugin/test_base.rb +247 -0
  396. data/test/plugin/test_buf_file.rb +1314 -0
  397. data/test/plugin/test_buf_file_single.rb +898 -0
  398. data/test/plugin/test_buf_memory.rb +42 -0
  399. data/test/plugin/test_buffer.rb +1434 -0
  400. data/test/plugin/test_buffer_chunk.rb +209 -0
  401. data/test/plugin/test_buffer_file_chunk.rb +871 -0
  402. data/test/plugin/test_buffer_file_single_chunk.rb +611 -0
  403. data/test/plugin/test_buffer_memory_chunk.rb +339 -0
  404. data/test/plugin/test_compressable.rb +87 -0
  405. data/test/plugin/test_file_util.rb +96 -0
  406. data/test/plugin/test_filter.rb +368 -0
  407. data/test/plugin/test_filter_grep.rb +697 -0
  408. data/test/plugin/test_filter_parser.rb +731 -0
  409. data/test/plugin/test_filter_record_transformer.rb +577 -0
  410. data/test/plugin/test_filter_stdout.rb +207 -0
  411. data/test/plugin/test_formatter_csv.rb +136 -0
  412. data/test/plugin/test_formatter_hash.rb +38 -0
  413. data/test/plugin/test_formatter_json.rb +61 -0
  414. data/test/plugin/test_formatter_ltsv.rb +70 -0
  415. data/test/plugin/test_formatter_msgpack.rb +28 -0
  416. data/test/plugin/test_formatter_out_file.rb +116 -0
  417. data/test/plugin/test_formatter_single_value.rb +44 -0
  418. data/test/plugin/test_formatter_tsv.rb +76 -0
  419. data/test/plugin/test_in_debug_agent.rb +49 -0
  420. data/test/plugin/test_in_exec.rb +261 -0
  421. data/test/plugin/test_in_forward.rb +1178 -0
  422. data/test/plugin/test_in_gc_stat.rb +62 -0
  423. data/test/plugin/test_in_http.rb +1102 -0
  424. data/test/plugin/test_in_monitor_agent.rb +922 -0
  425. data/test/plugin/test_in_object_space.rb +66 -0
  426. data/test/plugin/test_in_sample.rb +190 -0
  427. data/test/plugin/test_in_syslog.rb +505 -0
  428. data/test/plugin/test_in_tail.rb +3125 -0
  429. data/test/plugin/test_in_tcp.rb +328 -0
  430. data/test/plugin/test_in_udp.rb +296 -0
  431. data/test/plugin/test_in_unix.rb +181 -0
  432. data/test/plugin/test_input.rb +137 -0
  433. data/test/plugin/test_metadata.rb +89 -0
  434. data/test/plugin/test_metrics.rb +294 -0
  435. data/test/plugin/test_metrics_local.rb +96 -0
  436. data/test/plugin/test_multi_output.rb +204 -0
  437. data/test/plugin/test_out_copy.rb +308 -0
  438. data/test/plugin/test_out_exec.rb +312 -0
  439. data/test/plugin/test_out_exec_filter.rb +606 -0
  440. data/test/plugin/test_out_file.rb +1038 -0
  441. data/test/plugin/test_out_forward.rb +1361 -0
  442. data/test/plugin/test_out_http.rb +429 -0
  443. data/test/plugin/test_out_null.rb +105 -0
  444. data/test/plugin/test_out_relabel.rb +28 -0
  445. data/test/plugin/test_out_roundrobin.rb +146 -0
  446. data/test/plugin/test_out_secondary_file.rb +458 -0
  447. data/test/plugin/test_out_stdout.rb +205 -0
  448. data/test/plugin/test_out_stream.rb +103 -0
  449. data/test/plugin/test_output.rb +1334 -0
  450. data/test/plugin/test_output_as_buffered.rb +2024 -0
  451. data/test/plugin/test_output_as_buffered_backup.rb +363 -0
  452. data/test/plugin/test_output_as_buffered_compress.rb +179 -0
  453. data/test/plugin/test_output_as_buffered_overflow.rb +250 -0
  454. data/test/plugin/test_output_as_buffered_retries.rb +966 -0
  455. data/test/plugin/test_output_as_buffered_secondary.rb +882 -0
  456. data/test/plugin/test_output_as_standard.rb +374 -0
  457. data/test/plugin/test_owned_by.rb +34 -0
  458. data/test/plugin/test_parser.rb +399 -0
  459. data/test/plugin/test_parser_apache.rb +42 -0
  460. data/test/plugin/test_parser_apache2.rb +47 -0
  461. data/test/plugin/test_parser_apache_error.rb +45 -0
  462. data/test/plugin/test_parser_csv.rb +200 -0
  463. data/test/plugin/test_parser_json.rb +138 -0
  464. data/test/plugin/test_parser_labeled_tsv.rb +160 -0
  465. data/test/plugin/test_parser_multiline.rb +111 -0
  466. data/test/plugin/test_parser_nginx.rb +88 -0
  467. data/test/plugin/test_parser_none.rb +52 -0
  468. data/test/plugin/test_parser_regexp.rb +284 -0
  469. data/test/plugin/test_parser_syslog.rb +650 -0
  470. data/test/plugin/test_parser_tsv.rb +122 -0
  471. data/test/plugin/test_sd_file.rb +228 -0
  472. data/test/plugin/test_sd_srv.rb +230 -0
  473. data/test/plugin/test_storage.rb +166 -0
  474. data/test/plugin/test_storage_local.rb +335 -0
  475. data/test/plugin/test_string_util.rb +26 -0
  476. data/test/plugin_helper/data/cert/cert-key.pem +27 -0
  477. data/test/plugin_helper/data/cert/cert-with-CRLF.pem +19 -0
  478. data/test/plugin_helper/data/cert/cert-with-no-newline.pem +19 -0
  479. data/test/plugin_helper/data/cert/cert.pem +19 -0
  480. data/test/plugin_helper/data/cert/cert_chains/ca-cert-key.pem +27 -0
  481. data/test/plugin_helper/data/cert/cert_chains/ca-cert.pem +20 -0
  482. data/test/plugin_helper/data/cert/cert_chains/cert-key.pem +27 -0
  483. data/test/plugin_helper/data/cert/cert_chains/cert.pem +40 -0
  484. data/test/plugin_helper/data/cert/empty.pem +0 -0
  485. data/test/plugin_helper/data/cert/generate_cert.rb +125 -0
  486. data/test/plugin_helper/data/cert/with_ca/ca-cert-key-pass.pem +30 -0
  487. data/test/plugin_helper/data/cert/with_ca/ca-cert-key.pem +27 -0
  488. data/test/plugin_helper/data/cert/with_ca/ca-cert-pass.pem +20 -0
  489. data/test/plugin_helper/data/cert/with_ca/ca-cert.pem +20 -0
  490. data/test/plugin_helper/data/cert/with_ca/cert-key-pass.pem +30 -0
  491. data/test/plugin_helper/data/cert/with_ca/cert-key.pem +27 -0
  492. data/test/plugin_helper/data/cert/with_ca/cert-pass.pem +21 -0
  493. data/test/plugin_helper/data/cert/with_ca/cert.pem +21 -0
  494. data/test/plugin_helper/data/cert/without_ca/cert-key-pass.pem +30 -0
  495. data/test/plugin_helper/data/cert/without_ca/cert-key.pem +27 -0
  496. data/test/plugin_helper/data/cert/without_ca/cert-pass.pem +20 -0
  497. data/test/plugin_helper/data/cert/without_ca/cert.pem +20 -0
  498. data/test/plugin_helper/http_server/test_app.rb +65 -0
  499. data/test/plugin_helper/http_server/test_route.rb +32 -0
  500. data/test/plugin_helper/service_discovery/test_manager.rb +93 -0
  501. data/test/plugin_helper/service_discovery/test_round_robin_balancer.rb +21 -0
  502. data/test/plugin_helper/test_cert_option.rb +25 -0
  503. data/test/plugin_helper/test_child_process.rb +862 -0
  504. data/test/plugin_helper/test_compat_parameters.rb +358 -0
  505. data/test/plugin_helper/test_event_emitter.rb +80 -0
  506. data/test/plugin_helper/test_event_loop.rb +52 -0
  507. data/test/plugin_helper/test_extract.rb +194 -0
  508. data/test/plugin_helper/test_formatter.rb +255 -0
  509. data/test/plugin_helper/test_http_server_helper.rb +372 -0
  510. data/test/plugin_helper/test_inject.rb +561 -0
  511. data/test/plugin_helper/test_metrics.rb +137 -0
  512. data/test/plugin_helper/test_parser.rb +264 -0
  513. data/test/plugin_helper/test_record_accessor.rb +238 -0
  514. data/test/plugin_helper/test_retry_state.rb +1006 -0
  515. data/test/plugin_helper/test_server.rb +1895 -0
  516. data/test/plugin_helper/test_service_discovery.rb +165 -0
  517. data/test/plugin_helper/test_socket.rb +146 -0
  518. data/test/plugin_helper/test_storage.rb +542 -0
  519. data/test/plugin_helper/test_thread.rb +164 -0
  520. data/test/plugin_helper/test_timer.rb +130 -0
  521. data/test/scripts/exec_script.rb +32 -0
  522. data/test/scripts/fluent/plugin/formatter1/formatter_test1.rb +7 -0
  523. data/test/scripts/fluent/plugin/formatter2/formatter_test2.rb +7 -0
  524. data/test/scripts/fluent/plugin/formatter_known.rb +8 -0
  525. data/test/scripts/fluent/plugin/out_test.rb +81 -0
  526. data/test/scripts/fluent/plugin/out_test2.rb +80 -0
  527. data/test/scripts/fluent/plugin/parser_known.rb +4 -0
  528. data/test/test_capability.rb +74 -0
  529. data/test/test_clock.rb +164 -0
  530. data/test/test_config.rb +369 -0
  531. data/test/test_configdsl.rb +148 -0
  532. data/test/test_daemonizer.rb +91 -0
  533. data/test/test_engine.rb +203 -0
  534. data/test/test_event.rb +531 -0
  535. data/test/test_event_router.rb +348 -0
  536. data/test/test_event_time.rb +199 -0
  537. data/test/test_file_wrapper.rb +53 -0
  538. data/test/test_filter.rb +121 -0
  539. data/test/test_fluent_log_event_router.rb +99 -0
  540. data/test/test_formatter.rb +369 -0
  541. data/test/test_input.rb +31 -0
  542. data/test/test_log.rb +1076 -0
  543. data/test/test_match.rb +148 -0
  544. data/test/test_mixin.rb +351 -0
  545. data/test/test_msgpack_factory.rb +50 -0
  546. data/test/test_oj_options.rb +55 -0
  547. data/test/test_output.rb +278 -0
  548. data/test/test_plugin.rb +251 -0
  549. data/test/test_plugin_classes.rb +370 -0
  550. data/test/test_plugin_helper.rb +81 -0
  551. data/test/test_plugin_id.rb +119 -0
  552. data/test/test_process.rb +14 -0
  553. data/test/test_root_agent.rb +951 -0
  554. data/test/test_static_config_analysis.rb +177 -0
  555. data/test/test_supervisor.rb +821 -0
  556. data/test/test_test_drivers.rb +136 -0
  557. data/test/test_time_formatter.rb +301 -0
  558. data/test/test_time_parser.rb +362 -0
  559. data/test/test_tls.rb +65 -0
  560. data/test/test_unique_id.rb +47 -0
  561. data/test/test_variable_store.rb +65 -0
  562. metadata +1183 -0
@@ -0,0 +1,180 @@
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 'optparse'
18
+ require 'fluent/env'
19
+ require 'fluent/version'
20
+ if Fluent.windows?
21
+ require 'win32/event'
22
+ require 'win32/service'
23
+ end
24
+
25
+ module Fluent
26
+ class Ctl
27
+ DEFAULT_OPTIONS = {}
28
+
29
+ if Fluent.windows?
30
+ include Windows::ServiceConstants
31
+ include Windows::ServiceStructs
32
+ include Windows::ServiceFunctions
33
+
34
+ COMMAND_MAP = {
35
+ shutdown: "",
36
+ restart: "HUP",
37
+ flush: "USR1",
38
+ reload: "USR2",
39
+ dump: "CONT",
40
+ }
41
+ WINSVC_CONTROL_CODE_MAP = {
42
+ shutdown: SERVICE_CONTROL_STOP,
43
+ # 128 - 255: user-defined control code
44
+ # See https://docs.microsoft.com/en-us/windows/win32/api/winsvc/nf-winsvc-controlservice
45
+ restart: 128,
46
+ flush: 129,
47
+ reload: SERVICE_CONTROL_PARAMCHANGE,
48
+ dump: 130,
49
+ }
50
+ else
51
+ COMMAND_MAP = {
52
+ shutdown: :TERM,
53
+ restart: :HUP,
54
+ flush: :USR1,
55
+ reload: :USR2,
56
+ dump: :CONT,
57
+ }
58
+ end
59
+
60
+ def initialize(argv = ARGV)
61
+ @argv = argv
62
+ @options = {}
63
+ @opt_parser = OptionParser.new
64
+ configure_option_parser
65
+ @options.merge!(DEFAULT_OPTIONS)
66
+ parse_options!
67
+ end
68
+
69
+ def help_text
70
+ text = "\n"
71
+ if Fluent.windows?
72
+ text << "Usage: #{$PROGRAM_NAME} COMMAND [PID_OR_SVCNAME]\n"
73
+ else
74
+ text << "Usage: #{$PROGRAM_NAME} COMMAND PID\n"
75
+ end
76
+ text << "\n"
77
+ text << "Commands: \n"
78
+ COMMAND_MAP.each do |key, value|
79
+ text << " #{key}\n"
80
+ end
81
+ text
82
+ end
83
+
84
+ def usage(msg = nil)
85
+ puts help_text
86
+ if msg
87
+ puts
88
+ puts "Error: #{msg}"
89
+ end
90
+ exit 1
91
+ end
92
+
93
+ def call
94
+ if Fluent.windows?
95
+ if /^[0-9]+$/.match?(@pid_or_svcname)
96
+ # Use as PID
97
+ return call_windows_event(@command, "fluentd_#{@pid_or_svcname}")
98
+ end
99
+
100
+ unless call_winsvc_control_code(@command, @pid_or_svcname)
101
+ puts "Cannot send control code to #{@pid_or_svcname} service, try to send an event with this name ..."
102
+ call_windows_event(@command, @pid_or_svcname)
103
+ end
104
+ else
105
+ call_signal(@command, @pid_or_svcname)
106
+ end
107
+ end
108
+
109
+ private
110
+
111
+ def call_signal(command, pid)
112
+ signal = COMMAND_MAP[command.to_sym]
113
+ Process.kill(signal, pid.to_i)
114
+ end
115
+
116
+ def call_winsvc_control_code(command, pid_or_svcname)
117
+ status = SERVICE_STATUS.new
118
+
119
+ begin
120
+ handle_scm = OpenSCManager(nil, nil, SC_MANAGER_CONNECT)
121
+ FFI.raise_windows_error('OpenSCManager') if handle_scm == 0
122
+
123
+ handle_scs = OpenService(handle_scm, "fluentdwinsvc", SERVICE_STOP | SERVICE_PAUSE_CONTINUE | SERVICE_USER_DEFINED_CONTROL)
124
+ FFI.raise_windows_error('OpenService') if handle_scs == 0
125
+
126
+ control_code = WINSVC_CONTROL_CODE_MAP[command.to_sym]
127
+
128
+ unless ControlService(handle_scs, control_code, status)
129
+ FFI.raise_windows_error('ControlService')
130
+ end
131
+ rescue => e
132
+ puts e
133
+ state = status[:dwCurrentState]
134
+ return state == SERVICE_STOPPED || state == SERVICE_STOP_PENDING
135
+ ensure
136
+ CloseServiceHandle(handle_scs)
137
+ CloseServiceHandle(handle_scm)
138
+ end
139
+
140
+ return true
141
+ end
142
+
143
+ def call_windows_event(command, pid_or_svcname)
144
+ prefix = pid_or_svcname
145
+ event_name = COMMAND_MAP[command.to_sym]
146
+ suffix = event_name.empty? ? "" : "_#{event_name}"
147
+
148
+ begin
149
+ event = Win32::Event.open("#{prefix}#{suffix}")
150
+ event.set
151
+ event.close
152
+ rescue Errno::ENOENT
153
+ puts "Error: Cannot find the fluentd process with the event name: \"#{prefix}\""
154
+ end
155
+ end
156
+
157
+ def configure_option_parser
158
+ @opt_parser.banner = help_text
159
+ @opt_parser.version = Fluent::VERSION
160
+ end
161
+
162
+ def parse_options!
163
+ @opt_parser.parse!(@argv)
164
+
165
+ @command = @argv[0]
166
+ @pid_or_svcname = @argv[1] || "fluentdwinsvc"
167
+
168
+ usage("Command isn't specified!") if @command.nil? || @command.empty?
169
+ usage("Unknown command: #{@command}") unless COMMAND_MAP.has_key?(@command.to_sym)
170
+
171
+ if Fluent.windows?
172
+ usage("PID or SVCNAME isn't specified!") if @pid_or_svcname.nil? || @pid_or_svcname.empty?
173
+ else
174
+ usage("PID isn't specified!") if @pid_or_svcname.nil? || @pid_or_svcname.empty?
175
+ usage("Invalid PID: #{pid}") unless /^[0-9]+$/.match?(@pid_or_svcname)
176
+ end
177
+ end
178
+ end
179
+ end
180
+
@@ -0,0 +1,103 @@
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 'optparse'
18
+
19
+ op = OptionParser.new
20
+
21
+ host = '127.0.0.1'
22
+ port = 24230
23
+ unix = nil
24
+
25
+ op.on('-h', '--host HOST', "fluent host (default: #{host})") {|s|
26
+ host = s
27
+ }
28
+
29
+ op.on('-p', '--port PORT', "debug_agent tcp port (default: #{port})", Integer) {|i|
30
+ port = i
31
+ }
32
+
33
+ op.on('-u', '--unix PATH', "use unix socket instead of tcp") {|b|
34
+ unix = b
35
+ }
36
+
37
+ singleton_class.module_eval do
38
+ define_method(:usage) do |msg|
39
+ puts op.to_s
40
+ puts "error: #{msg}" if msg
41
+ exit 1
42
+ end
43
+ end
44
+
45
+ begin
46
+ op.parse!(ARGV)
47
+
48
+ if ARGV.length != 0
49
+ usage nil
50
+ end
51
+ rescue
52
+ usage $!.to_s
53
+ end
54
+
55
+ require 'drb/drb'
56
+
57
+ if unix
58
+ uri = "drbunix:#{unix}"
59
+ else
60
+ uri = "druby://#{host}:#{port}"
61
+ end
62
+
63
+ require 'fluent/log'
64
+ require 'fluent/env'
65
+ require 'fluent/engine'
66
+ require 'fluent/system_config'
67
+ require 'serverengine'
68
+
69
+ include Fluent::SystemConfig::Mixin
70
+
71
+ dl_opts = {}
72
+ dl_opts[:log_level] = ServerEngine::DaemonLogger::TRACE
73
+ logger = ServerEngine::DaemonLogger.new(STDERR, dl_opts)
74
+ $log = Fluent::Log.new(logger)
75
+ Fluent::Engine.init(system_config)
76
+
77
+ DRb::DRbObject.class_eval do
78
+ undef_method :methods
79
+ undef_method :instance_eval
80
+ undef_method :instance_variables
81
+ undef_method :instance_variable_get
82
+ end
83
+
84
+ remote_engine = DRb::DRbObject.new_with_uri(uri)
85
+
86
+ Fluent.module_eval do
87
+ remove_const(:Engine)
88
+ const_set(:Engine, remote_engine)
89
+ end
90
+
91
+ include Fluent
92
+
93
+ puts "Connected to #{uri}."
94
+ puts "Usage:"
95
+ puts " Fluent::Engine.root_agent.event_router.match('some.tag') : get an output plugin instance"
96
+ puts " Fluent::Engine.root_agent.inputs[i] : get input plugin instances"
97
+ puts " Fluent::Plugin::OUTPUT_REGISTRY.lookup(name) : load output plugin class (use this if you get DRb::DRbUnknown)"
98
+ puts ""
99
+
100
+ Encoding.default_internal = nil if Encoding.respond_to?(:default_internal)
101
+
102
+ require 'irb'
103
+ IRB.start
@@ -0,0 +1,374 @@
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 'optparse'
18
+
19
+ require 'fluent/supervisor'
20
+ require 'fluent/log'
21
+ require 'fluent/env'
22
+ require 'fluent/version'
23
+
24
+ $fluentdargv = Marshal.load(Marshal.dump(ARGV))
25
+
26
+ op = OptionParser.new
27
+ op.version = Fluent::VERSION
28
+
29
+ default_opts = Fluent::Supervisor.default_options
30
+ cmd_opts = {}
31
+
32
+ op.on('-s', "--setup [DIR=#{File.dirname(Fluent::DEFAULT_CONFIG_PATH)}]", "install sample configuration file to the directory") {|s|
33
+ cmd_opts[:setup_path] = s || File.dirname(Fluent::DEFAULT_CONFIG_PATH)
34
+ }
35
+
36
+ op.on('-c', '--config PATH', "config file path (default: #{Fluent::DEFAULT_CONFIG_PATH})") {|s|
37
+ cmd_opts[:config_path] = s
38
+ }
39
+
40
+ op.on('--dry-run', "Check fluentd setup is correct or not", TrueClass) {|b|
41
+ cmd_opts[:dry_run] = b
42
+ }
43
+
44
+ op.on('--show-plugin-config=PLUGIN', "[DEPRECATED] Show PLUGIN configuration and exit(ex: input:dummy)") {|plugin|
45
+ cmd_opts[:show_plugin_config] = plugin
46
+ }
47
+
48
+ op.on('-p', '--plugin DIR', "add plugin directory") {|s|
49
+ (cmd_opts[:plugin_dirs] ||= []) << s
50
+ }
51
+
52
+ op.on('-I PATH', "add library path") {|s|
53
+ $LOAD_PATH << s
54
+ }
55
+
56
+ op.on('-r NAME', "load library") {|s|
57
+ (cmd_opts[:libs] ||= []) << s
58
+ }
59
+
60
+ op.on('-d', '--daemon PIDFILE', "daemonize fluent process") {|s|
61
+ cmd_opts[:daemonize] = s
62
+ }
63
+
64
+ op.on('--under-supervisor', "run fluent worker under supervisor (this option is NOT for users)") {
65
+ cmd_opts[:supervise] = false
66
+ }
67
+
68
+ op.on('--no-supervisor', "run fluent worker without supervisor") {
69
+ cmd_opts[:supervise] = false
70
+ cmd_opts[:standalone_worker] = true
71
+ }
72
+
73
+ op.on('--workers NUM', "specify the number of workers under supervisor") { |i|
74
+ cmd_opts[:workers] = i.to_i
75
+ }
76
+
77
+ op.on('--user USER', "change user") {|s|
78
+ cmd_opts[:chuser] = s
79
+ }
80
+
81
+ op.on('--group GROUP', "change group") {|s|
82
+ cmd_opts[:chgroup] = s
83
+ }
84
+
85
+ op.on('--umask UMASK', "change umask") {|s|
86
+ cmd_opts[:chumask] = s
87
+ }
88
+
89
+ op.on('-o', '--log PATH', "log file path") {|s|
90
+ cmd_opts[:log_path] = s
91
+ }
92
+
93
+ op.on('--log-rotate-age AGE', 'generations to keep rotated log files') {|age|
94
+ if Fluent::Log::LOG_ROTATE_AGE.include?(age)
95
+ cmd_opts[:log_rotate_age] = age
96
+ else
97
+ begin
98
+ cmd_opts[:log_rotate_age] = Integer(age)
99
+ rescue TypeError, ArgumentError
100
+ usage "log-rotate-age should be #{ROTATE_AGE.join(', ')} or a number"
101
+ end
102
+ end
103
+ }
104
+
105
+ op.on('--log-rotate-size BYTES', 'sets the byte size to rotate log files') {|s|
106
+ cmd_opts[:log_rotate_size] = s.to_i
107
+ }
108
+
109
+ op.on('--log-event-verbose', 'enable log events during process startup/shutdown') {|b|
110
+ cmd_opts[:log_event_verbose] = b
111
+ }
112
+
113
+ op.on('-i', '--inline-config CONFIG_STRING', "inline config which is appended to the config file on-the-fly") {|s|
114
+ cmd_opts[:inline_config] = s
115
+ }
116
+
117
+ op.on('--emit-error-log-interval SECONDS', "suppress interval seconds of emit error logs") {|s|
118
+ cmd_opts[:suppress_interval] = s.to_i
119
+ }
120
+
121
+ op.on('--suppress-repeated-stacktrace [VALUE]', "suppress repeated stacktrace", TrueClass) {|b|
122
+ b = true if b.nil?
123
+ cmd_opts[:suppress_repeated_stacktrace] = b
124
+ }
125
+
126
+ op.on('--without-source', "invoke a fluentd without input plugins", TrueClass) {|b|
127
+ cmd_opts[:without_source] = b
128
+ }
129
+
130
+ op.on('--config-file-type VALU', 'guessing file type of fluentd configuration. yaml/yml or guess') { |s|
131
+ if (s == 'yaml') || (s == 'yml')
132
+ cmd_opts[:config_file_type] = s.to_sym
133
+ elsif (s == 'guess')
134
+ cmd_opts[:config_file_type] = s.to_sym
135
+ else
136
+ usage '--config-file-type accepts yaml/yml or guess'
137
+ end
138
+ }
139
+
140
+ op.on('--use-v1-config', "Use v1 configuration format (default)", TrueClass) {|b|
141
+ cmd_opts[:use_v1_config] = b
142
+ }
143
+
144
+ op.on('--use-v0-config', "Use v0 configuration format", TrueClass) {|b|
145
+ cmd_opts[:use_v1_config] = !b
146
+ }
147
+
148
+ op.on('--strict-config-value', "Parse config values strictly", TrueClass) {|b|
149
+ cmd_opts[:strict_config_value] = b
150
+ }
151
+
152
+ op.on('--enable-input-metrics', "Enable input plugin metrics on fluentd", TrueClass) {|b|
153
+ cmd_opts[:enable_input_metrics] = b
154
+ }
155
+
156
+ op.on('--enable-size-metrics', "Enable plugin record size metrics on fluentd", TrueClass) {|b|
157
+ cmd_opts[:enable_size_metrics] = b
158
+ }
159
+
160
+ op.on('-v', '--verbose', "increase verbose level (-v: debug, -vv: trace)", TrueClass) {|b|
161
+ return unless b
162
+ cur_level = cmd_opts.fetch(:log_level, default_opts[:log_level])
163
+ cmd_opts[:log_level] = [cur_level - 1, Fluent::Log::LEVEL_TRACE].max
164
+ }
165
+
166
+ op.on('-q', '--quiet', "decrease verbose level (-q: warn, -qq: error)", TrueClass) {|b|
167
+ return unless b
168
+ cur_level = cmd_opts.fetch(:log_level, default_opts[:log_level])
169
+ cmd_opts[:log_level] = [cur_level + 1, Fluent::Log::LEVEL_ERROR].min
170
+ }
171
+
172
+ op.on('--suppress-config-dump', "suppress config dumping when fluentd starts", TrueClass) {|b|
173
+ cmd_opts[:suppress_config_dump] = b
174
+ }
175
+
176
+ op.on('-g', '--gemfile GEMFILE', "Gemfile path") {|s|
177
+ cmd_opts[:gemfile] = s
178
+ }
179
+
180
+ op.on('-G', '--gem-path GEM_INSTALL_PATH', "Gemfile install path (default: $(dirname $gemfile)/vendor/bundle)") {|s|
181
+ cmd_opts[:gem_install_path] = s
182
+ }
183
+
184
+ op.on('--conf-encoding ENCODING', "specify configuration file encoding") { |s|
185
+ cmd_opts[:conf_encoding] = s
186
+ }
187
+
188
+ op.on('--disable-shared-socket', "Don't open shared socket for multiple workers") { |b|
189
+ cmd_opts[:disable_shared_socket] = b
190
+ }
191
+
192
+ if Fluent.windows?
193
+ cmd_opts.merge!(
194
+ :winsvc_name => 'fluentdwinsvc',
195
+ :winsvc_display_name => 'Fluentd Windows Service',
196
+ :winsvc_desc => 'Fluentd is an event collector system.',
197
+ )
198
+
199
+ op.on('-x', '--signame INTSIGNAME', "an object name which is used for Windows Service signal (Windows only)") {|s|
200
+ cmd_opts[:signame] = s
201
+ }
202
+
203
+ op.on('--reg-winsvc MODE', "install/uninstall as Windows Service. (i: install, u: uninstall) (Windows only)") {|s|
204
+ cmd_opts[:regwinsvc] = s
205
+ }
206
+
207
+ op.on('--[no-]reg-winsvc-auto-start', "Automatically start the Windows Service at boot. (only effective with '--reg-winsvc i') (Windows only)") {|s|
208
+ cmd_opts[:regwinsvcautostart] = s
209
+ }
210
+
211
+ op.on('--[no-]reg-winsvc-delay-start', "Automatically start the Windows Service at boot with delay. (only effective with '--reg-winsvc i' and '--reg-winsvc-auto-start') (Windows only)") {|s|
212
+ cmd_opts[:regwinsvcdelaystart] = s
213
+ }
214
+
215
+ op.on('--reg-winsvc-fluentdopt OPTION', "specify fluentd option parameters for Windows Service. (Windows only)") {|s|
216
+ cmd_opts[:fluentdopt] = s
217
+ }
218
+
219
+ op.on('--winsvc-name NAME', "The Windows Service name to run as (Windows only)") {|s|
220
+ cmd_opts[:winsvc_name] = s
221
+ }
222
+
223
+ op.on('--winsvc-display-name DISPLAY_NAME', "The Windows Service display name (Windows only)") {|s|
224
+ cmd_opts[:winsvc_display_name] = s
225
+ }
226
+
227
+ op.on('--winsvc-desc DESC', "The Windows Service description (Windows only)") {|s|
228
+ cmd_opts[:winsvc_desc] = s
229
+ }
230
+ end
231
+
232
+
233
+ singleton_class.module_eval do
234
+ define_method(:usage) do |msg|
235
+ puts op.to_s
236
+ puts "error: #{msg}" if msg
237
+ exit 1
238
+ end
239
+ end
240
+
241
+ begin
242
+ rest = op.parse(ARGV)
243
+
244
+ if rest.length != 0
245
+ usage nil
246
+ end
247
+ rescue
248
+ usage $!.to_s
249
+ end
250
+
251
+ opts = default_opts.merge(cmd_opts)
252
+
253
+ ##
254
+ ## Bundler injection
255
+ #
256
+ if ENV['FLUENTD_DISABLE_BUNDLER_INJECTION'] != '1' && gemfile = opts[:gemfile]
257
+ ENV['BUNDLE_GEMFILE'] = gemfile
258
+ if path = opts[:gem_install_path]
259
+ ENV['BUNDLE_PATH'] = path
260
+ else
261
+ ENV['BUNDLE_PATH'] = File.expand_path(File.join(File.dirname(gemfile), 'vendor/bundle'))
262
+ end
263
+ ENV['FLUENTD_DISABLE_BUNDLER_INJECTION'] = '1'
264
+ load File.expand_path(File.join(File.dirname(__FILE__), 'bundler_injection.rb'))
265
+ end
266
+
267
+ if setup_path = opts[:setup_path]
268
+ require 'fileutils'
269
+ FileUtils.mkdir_p File.join(setup_path, "plugin")
270
+ confpath = File.join(setup_path, "fluent.conf")
271
+ if File.exist?(confpath)
272
+ puts "#{confpath} already exists."
273
+ else
274
+ File.open(confpath, "w") {|f|
275
+ conf = File.read File.join(File.dirname(__FILE__), "..", "..", "..", "fluent.conf")
276
+ f.write conf
277
+ }
278
+ puts "Installed #{confpath}."
279
+ end
280
+ exit 0
281
+ end
282
+
283
+ early_exit = false
284
+ start_service = false
285
+ if winsvcinstmode = opts[:regwinsvc]
286
+ require 'fileutils'
287
+ require "win32/service"
288
+ require "win32/registry"
289
+ include Win32
290
+
291
+ case winsvcinstmode
292
+ when 'i'
293
+ binary_path = File.join(File.dirname(__FILE__), "..")
294
+ ruby_path = ServerEngine.ruby_bin_path
295
+ start_type = Service::DEMAND_START
296
+ if opts[:regwinsvcautostart]
297
+ start_type = Service::AUTO_START
298
+ start_service = true
299
+ end
300
+
301
+
302
+ Service.create(
303
+ service_name: opts[:winsvc_name],
304
+ host: nil,
305
+ service_type: Service::WIN32_OWN_PROCESS,
306
+ description: opts[:winsvc_desc],
307
+ start_type: start_type,
308
+ error_control: Service::ERROR_NORMAL,
309
+ binary_path_name: "\"#{ruby_path}\" -C \"#{binary_path}\" winsvc.rb --service-name #{opts[:winsvc_name]}",
310
+ load_order_group: "",
311
+ dependencies: [""],
312
+ display_name: opts[:winsvc_display_name]
313
+ )
314
+
315
+ if opts[:regwinsvcdelaystart]
316
+ Service.configure(
317
+ service_name: opts[:winsvc_name],
318
+ delayed_start: true
319
+ )
320
+ end
321
+ when 'u'
322
+ if Service.status(opts[:winsvc_name]).current_state != 'stopped'
323
+ begin
324
+ Service.stop(opts[:winsvc_name])
325
+ rescue => ex
326
+ puts "Warning: Failed to stop service: ", ex
327
+ end
328
+ end
329
+ Service.delete(opts[:winsvc_name])
330
+ else
331
+ # none
332
+ end
333
+ early_exit = true
334
+ end
335
+
336
+ if fluentdopt = opts[:fluentdopt]
337
+ Win32::Registry::HKEY_LOCAL_MACHINE.open("SYSTEM\\CurrentControlSet\\Services\\#{opts[:winsvc_name]}", Win32::Registry::KEY_ALL_ACCESS) do |reg|
338
+ reg['fluentdopt', Win32::Registry::REG_SZ] = fluentdopt
339
+ end
340
+ early_exit = true
341
+ end
342
+
343
+ if start_service
344
+ Service.start(opts[:winsvc_name])
345
+ end
346
+
347
+ exit 0 if early_exit
348
+
349
+ if opts[:supervise]
350
+ supervisor = Fluent::Supervisor.new(cmd_opts)
351
+ supervisor.configure(supervisor: true)
352
+ supervisor.run_supervisor(dry_run: opts[:dry_run])
353
+ else
354
+ if opts[:standalone_worker] && opts[:workers] && opts[:workers] > 1
355
+ puts "Error: multi workers is not supported with --no-supervisor"
356
+ exit 2
357
+ end
358
+ worker = Fluent::Supervisor.new(cmd_opts)
359
+ worker.configure
360
+
361
+ if opts[:daemonize] && opts[:standalone_worker]
362
+ require 'fluent/daemonizer'
363
+ args = ARGV.dup
364
+ i = args.index('--daemon')
365
+ args.delete_at(i + 1) # value of --daemon
366
+ args.delete_at(i) # --daemon itself
367
+
368
+ Fluent::Daemonizer.daemonize(opts[:daemonize], args) do
369
+ worker.run_worker
370
+ end
371
+ else
372
+ worker.run_worker
373
+ end
374
+ end