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,269 @@
1
+ #
2
+ # Fluentd
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+ #
16
+
17
+ require 'fluent/config'
18
+ require 'fluent/event'
19
+ require 'fluent/event_router'
20
+ require 'fluent/msgpack_factory'
21
+ require 'fluent/root_agent'
22
+ require 'fluent/time'
23
+ require 'fluent/system_config'
24
+ require 'fluent/plugin'
25
+ require 'fluent/fluent_log_event_router'
26
+ require 'fluent/static_config_analysis'
27
+
28
+ module Fluent
29
+ class EngineClass
30
+ # For compat. remove it in fluentd v2
31
+ include Fluent::MessagePackFactory::Mixin
32
+
33
+ def initialize
34
+ @root_agent = nil
35
+ @engine_stopped = false
36
+ @_worker_id = nil
37
+
38
+ @log_event_verbose = false
39
+ @suppress_config_dump = false
40
+ @without_source = false
41
+
42
+ @fluent_log_event_router = nil
43
+ @system_config = SystemConfig.new
44
+
45
+ @supervisor_mode = false
46
+
47
+ @root_agent_mutex = Mutex.new
48
+ end
49
+
50
+ MAINLOOP_SLEEP_INTERVAL = 0.3
51
+
52
+ attr_reader :root_agent, :system_config, :supervisor_mode
53
+
54
+ def init(system_config, supervisor_mode: false, start_in_parallel: false)
55
+ @system_config = system_config
56
+ @supervisor_mode = supervisor_mode
57
+
58
+ @suppress_config_dump = system_config.suppress_config_dump unless system_config.suppress_config_dump.nil?
59
+ @without_source = system_config.without_source unless system_config.without_source.nil?
60
+
61
+ @log_event_verbose = system_config.log_event_verbose unless system_config.log_event_verbose.nil?
62
+
63
+ @root_agent = RootAgent.new(log: log, system_config: @system_config, start_in_parallel: start_in_parallel)
64
+
65
+ self
66
+ end
67
+
68
+ def log
69
+ $log
70
+ end
71
+
72
+ def parse_config(io, fname, basepath = Dir.pwd, v1_config = false)
73
+ if /\.rb$/.match?(fname)
74
+ require 'fluent/config/dsl'
75
+ Config::DSL::Parser.parse(io, File.join(basepath, fname))
76
+ else
77
+ Config.parse(io, fname, basepath, v1_config)
78
+ end
79
+ end
80
+
81
+ def run_configure(conf, dry_run: false)
82
+ configure(conf)
83
+ conf.check_not_fetched do |key, e|
84
+ parent_name, plugin_name = e.unused_in
85
+ message = if parent_name && plugin_name
86
+ "section <#{e.name}> is not used in <#{parent_name}> of #{plugin_name} plugin"
87
+ elsif parent_name
88
+ "section <#{e.name}> is not used in <#{parent_name}>"
89
+ elsif e.name != 'system' && !(@without_source && e.name == 'source')
90
+ "parameter '#{key}' in #{e.to_s.strip} is not used."
91
+ else
92
+ nil
93
+ end
94
+ next if message.nil?
95
+
96
+ if dry_run && @supervisor_mode
97
+ $log.warn :supervisor, message
98
+ elsif e.for_every_workers?
99
+ $log.warn :worker0, message
100
+ elsif e.for_this_worker?
101
+ $log.warn message
102
+ end
103
+ end
104
+ end
105
+
106
+ def configure(conf)
107
+ @root_agent.configure(conf)
108
+
109
+ @fluent_log_event_router = FluentLogEventRouter.build(@root_agent)
110
+
111
+ if @fluent_log_event_router.emittable?
112
+ $log.enable_event(true)
113
+ end
114
+
115
+ unless @suppress_config_dump
116
+ $log.info :supervisor, "using configuration file: #{conf.to_s.rstrip}"
117
+ end
118
+ end
119
+
120
+ def add_plugin_dir(dir)
121
+ $log.warn('Deprecated method: this method is going to be deleted. Use Fluent::Plugin.add_plugin_dir')
122
+ Plugin.add_plugin_dir(dir)
123
+ end
124
+
125
+ def emit(tag, time, record)
126
+ raise "BUG: use router.emit instead of Engine.emit"
127
+ end
128
+
129
+ def emit_array(tag, array)
130
+ raise "BUG: use router.emit_array instead of Engine.emit_array"
131
+ end
132
+
133
+ def emit_stream(tag, es)
134
+ raise "BUG: use router.emit_stream instead of Engine.emit_stream"
135
+ end
136
+
137
+ def flush!
138
+ @root_agent_mutex.synchronize do
139
+ @root_agent.flush!
140
+ end
141
+ end
142
+
143
+ def cancel_source_only!
144
+ @root_agent_mutex.synchronize do
145
+ @root_agent.cancel_source_only!
146
+ end
147
+ end
148
+
149
+ def now
150
+ # TODO thread update
151
+ Fluent::EventTime.now
152
+ end
153
+
154
+ def run
155
+ begin
156
+ $log.info "starting fluentd worker", pid: Process.pid, ppid: Process.ppid, worker: worker_id
157
+ @root_agent_mutex.synchronize do
158
+ start
159
+ end
160
+
161
+ @fluent_log_event_router.start
162
+
163
+ $log.info "fluentd worker is now running", worker: worker_id
164
+ sleep MAINLOOP_SLEEP_INTERVAL until @engine_stopped
165
+ $log.info "fluentd worker is now stopping", worker: worker_id
166
+
167
+ rescue Exception => e
168
+ $log.error "unexpected error", error: e
169
+ $log.error_backtrace
170
+ raise
171
+ end
172
+
173
+ @root_agent_mutex.synchronize do
174
+ stop_phase(@root_agent)
175
+ end
176
+ end
177
+
178
+ # @param conf [Fluent::Config]
179
+ # @param supervisor [Bool]
180
+ # @return nil
181
+ def reload_config(conf, supervisor: false)
182
+ @root_agent_mutex.synchronize do
183
+ # configure first to reduce down time while restarting
184
+ new_agent = RootAgent.new(log: log, system_config: @system_config)
185
+ ret = Fluent::StaticConfigAnalysis.call(conf, workers: system_config.workers)
186
+
187
+ ret.all_plugins.each do |plugin|
188
+ if plugin.respond_to?(:reloadable_plugin?) && !plugin.reloadable_plugin?
189
+ raise Fluent::ConfigError, "Unreloadable plugin: #{Fluent::Plugin.lookup_type_from_class(plugin.class)}, plugin_id: #{plugin.plugin_id}, class_name: #{plugin.class})"
190
+ end
191
+ end
192
+
193
+ # Assign @root_agent to new root_agent
194
+ # for https://github.com/fluent/fluentd/blob/fcef949ce40472547fde295ddd2cfe297e1eddd6/lib/fluent/plugin_helper/event_emitter.rb#L50
195
+ old_agent, @root_agent = @root_agent, new_agent
196
+ begin
197
+ @root_agent.configure(conf)
198
+ rescue
199
+ @root_agent = old_agent
200
+ raise
201
+ end
202
+
203
+ unless @suppress_config_dump
204
+ $log.info :supervisor, "using configuration file: #{conf.to_s.rstrip}"
205
+ end
206
+
207
+ # supervisor doesn't handle actual data. so the following code is unnecessary.
208
+ if supervisor
209
+ old_agent.shutdown # to close thread created in #configure
210
+ return
211
+ end
212
+
213
+ stop_phase(old_agent)
214
+
215
+ $log.info 'restart fluentd worker', worker: worker_id
216
+ start_phase(new_agent)
217
+ end
218
+ end
219
+
220
+ def stop
221
+ @engine_stopped = true
222
+ nil
223
+ end
224
+
225
+ def push_log_event(tag, time, record)
226
+ @fluent_log_event_router.emit_event([tag, time, record])
227
+ end
228
+
229
+ def worker_id
230
+ if @supervisor_mode
231
+ return -1
232
+ end
233
+
234
+ return @_worker_id if @_worker_id
235
+ # if ENV doesn't have SERVERENGINE_WORKER_ID, it is a worker under --no-supervisor or in tests
236
+ # so it's (almost) a single worker, worker_id=0
237
+ @_worker_id = (ENV['SERVERENGINE_WORKER_ID'] || 0).to_i
238
+ @_worker_id
239
+ end
240
+
241
+ private
242
+
243
+ def stop_phase(root_agent)
244
+ unless @log_event_verbose
245
+ $log.enable_event(false)
246
+ @fluent_log_event_router.graceful_stop
247
+ end
248
+ $log.info 'shutting down fluentd worker', worker: worker_id
249
+ root_agent.shutdown
250
+
251
+ @fluent_log_event_router.stop
252
+ end
253
+
254
+ def start_phase(root_agent)
255
+ @fluent_log_event_router = FluentLogEventRouter.build(root_agent)
256
+ if @fluent_log_event_router.emittable?
257
+ $log.enable_event(true)
258
+ end
259
+
260
+ @root_agent.start
261
+ end
262
+
263
+ def start
264
+ @root_agent.start
265
+ end
266
+ end
267
+
268
+ Engine = EngineClass.new
269
+ end
data/lib/fluent/env.rb ADDED
@@ -0,0 +1,45 @@
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 'securerandom'
18
+
19
+ require 'serverengine/utils'
20
+ require 'fluent/oj_options'
21
+
22
+ module Fluent
23
+ DEFAULT_CONFIG_PATH = ENV['FLUENT_CONF'] || '/etc/fluent/fluent.conf'
24
+ DEFAULT_CONFIG_INCLUDE_DIR = ENV["FLUENT_CONF_INCLUDE_DIR"] || '/etc/fluent/conf.d'
25
+ DEFAULT_PLUGIN_DIR = ENV['FLUENT_PLUGIN'] || '/etc/fluent/plugin'
26
+ DEFAULT_SOCKET_PATH = ENV['FLUENT_SOCKET'] || '/var/run/fluent/fluent.sock'
27
+ DEFAULT_BACKUP_DIR = ENV['FLUENT_BACKUP_DIR'] || '/tmp/fluent'
28
+ DEFAULT_OJ_OPTIONS = Fluent::OjOptions.load_env
29
+ DEFAULT_JSON_PARSE_OPTIONS = { allow_duplicate_key: true, allow_comments: true }.freeze
30
+ DEFAULT_DIR_PERMISSION = 0755
31
+ DEFAULT_FILE_PERMISSION = 0644
32
+ INSTANCE_ID = ENV['FLUENT_INSTANCE_ID'] || SecureRandom.uuid
33
+
34
+ def self.windows?
35
+ ServerEngine.windows?
36
+ end
37
+
38
+ def self.linux?
39
+ RUBY_PLATFORM.include?("linux")
40
+ end
41
+
42
+ def self.macos?
43
+ RUBY_PLATFORM.include?("darwin")
44
+ end
45
+ end
@@ -0,0 +1,37 @@
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
+ class UnrecoverableError < StandardError
19
+ def initialize(error_message = nil)
20
+ @message = error_message || "an unrecoverable error occurs in Fluentd process"
21
+ end
22
+
23
+ def to_s
24
+ @message
25
+ end
26
+ end
27
+
28
+ class InvalidRootDirectory < UnrecoverableError
29
+ end
30
+
31
+ class InvalidLockDirectory < UnrecoverableError
32
+ end
33
+
34
+ # For internal use
35
+ class UncatchableError < Exception
36
+ end
37
+ end
@@ -0,0 +1,369 @@
1
+ #
2
+ # Fluentd
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+ #
16
+
17
+ require 'fluent/msgpack_factory'
18
+ require 'fluent/plugin/compressable'
19
+
20
+ module Fluent
21
+ class EventStream
22
+ include Enumerable
23
+ include Fluent::Plugin::Compressable
24
+
25
+ # dup does deep copy for event stream
26
+ def dup
27
+ raise NotImplementedError, "DO NOT USE THIS CLASS directly."
28
+ end
29
+
30
+ def size
31
+ raise NotImplementedError, "DO NOT USE THIS CLASS directly."
32
+ end
33
+ alias :length :size
34
+
35
+ def empty?
36
+ size == 0
37
+ end
38
+
39
+ # for tests
40
+ def ==(other)
41
+ other.is_a?(EventStream) && self.to_msgpack_stream == other.to_msgpack_stream
42
+ end
43
+
44
+ def repeatable?
45
+ false
46
+ end
47
+
48
+ def slice(index, num)
49
+ raise NotImplementedError, "DO NOT USE THIS CLASS directly."
50
+ end
51
+
52
+ def each(unpacker: nil, &block)
53
+ raise NotImplementedError, "DO NOT USE THIS CLASS directly."
54
+ end
55
+
56
+ def to_msgpack_stream(time_int: false, packer: nil)
57
+ return to_msgpack_stream_forced_integer(packer: packer) if time_int
58
+ out = packer || Fluent::MessagePackFactory.msgpack_packer
59
+ each {|time,record|
60
+ out.write([time,record])
61
+ }
62
+ out.full_pack
63
+ end
64
+
65
+ def to_compressed_msgpack_stream(time_int: false, packer: nil, type: :gzip)
66
+ packed = to_msgpack_stream(time_int: time_int, packer: packer)
67
+ compress(packed, type: type)
68
+ end
69
+
70
+ def to_msgpack_stream_forced_integer(packer: nil)
71
+ out = packer || Fluent::MessagePackFactory.msgpack_packer
72
+ each {|time,record|
73
+ out.write([time.to_i,record])
74
+ }
75
+ out.full_pack
76
+ end
77
+ end
78
+
79
+ class OneEventStream < EventStream
80
+ def initialize(time, record)
81
+ @time = time
82
+ @record = record
83
+ end
84
+
85
+ def dup
86
+ OneEventStream.new(@time, @record.dup)
87
+ end
88
+
89
+ def empty?
90
+ false
91
+ end
92
+
93
+ def size
94
+ 1
95
+ end
96
+
97
+ def repeatable?
98
+ true
99
+ end
100
+
101
+ def slice(index, num)
102
+ if index > 0 || num == 0
103
+ ArrayEventStream.new([])
104
+ else
105
+ self.dup
106
+ end
107
+ end
108
+
109
+ def each(unpacker: nil, &block)
110
+ block.call(@time, @record)
111
+ nil
112
+ end
113
+ end
114
+
115
+ # EventStream from entries: Array of [time, record]
116
+ #
117
+ # Use this class for many events data with a tag
118
+ # and its representation is [ [time, record], [time, record], .. ]
119
+ class ArrayEventStream < EventStream
120
+ def initialize(entries)
121
+ @entries = entries
122
+ end
123
+
124
+ def dup
125
+ entries = @entries.map{ |time, record| [time, record.dup] }
126
+ ArrayEventStream.new(entries)
127
+ end
128
+
129
+ def size
130
+ @entries.size
131
+ end
132
+
133
+ def repeatable?
134
+ true
135
+ end
136
+
137
+ def empty?
138
+ @entries.empty?
139
+ end
140
+
141
+ def slice(index, num)
142
+ ArrayEventStream.new(@entries.slice(index, num))
143
+ end
144
+
145
+ def each(unpacker: nil, &block)
146
+ @entries.each(&block)
147
+ nil
148
+ end
149
+ end
150
+
151
+ # EventStream from entries: numbers of pairs of time and record.
152
+ #
153
+ # This class can handle many events more efficiently than ArrayEventStream
154
+ # because this class generate less objects than ArrayEventStream.
155
+ #
156
+ # Use this class as below, in loop of data-enumeration:
157
+ # 1. initialize blank stream:
158
+ # streams[tag] ||= MultiEventStream.new
159
+ # 2. add events
160
+ # stream[tag].add(time, record)
161
+ class MultiEventStream < EventStream
162
+ def initialize(time_array = [], record_array = [])
163
+ @time_array = time_array
164
+ @record_array = record_array
165
+ end
166
+
167
+ def dup
168
+ MultiEventStream.new(@time_array.dup, @record_array.map(&:dup))
169
+ end
170
+
171
+ def size
172
+ @time_array.size
173
+ end
174
+
175
+ def add(time, record)
176
+ @time_array << time
177
+ @record_array << record
178
+ end
179
+
180
+ def repeatable?
181
+ true
182
+ end
183
+
184
+ def empty?
185
+ @time_array.empty?
186
+ end
187
+
188
+ def slice(index, num)
189
+ MultiEventStream.new(@time_array.slice(index, num), @record_array.slice(index, num))
190
+ end
191
+
192
+ def each(unpacker: nil, &block)
193
+ time_array = @time_array
194
+ record_array = @record_array
195
+ for i in 0..time_array.length-1
196
+ block.call(time_array[i], record_array[i])
197
+ end
198
+ nil
199
+ end
200
+ end
201
+
202
+ class MessagePackEventStream < EventStream
203
+ # https://github.com/msgpack/msgpack-ruby/issues/119
204
+
205
+ # Keep cached_unpacker argument for existing plugins
206
+ def initialize(data, cached_unpacker = nil, size = 0, unpacked_times: nil, unpacked_records: nil)
207
+ @data = data
208
+ @size = size
209
+ @unpacked_times = unpacked_times
210
+ @unpacked_records = unpacked_records
211
+ end
212
+
213
+ def empty?
214
+ @data.empty?
215
+ end
216
+
217
+ def dup
218
+ if @unpacked_times
219
+ self.class.new(@data.dup, nil, @size, unpacked_times: @unpacked_times, unpacked_records: @unpacked_records.map(&:dup))
220
+ else
221
+ self.class.new(@data.dup, nil, @size)
222
+ end
223
+ end
224
+
225
+ def size
226
+ # @size is unbelievable always when @size == 0
227
+ # If the number of events is really zero, unpacking events takes very short time.
228
+ ensure_unpacked! if @size == 0
229
+ @size
230
+ end
231
+
232
+ def repeatable?
233
+ true
234
+ end
235
+
236
+ def ensure_unpacked!(unpacker: nil)
237
+ return if @unpacked_times && @unpacked_records
238
+ @unpacked_times = []
239
+ @unpacked_records = []
240
+ (unpacker || Fluent::MessagePackFactory.msgpack_unpacker).feed_each(@data) do |time, record|
241
+ @unpacked_times << time
242
+ @unpacked_records << record
243
+ end
244
+ # @size should be updated always right after unpack.
245
+ # The real size of unpacked objects are correct, rather than given size.
246
+ @size = @unpacked_times.size
247
+ end
248
+
249
+ # This method returns MultiEventStream, because there are no reason
250
+ # to survey binary serialized by msgpack.
251
+ def slice(index, num)
252
+ ensure_unpacked!
253
+ MultiEventStream.new(@unpacked_times.slice(index, num), @unpacked_records.slice(index, num))
254
+ end
255
+
256
+ def each(unpacker: nil, &block)
257
+ ensure_unpacked!(unpacker: unpacker)
258
+ @unpacked_times.each_with_index do |time, i|
259
+ block.call(time, @unpacked_records[i])
260
+ end
261
+ nil
262
+ end
263
+
264
+ def to_msgpack_stream(time_int: false, packer: nil)
265
+ # time_int is always ignored because @data is always packed binary in this class
266
+ @data
267
+ end
268
+ end
269
+
270
+ class CompressedMessagePackEventStream < MessagePackEventStream
271
+ def initialize(data, cached_unpacker = nil, size = 0, unpacked_times: nil, unpacked_records: nil, compress: :gzip, decompression_size_limit: Fluent::Plugin::Compressable::DEFAULT_DECOMPRESSION_SIZE_LIMIT)
272
+ super(data, cached_unpacker, size, unpacked_times: unpacked_times, unpacked_records: unpacked_records)
273
+ @decompressed_data = nil
274
+ @compressed_data = data
275
+ @type = compress
276
+ @decompression_size_limit = decompression_size_limit
277
+ end
278
+
279
+ def empty?
280
+ ensure_decompressed!
281
+ super
282
+ end
283
+
284
+ def ensure_unpacked!(unpacker: nil)
285
+ ensure_decompressed!
286
+ super
287
+ end
288
+
289
+ def each(unpacker: nil, &block)
290
+ ensure_decompressed!
291
+ super
292
+ end
293
+
294
+ def to_msgpack_stream(time_int: false, packer: nil)
295
+ ensure_decompressed!
296
+ super
297
+ end
298
+
299
+ def to_compressed_msgpack_stream(time_int: false, packer: nil)
300
+ # time_int is always ignored because @data is always packed binary in this class
301
+ @compressed_data
302
+ end
303
+
304
+ private
305
+
306
+ def ensure_decompressed!
307
+ return if @decompressed_data
308
+ @data = @decompressed_data = decompress(@data, type: @type)
309
+ end
310
+ end
311
+
312
+ class MetadataTimeEventStream < EventStream
313
+ def initialize(es)
314
+ @es = es
315
+ end
316
+
317
+ def empty?
318
+ @es.empty?
319
+ end
320
+
321
+ def dup
322
+ self.class.new(@es.dup)
323
+ end
324
+
325
+ def size
326
+ @es.size
327
+ end
328
+
329
+ def repeatable?
330
+ @es.repeatable?
331
+ end
332
+
333
+ def slice(index, num)
334
+ self.class.new(@es.slice(index, num))
335
+ end
336
+
337
+ def each(unpacker: nil, &block)
338
+ @es.each(unpacker: unpacker) do |time, record|
339
+ next if record.nil?
340
+
341
+ time = time[0] if time.is_a?(Array)
342
+ time = Fluent::EventTime.now if time.nil? || time.to_i == 0
343
+ block.call(time, record)
344
+ end
345
+ nil
346
+ end
347
+ end
348
+
349
+ module ChunkMessagePackEventStreamer
350
+ # chunk.extend(ChunkMessagePackEventStreamer)
351
+ # => chunk.each{|time, record| ... }
352
+ def each(unpacker: nil, &block)
353
+ # Note: If need to use `unpacker`, then implement it,
354
+ # e.g., `unpacker.feed_each(io.read, &block)` (Not tested)
355
+ raise NotImplementedError, "'unpacker' argument is not implemented." if unpacker
356
+
357
+ open do |io|
358
+ Fluent::MessagePackFactory.msgpack_unpacker(io).each(&block)
359
+ end
360
+ nil
361
+ end
362
+ alias :msgpack_each :each
363
+
364
+ def to_msgpack_stream(time_int: false, packer: nil)
365
+ # time_int is always ignored because data is already packed and written in chunk
366
+ read
367
+ end
368
+ end
369
+ end