fluentd 1.20.0-aarch64-mingw-ucrt

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 (341) hide show
  1. checksums.yaml +7 -0
  2. data/.rubocop.yml +116 -0
  3. data/ADOPTERS.md +5 -0
  4. data/AGENTS.md +46 -0
  5. data/AUTHORS +2 -0
  6. data/CHANGELOG.md +3324 -0
  7. data/CONTRIBUTING.md +45 -0
  8. data/GOVERNANCE.md +55 -0
  9. data/GithubWorkflow.md +78 -0
  10. data/LICENSE +202 -0
  11. data/MAINTAINERS.md +19 -0
  12. data/README.md +73 -0
  13. data/Rakefile +89 -0
  14. data/SECURITY.md +47 -0
  15. data/bin/fluent-binlog-reader +7 -0
  16. data/bin/fluent-ca-generate +6 -0
  17. data/bin/fluent-cap-ctl +7 -0
  18. data/bin/fluent-cat +5 -0
  19. data/bin/fluent-ctl +7 -0
  20. data/bin/fluent-debug +5 -0
  21. data/bin/fluent-gem +9 -0
  22. data/bin/fluent-plugin-config-format +5 -0
  23. data/bin/fluent-plugin-generate +5 -0
  24. data/bin/fluentd +15 -0
  25. data/code-of-conduct.md +3 -0
  26. data/docs/SECURITY_AUDIT.pdf +0 -0
  27. data/example/copy_roundrobin.conf +39 -0
  28. data/example/counter.conf +18 -0
  29. data/example/filter_stdout.conf +22 -0
  30. data/example/in_forward.conf +14 -0
  31. data/example/in_forward_client.conf +37 -0
  32. data/example/in_forward_shared_key.conf +15 -0
  33. data/example/in_forward_tls.conf +14 -0
  34. data/example/in_forward_users.conf +24 -0
  35. data/example/in_forward_workers.conf +21 -0
  36. data/example/in_http.conf +16 -0
  37. data/example/in_out_forward.conf +17 -0
  38. data/example/in_sample_blocks.conf +17 -0
  39. data/example/in_sample_with_compression.conf +23 -0
  40. data/example/in_syslog.conf +15 -0
  41. data/example/in_tail.conf +14 -0
  42. data/example/in_tcp.conf +13 -0
  43. data/example/in_udp.conf +13 -0
  44. data/example/logevents.conf +25 -0
  45. data/example/multi_filters.conf +61 -0
  46. data/example/out_copy.conf +20 -0
  47. data/example/out_exec_filter.conf +42 -0
  48. data/example/out_file.conf +13 -0
  49. data/example/out_forward.conf +35 -0
  50. data/example/out_forward_buf_file.conf +23 -0
  51. data/example/out_forward_client.conf +109 -0
  52. data/example/out_forward_heartbeat_none.conf +16 -0
  53. data/example/out_forward_sd.conf +17 -0
  54. data/example/out_forward_shared_key.conf +36 -0
  55. data/example/out_forward_tls.conf +18 -0
  56. data/example/out_forward_users.conf +65 -0
  57. data/example/out_null.conf +36 -0
  58. data/example/sd.yaml +8 -0
  59. data/example/secondary_file.conf +42 -0
  60. data/example/suppress_config_dump.conf +7 -0
  61. data/example/v0_12_filter.conf +78 -0
  62. data/example/v1_literal_example.conf +36 -0
  63. data/example/worker_section.conf +36 -0
  64. data/fluent.conf +139 -0
  65. data/lib/fluent/agent.rb +168 -0
  66. data/lib/fluent/capability.rb +87 -0
  67. data/lib/fluent/clock.rb +66 -0
  68. data/lib/fluent/command/binlog_reader.rb +244 -0
  69. data/lib/fluent/command/bundler_injection.rb +45 -0
  70. data/lib/fluent/command/ca_generate.rb +184 -0
  71. data/lib/fluent/command/cap_ctl.rb +174 -0
  72. data/lib/fluent/command/cat.rb +365 -0
  73. data/lib/fluent/command/ctl.rb +180 -0
  74. data/lib/fluent/command/debug.rb +103 -0
  75. data/lib/fluent/command/fluentd.rb +385 -0
  76. data/lib/fluent/command/plugin_config_formatter.rb +308 -0
  77. data/lib/fluent/command/plugin_generator.rb +365 -0
  78. data/lib/fluent/compat/call_super_mixin.rb +76 -0
  79. data/lib/fluent/compat/detach_process_mixin.rb +33 -0
  80. data/lib/fluent/compat/exec_util.rb +144 -0
  81. data/lib/fluent/compat/file_util.rb +54 -0
  82. data/lib/fluent/compat/filter.rb +68 -0
  83. data/lib/fluent/compat/formatter.rb +117 -0
  84. data/lib/fluent/compat/formatter_utils.rb +85 -0
  85. data/lib/fluent/compat/handle_tag_and_time_mixin.rb +62 -0
  86. data/lib/fluent/compat/handle_tag_name_mixin.rb +53 -0
  87. data/lib/fluent/compat/input.rb +49 -0
  88. data/lib/fluent/compat/output.rb +721 -0
  89. data/lib/fluent/compat/output_chain.rb +60 -0
  90. data/lib/fluent/compat/parser.rb +310 -0
  91. data/lib/fluent/compat/parser_utils.rb +40 -0
  92. data/lib/fluent/compat/propagate_default.rb +62 -0
  93. data/lib/fluent/compat/record_filter_mixin.rb +34 -0
  94. data/lib/fluent/compat/set_tag_key_mixin.rb +50 -0
  95. data/lib/fluent/compat/set_time_key_mixin.rb +69 -0
  96. data/lib/fluent/compat/socket_util.rb +165 -0
  97. data/lib/fluent/compat/string_util.rb +34 -0
  98. data/lib/fluent/compat/structured_format_mixin.rb +26 -0
  99. data/lib/fluent/compat/type_converter.rb +90 -0
  100. data/lib/fluent/config/basic_parser.rb +122 -0
  101. data/lib/fluent/config/configure_proxy.rb +424 -0
  102. data/lib/fluent/config/dsl.rb +152 -0
  103. data/lib/fluent/config/element.rb +265 -0
  104. data/lib/fluent/config/error.rb +44 -0
  105. data/lib/fluent/config/literal_parser.rb +305 -0
  106. data/lib/fluent/config/parser.rb +119 -0
  107. data/lib/fluent/config/section.rb +272 -0
  108. data/lib/fluent/config/types.rb +257 -0
  109. data/lib/fluent/config/v1_parser.rb +200 -0
  110. data/lib/fluent/config/yaml_parser/fluent_value.rb +47 -0
  111. data/lib/fluent/config/yaml_parser/loader.rb +124 -0
  112. data/lib/fluent/config/yaml_parser/parser.rb +179 -0
  113. data/lib/fluent/config/yaml_parser/section_builder.rb +107 -0
  114. data/lib/fluent/config/yaml_parser.rb +56 -0
  115. data/lib/fluent/config.rb +89 -0
  116. data/lib/fluent/configurable.rb +202 -0
  117. data/lib/fluent/counter/base_socket.rb +44 -0
  118. data/lib/fluent/counter/client.rb +297 -0
  119. data/lib/fluent/counter/error.rb +86 -0
  120. data/lib/fluent/counter/mutex_hash.rb +163 -0
  121. data/lib/fluent/counter/server.rb +273 -0
  122. data/lib/fluent/counter/store.rb +205 -0
  123. data/lib/fluent/counter/validator.rb +145 -0
  124. data/lib/fluent/counter.rb +23 -0
  125. data/lib/fluent/daemon.rb +14 -0
  126. data/lib/fluent/daemonizer.rb +88 -0
  127. data/lib/fluent/engine.rb +269 -0
  128. data/lib/fluent/env.rb +45 -0
  129. data/lib/fluent/error.rb +37 -0
  130. data/lib/fluent/event.rb +369 -0
  131. data/lib/fluent/event_router.rb +315 -0
  132. data/lib/fluent/ext_monitor_require.rb +28 -0
  133. data/lib/fluent/file_wrapper.rb +137 -0
  134. data/lib/fluent/filter.rb +21 -0
  135. data/lib/fluent/fluent_log_event_router.rb +139 -0
  136. data/lib/fluent/formatter.rb +23 -0
  137. data/lib/fluent/input.rb +21 -0
  138. data/lib/fluent/label.rb +46 -0
  139. data/lib/fluent/load.rb +33 -0
  140. data/lib/fluent/log/console_adapter.rb +66 -0
  141. data/lib/fluent/log.rb +775 -0
  142. data/lib/fluent/match.rb +187 -0
  143. data/lib/fluent/mixin.rb +31 -0
  144. data/lib/fluent/msgpack_factory.rb +111 -0
  145. data/lib/fluent/oj_options.rb +61 -0
  146. data/lib/fluent/output.rb +29 -0
  147. data/lib/fluent/output_chain.rb +23 -0
  148. data/lib/fluent/parser.rb +23 -0
  149. data/lib/fluent/plugin/bare_output.rb +88 -0
  150. data/lib/fluent/plugin/base.rb +219 -0
  151. data/lib/fluent/plugin/buf_file.rb +256 -0
  152. data/lib/fluent/plugin/buf_file_single.rb +272 -0
  153. data/lib/fluent/plugin/buf_memory.rb +34 -0
  154. data/lib/fluent/plugin/buffer/chunk.rb +313 -0
  155. data/lib/fluent/plugin/buffer/file_chunk.rb +432 -0
  156. data/lib/fluent/plugin/buffer/file_single_chunk.rb +325 -0
  157. data/lib/fluent/plugin/buffer/memory_chunk.rb +91 -0
  158. data/lib/fluent/plugin/buffer.rb +1063 -0
  159. data/lib/fluent/plugin/compressable.rb +87 -0
  160. data/lib/fluent/plugin/exec_util.rb +22 -0
  161. data/lib/fluent/plugin/extractor.rb +132 -0
  162. data/lib/fluent/plugin/file_util.rb +22 -0
  163. data/lib/fluent/plugin/filter.rb +119 -0
  164. data/lib/fluent/plugin/filter_grep.rb +189 -0
  165. data/lib/fluent/plugin/filter_parser.rb +124 -0
  166. data/lib/fluent/plugin/filter_record_transformer.rb +325 -0
  167. data/lib/fluent/plugin/filter_stdout.rb +53 -0
  168. data/lib/fluent/plugin/formatter.rb +75 -0
  169. data/lib/fluent/plugin/formatter_csv.rb +92 -0
  170. data/lib/fluent/plugin/formatter_hash.rb +35 -0
  171. data/lib/fluent/plugin/formatter_json.rb +62 -0
  172. data/lib/fluent/plugin/formatter_ltsv.rb +44 -0
  173. data/lib/fluent/plugin/formatter_msgpack.rb +33 -0
  174. data/lib/fluent/plugin/formatter_out_file.rb +55 -0
  175. data/lib/fluent/plugin/formatter_single_value.rb +36 -0
  176. data/lib/fluent/plugin/formatter_stdout.rb +76 -0
  177. data/lib/fluent/plugin/formatter_tsv.rb +40 -0
  178. data/lib/fluent/plugin/in_debug_agent.rb +71 -0
  179. data/lib/fluent/plugin/in_dummy.rb +18 -0
  180. data/lib/fluent/plugin/in_exec.rb +124 -0
  181. data/lib/fluent/plugin/in_forward.rb +489 -0
  182. data/lib/fluent/plugin/in_gc_stat.rb +72 -0
  183. data/lib/fluent/plugin/in_http.rb +737 -0
  184. data/lib/fluent/plugin/in_monitor_agent.rb +406 -0
  185. data/lib/fluent/plugin/in_object_space.rb +93 -0
  186. data/lib/fluent/plugin/in_sample.rb +148 -0
  187. data/lib/fluent/plugin/in_syslog.rb +346 -0
  188. data/lib/fluent/plugin/in_tail/compatibility.rb +111 -0
  189. data/lib/fluent/plugin/in_tail/dir_watcher.rb +713 -0
  190. data/lib/fluent/plugin/in_tail/group_watch.rb +204 -0
  191. data/lib/fluent/plugin/in_tail/io_handler.rb +391 -0
  192. data/lib/fluent/plugin/in_tail/line_feeder.rb +230 -0
  193. data/lib/fluent/plugin/in_tail/position_file.rb +269 -0
  194. data/lib/fluent/plugin/in_tail/stat_watcher.rb +52 -0
  195. data/lib/fluent/plugin/in_tail/tail_watcher.rb +276 -0
  196. data/lib/fluent/plugin/in_tail/worker_pool.rb +298 -0
  197. data/lib/fluent/plugin/in_tail.rb +917 -0
  198. data/lib/fluent/plugin/in_tcp.rb +230 -0
  199. data/lib/fluent/plugin/in_udp.rb +101 -0
  200. data/lib/fluent/plugin/in_unix.rb +197 -0
  201. data/lib/fluent/plugin/input.rb +71 -0
  202. data/lib/fluent/plugin/metrics.rb +119 -0
  203. data/lib/fluent/plugin/metrics_local.rb +96 -0
  204. data/lib/fluent/plugin/multi_output.rb +179 -0
  205. data/lib/fluent/plugin/out_buffer.rb +40 -0
  206. data/lib/fluent/plugin/out_copy.rb +120 -0
  207. data/lib/fluent/plugin/out_exec.rb +105 -0
  208. data/lib/fluent/plugin/out_exec_filter.rb +319 -0
  209. data/lib/fluent/plugin/out_file.rb +371 -0
  210. data/lib/fluent/plugin/out_forward/ack_handler.rb +176 -0
  211. data/lib/fluent/plugin/out_forward/connection_manager.rb +131 -0
  212. data/lib/fluent/plugin/out_forward/error.rb +28 -0
  213. data/lib/fluent/plugin/out_forward/failure_detector.rb +84 -0
  214. data/lib/fluent/plugin/out_forward/handshake_protocol.rb +125 -0
  215. data/lib/fluent/plugin/out_forward/load_balancer.rb +114 -0
  216. data/lib/fluent/plugin/out_forward/socket_cache.rb +177 -0
  217. data/lib/fluent/plugin/out_forward.rb +865 -0
  218. data/lib/fluent/plugin/out_http.rb +419 -0
  219. data/lib/fluent/plugin/out_null.rb +74 -0
  220. data/lib/fluent/plugin/out_relabel.rb +32 -0
  221. data/lib/fluent/plugin/out_roundrobin.rb +84 -0
  222. data/lib/fluent/plugin/out_secondary_file.rb +148 -0
  223. data/lib/fluent/plugin/out_stdout.rb +81 -0
  224. data/lib/fluent/plugin/out_stream.rb +130 -0
  225. data/lib/fluent/plugin/output.rb +1688 -0
  226. data/lib/fluent/plugin/owned_by_mixin.rb +41 -0
  227. data/lib/fluent/plugin/parser.rb +274 -0
  228. data/lib/fluent/plugin/parser_apache.rb +28 -0
  229. data/lib/fluent/plugin/parser_apache2.rb +88 -0
  230. data/lib/fluent/plugin/parser_apache_error.rb +26 -0
  231. data/lib/fluent/plugin/parser_csv.rb +124 -0
  232. data/lib/fluent/plugin/parser_json.rb +118 -0
  233. data/lib/fluent/plugin/parser_ltsv.rb +49 -0
  234. data/lib/fluent/plugin/parser_msgpack.rb +72 -0
  235. data/lib/fluent/plugin/parser_multiline.rb +152 -0
  236. data/lib/fluent/plugin/parser_nginx.rb +28 -0
  237. data/lib/fluent/plugin/parser_none.rb +36 -0
  238. data/lib/fluent/plugin/parser_regexp.rb +68 -0
  239. data/lib/fluent/plugin/parser_syslog.rb +543 -0
  240. data/lib/fluent/plugin/parser_tsv.rb +47 -0
  241. data/lib/fluent/plugin/sd_file.rb +157 -0
  242. data/lib/fluent/plugin/sd_srv.rb +135 -0
  243. data/lib/fluent/plugin/sd_static.rb +58 -0
  244. data/lib/fluent/plugin/service_discovery.rb +65 -0
  245. data/lib/fluent/plugin/socket_util.rb +22 -0
  246. data/lib/fluent/plugin/storage.rb +84 -0
  247. data/lib/fluent/plugin/storage_local.rb +166 -0
  248. data/lib/fluent/plugin/string_util.rb +22 -0
  249. data/lib/fluent/plugin.rb +206 -0
  250. data/lib/fluent/plugin_helper/cert_option.rb +199 -0
  251. data/lib/fluent/plugin_helper/child_process.rb +369 -0
  252. data/lib/fluent/plugin_helper/compat_parameters.rb +343 -0
  253. data/lib/fluent/plugin_helper/counter.rb +51 -0
  254. data/lib/fluent/plugin_helper/event_emitter.rb +112 -0
  255. data/lib/fluent/plugin_helper/event_loop.rb +170 -0
  256. data/lib/fluent/plugin_helper/extract.rb +104 -0
  257. data/lib/fluent/plugin_helper/formatter.rb +147 -0
  258. data/lib/fluent/plugin_helper/http_server/app.rb +81 -0
  259. data/lib/fluent/plugin_helper/http_server/methods.rb +35 -0
  260. data/lib/fluent/plugin_helper/http_server/request.rb +53 -0
  261. data/lib/fluent/plugin_helper/http_server/router.rb +54 -0
  262. data/lib/fluent/plugin_helper/http_server/server.rb +116 -0
  263. data/lib/fluent/plugin_helper/http_server/ssl_context_builder.rb +41 -0
  264. data/lib/fluent/plugin_helper/http_server.rb +129 -0
  265. data/lib/fluent/plugin_helper/inject.rb +154 -0
  266. data/lib/fluent/plugin_helper/metrics.rb +136 -0
  267. data/lib/fluent/plugin_helper/parser.rb +147 -0
  268. data/lib/fluent/plugin_helper/record_accessor.rb +207 -0
  269. data/lib/fluent/plugin_helper/retry_state.rb +219 -0
  270. data/lib/fluent/plugin_helper/server.rb +840 -0
  271. data/lib/fluent/plugin_helper/service_discovery/manager.rb +146 -0
  272. data/lib/fluent/plugin_helper/service_discovery/round_robin_balancer.rb +43 -0
  273. data/lib/fluent/plugin_helper/service_discovery.rb +125 -0
  274. data/lib/fluent/plugin_helper/socket.rb +288 -0
  275. data/lib/fluent/plugin_helper/socket_option.rb +98 -0
  276. data/lib/fluent/plugin_helper/storage.rb +349 -0
  277. data/lib/fluent/plugin_helper/thread.rb +180 -0
  278. data/lib/fluent/plugin_helper/timer.rb +92 -0
  279. data/lib/fluent/plugin_helper.rb +75 -0
  280. data/lib/fluent/plugin_id.rb +93 -0
  281. data/lib/fluent/process.rb +22 -0
  282. data/lib/fluent/registry.rb +117 -0
  283. data/lib/fluent/root_agent.rb +468 -0
  284. data/lib/fluent/rpc.rb +95 -0
  285. data/lib/fluent/source_only_buffer_agent.rb +102 -0
  286. data/lib/fluent/static_config_analysis.rb +195 -0
  287. data/lib/fluent/supervisor.rb +1347 -0
  288. data/lib/fluent/system_config.rb +213 -0
  289. data/lib/fluent/test/base.rb +83 -0
  290. data/lib/fluent/test/driver/base.rb +231 -0
  291. data/lib/fluent/test/driver/base_owned.rb +83 -0
  292. data/lib/fluent/test/driver/base_owner.rb +135 -0
  293. data/lib/fluent/test/driver/event_feeder.rb +98 -0
  294. data/lib/fluent/test/driver/filter.rb +61 -0
  295. data/lib/fluent/test/driver/formatter.rb +30 -0
  296. data/lib/fluent/test/driver/input.rb +31 -0
  297. data/lib/fluent/test/driver/multi_output.rb +53 -0
  298. data/lib/fluent/test/driver/output.rb +102 -0
  299. data/lib/fluent/test/driver/parser.rb +30 -0
  300. data/lib/fluent/test/driver/storage.rb +30 -0
  301. data/lib/fluent/test/driver/test_event_router.rb +45 -0
  302. data/lib/fluent/test/filter_test.rb +77 -0
  303. data/lib/fluent/test/formatter_test.rb +65 -0
  304. data/lib/fluent/test/helpers.rb +138 -0
  305. data/lib/fluent/test/input_test.rb +174 -0
  306. data/lib/fluent/test/log.rb +79 -0
  307. data/lib/fluent/test/output_test.rb +156 -0
  308. data/lib/fluent/test/parser_test.rb +70 -0
  309. data/lib/fluent/test/startup_shutdown.rb +44 -0
  310. data/lib/fluent/test.rb +61 -0
  311. data/lib/fluent/time.rb +513 -0
  312. data/lib/fluent/timezone.rb +171 -0
  313. data/lib/fluent/tls.rb +105 -0
  314. data/lib/fluent/unique_id.rb +39 -0
  315. data/lib/fluent/variable_store.rb +40 -0
  316. data/lib/fluent/version.rb +21 -0
  317. data/lib/fluent/win32api.rb +38 -0
  318. data/lib/fluent/winsvc.rb +130 -0
  319. data/templates/new_gem/.gitignore +8 -0
  320. data/templates/new_gem/Gemfile +3 -0
  321. data/templates/new_gem/README.md.erb +43 -0
  322. data/templates/new_gem/Rakefile +13 -0
  323. data/templates/new_gem/fluent-plugin.gemspec.erb +28 -0
  324. data/templates/new_gem/lib/fluent/plugin/filter.rb.erb +14 -0
  325. data/templates/new_gem/lib/fluent/plugin/formatter.rb.erb +14 -0
  326. data/templates/new_gem/lib/fluent/plugin/input.rb.erb +11 -0
  327. data/templates/new_gem/lib/fluent/plugin/output.rb.erb +11 -0
  328. data/templates/new_gem/lib/fluent/plugin/parser.rb.erb +15 -0
  329. data/templates/new_gem/lib/fluent/plugin/storage.rb.erb +40 -0
  330. data/templates/new_gem/test/helper.rb.erb +7 -0
  331. data/templates/new_gem/test/plugin/test_filter.rb.erb +18 -0
  332. data/templates/new_gem/test/plugin/test_formatter.rb.erb +18 -0
  333. data/templates/new_gem/test/plugin/test_input.rb.erb +18 -0
  334. data/templates/new_gem/test/plugin/test_output.rb.erb +18 -0
  335. data/templates/new_gem/test/plugin/test_parser.rb.erb +18 -0
  336. data/templates/new_gem/test/plugin/test_storage.rb.erb +18 -0
  337. data/templates/plugin_config_formatter/param.md-compact.erb +25 -0
  338. data/templates/plugin_config_formatter/param.md-table.erb +10 -0
  339. data/templates/plugin_config_formatter/param.md.erb +34 -0
  340. data/templates/plugin_config_formatter/section.md.erb +12 -0
  341. metadata +996 -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,385 @@
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] ||= default_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
+ unless Fluent.windows?
131
+ op.on('--with-source-only', "Invoke a fluentd only with input plugins. The data is stored in a temporary buffer. Send SIGWINCH to cancel this mode and process the data (Not supported on Windows).", TrueClass) {|b|
132
+ cmd_opts[:with_source_only] = b
133
+ }
134
+ end
135
+
136
+ op.on('--config-file-type VALUE', 'guessing file type of fluentd configuration. yaml/yml or guess') { |s|
137
+ if (s == 'yaml') || (s == 'yml')
138
+ cmd_opts[:config_file_type] = s.to_sym
139
+ elsif (s == 'guess')
140
+ cmd_opts[:config_file_type] = s.to_sym
141
+ else
142
+ usage '--config-file-type accepts yaml/yml or guess'
143
+ end
144
+ }
145
+
146
+ op.on('--use-v1-config', "Use v1 configuration format (default)", TrueClass) {|b|
147
+ cmd_opts[:use_v1_config] = b
148
+ }
149
+
150
+ op.on('--use-v0-config', "Use v0 configuration format", TrueClass) {|b|
151
+ cmd_opts[:use_v1_config] = !b
152
+ }
153
+
154
+ op.on('--strict-config-value', "Parse config values strictly", TrueClass) {|b|
155
+ cmd_opts[:strict_config_value] = b
156
+ }
157
+
158
+ op.on('--enable-input-metrics', "[DEPRECATED] Enable input plugin metrics on fluentd", TrueClass) {|b|
159
+ cmd_opts[:enable_input_metrics] = b
160
+ }
161
+
162
+ op.on('--disable-input-metrics', "Disable input plugin metrics on fluentd", FalseClass) {|b|
163
+ cmd_opts[:enable_input_metrics] = b
164
+ }
165
+
166
+ op.on('--enable-size-metrics', "Enable plugin record size metrics on fluentd", TrueClass) {|b|
167
+ cmd_opts[:enable_size_metrics] = b
168
+ }
169
+
170
+ op.on('-v', '--verbose', "increase verbose level (-v: debug, -vv: trace)", TrueClass) {|b|
171
+ return unless b
172
+ cur_level = cmd_opts.fetch(:log_level, default_opts[:log_level])
173
+ cmd_opts[:log_level] = [cur_level - 1, Fluent::Log::LEVEL_TRACE].max
174
+ }
175
+
176
+ op.on('-q', '--quiet', "decrease verbose level (-q: warn, -qq: error)", TrueClass) {|b|
177
+ return unless b
178
+ cur_level = cmd_opts.fetch(:log_level, default_opts[:log_level])
179
+ cmd_opts[:log_level] = [cur_level + 1, Fluent::Log::LEVEL_ERROR].min
180
+ }
181
+
182
+ op.on('--suppress-config-dump', "suppress config dumping when fluentd starts", TrueClass) {|b|
183
+ cmd_opts[:suppress_config_dump] = b
184
+ }
185
+
186
+ op.on('-g', '--gemfile GEMFILE', "Gemfile path") {|s|
187
+ cmd_opts[:gemfile] = s
188
+ }
189
+
190
+ op.on('-G', '--gem-path GEM_INSTALL_PATH', "Gemfile install path (default: $(dirname $gemfile)/vendor/bundle)") {|s|
191
+ cmd_opts[:gem_install_path] = s
192
+ }
193
+
194
+ op.on('--conf-encoding ENCODING', "specify configuration file encoding") { |s|
195
+ cmd_opts[:conf_encoding] = s
196
+ }
197
+
198
+ op.on('--disable-shared-socket', "Don't open shared socket for multiple workers") { |b|
199
+ cmd_opts[:disable_shared_socket] = b
200
+ }
201
+
202
+ if Fluent.windows?
203
+ cmd_opts.merge!(
204
+ :winsvc_name => 'fluentdwinsvc',
205
+ :winsvc_display_name => 'Fluentd Windows Service',
206
+ :winsvc_desc => 'Fluentd is an event collector system.',
207
+ )
208
+
209
+ op.on('-x', '--signame INTSIGNAME', "an object name which is used for Windows Service signal (Windows only)") {|s|
210
+ cmd_opts[:signame] = s
211
+ }
212
+
213
+ op.on('--reg-winsvc MODE', "install/uninstall as Windows Service. (i: install, u: uninstall) (Windows only)") {|s|
214
+ cmd_opts[:regwinsvc] = s
215
+ }
216
+
217
+ op.on('--[no-]reg-winsvc-auto-start', "Automatically start the Windows Service at boot. (only effective with '--reg-winsvc i') (Windows only)") {|s|
218
+ cmd_opts[:regwinsvcautostart] = s
219
+ }
220
+
221
+ 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|
222
+ cmd_opts[:regwinsvcdelaystart] = s
223
+ }
224
+
225
+ op.on('--reg-winsvc-fluentdopt OPTION', "specify fluentd option parameters for Windows Service. (Windows only)") {|s|
226
+ cmd_opts[:fluentdopt] = s
227
+ }
228
+
229
+ op.on('--winsvc-name NAME', "The Windows Service name to run as (Windows only)") {|s|
230
+ cmd_opts[:winsvc_name] = s
231
+ }
232
+
233
+ op.on('--winsvc-display-name DISPLAY_NAME', "The Windows Service display name (Windows only)") {|s|
234
+ cmd_opts[:winsvc_display_name] = s
235
+ }
236
+
237
+ op.on('--winsvc-desc DESC', "The Windows Service description (Windows only)") {|s|
238
+ cmd_opts[:winsvc_desc] = s
239
+ }
240
+ end
241
+
242
+
243
+ singleton_class.module_eval do
244
+ define_method(:usage) do |msg|
245
+ puts op.to_s
246
+ puts "error: #{msg}" if msg
247
+ exit 1
248
+ end
249
+ end
250
+
251
+ begin
252
+ rest = op.parse(ARGV)
253
+
254
+ if rest.length != 0
255
+ usage nil
256
+ end
257
+ rescue
258
+ usage $!.to_s
259
+ end
260
+
261
+ opts = default_opts.merge(cmd_opts)
262
+
263
+ ##
264
+ ## Bundler injection
265
+ #
266
+ if ENV['FLUENTD_DISABLE_BUNDLER_INJECTION'] != '1' && gemfile = opts[:gemfile]
267
+ ENV['BUNDLE_GEMFILE'] = gemfile
268
+ if path = opts[:gem_install_path]
269
+ ENV['BUNDLE_PATH'] = path
270
+ else
271
+ ENV['BUNDLE_PATH'] = File.expand_path(File.join(File.dirname(gemfile), 'vendor/bundle'))
272
+ end
273
+ ENV['FLUENTD_DISABLE_BUNDLER_INJECTION'] = '1'
274
+ load File.expand_path(File.join(File.dirname(__FILE__), 'bundler_injection.rb'))
275
+ end
276
+
277
+ if setup_path = opts[:setup_path]
278
+ require 'fileutils'
279
+ FileUtils.mkdir_p File.join(setup_path, "plugin")
280
+ confpath = File.join(setup_path, "fluent.conf")
281
+ if File.exist?(confpath)
282
+ puts "#{confpath} already exists."
283
+ else
284
+ File.open(confpath, "w") {|f|
285
+ conf = File.read File.join(File.dirname(__FILE__), "..", "..", "..", "fluent.conf")
286
+ f.write conf
287
+ }
288
+ puts "Installed #{confpath}."
289
+ end
290
+ exit 0
291
+ end
292
+
293
+ early_exit = false
294
+ start_service = false
295
+ if winsvcinstmode = opts[:regwinsvc]
296
+ require 'fileutils'
297
+ require "win32/service"
298
+ require "win32/registry"
299
+ include Win32
300
+
301
+ case winsvcinstmode
302
+ when 'i'
303
+ binary_path = File.join(File.dirname(__FILE__), "..")
304
+ ruby_path = ServerEngine.ruby_bin_path
305
+ start_type = Service::DEMAND_START
306
+ if opts[:regwinsvcautostart]
307
+ start_type = Service::AUTO_START
308
+ start_service = true
309
+ end
310
+
311
+
312
+ Service.create(
313
+ service_name: opts[:winsvc_name],
314
+ host: nil,
315
+ service_type: Service::WIN32_OWN_PROCESS,
316
+ description: opts[:winsvc_desc],
317
+ start_type: start_type,
318
+ error_control: Service::ERROR_NORMAL,
319
+ binary_path_name: "\"#{ruby_path}\" -C \"#{binary_path}\" winsvc.rb --service-name #{opts[:winsvc_name]}",
320
+ load_order_group: "",
321
+ dependencies: [""],
322
+ display_name: opts[:winsvc_display_name]
323
+ )
324
+
325
+ if opts[:regwinsvcdelaystart]
326
+ Service.configure(
327
+ service_name: opts[:winsvc_name],
328
+ delayed_start: true
329
+ )
330
+ end
331
+ when 'u'
332
+ if Service.status(opts[:winsvc_name]).current_state != 'stopped'
333
+ begin
334
+ Service.stop(opts[:winsvc_name])
335
+ rescue => ex
336
+ puts "Warning: Failed to stop service: ", ex
337
+ end
338
+ end
339
+ Service.delete(opts[:winsvc_name])
340
+ else
341
+ # none
342
+ end
343
+ early_exit = true
344
+ end
345
+
346
+ if fluentdopt = opts[:fluentdopt]
347
+ require "win32/registry"
348
+ Win32::Registry::HKEY_LOCAL_MACHINE.open("SYSTEM\\CurrentControlSet\\Services\\#{opts[:winsvc_name]}", Win32::Registry::KEY_ALL_ACCESS) do |reg|
349
+ reg['fluentdopt', Win32::Registry::REG_SZ] = fluentdopt
350
+ end
351
+ early_exit = true
352
+ end
353
+
354
+ if start_service
355
+ Service.start(opts[:winsvc_name])
356
+ end
357
+
358
+ exit 0 if early_exit
359
+
360
+ if opts[:supervise]
361
+ supervisor = Fluent::Supervisor.new(cmd_opts)
362
+ supervisor.configure(supervisor: true)
363
+ supervisor.run_supervisor(dry_run: opts[:dry_run])
364
+ else
365
+ if opts[:standalone_worker] && opts[:workers] && opts[:workers] > 1
366
+ puts "Error: multi workers is not supported with --no-supervisor"
367
+ exit 2
368
+ end
369
+ worker = Fluent::Supervisor.new(cmd_opts)
370
+ worker.configure
371
+
372
+ if opts[:daemonize] && opts[:standalone_worker]
373
+ require 'fluent/daemonizer'
374
+ args = ARGV.dup
375
+ i = args.index('--daemon')
376
+ args.delete_at(i + 1) # value of --daemon
377
+ args.delete_at(i) # --daemon itself
378
+
379
+ Fluent::Daemonizer.daemonize(opts[:daemonize], args) do
380
+ worker.run_worker
381
+ end
382
+ else
383
+ worker.run_worker
384
+ end
385
+ end