fluentd 1.10.3 → 1.11.3

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.

Potentially problematic release.


This version of fluentd might be problematic. Click here for more details.

Files changed (71) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +102 -0
  3. data/CONTRIBUTING.md +1 -1
  4. data/example/copy_roundrobin.conf +3 -3
  5. data/example/counter.conf +1 -1
  6. data/example/filter_stdout.conf +2 -2
  7. data/example/{in_dummy_blocks.conf → in_sample_blocks.conf} +4 -4
  8. data/example/{in_dummy_with_compression.conf → in_sample_with_compression.conf} +3 -3
  9. data/example/logevents.conf +5 -5
  10. data/example/multi_filters.conf +1 -1
  11. data/example/out_exec_filter.conf +2 -2
  12. data/example/out_forward.conf +1 -1
  13. data/example/out_forward_buf_file.conf +1 -1
  14. data/example/out_forward_client.conf +5 -5
  15. data/example/out_forward_heartbeat_none.conf +1 -1
  16. data/example/out_forward_sd.conf +1 -1
  17. data/example/out_forward_shared_key.conf +2 -2
  18. data/example/out_forward_tls.conf +1 -1
  19. data/example/out_forward_users.conf +3 -3
  20. data/example/out_null.conf +4 -4
  21. data/example/secondary_file.conf +1 -1
  22. data/fluentd.gemspec +5 -5
  23. data/lib/fluent/command/fluentd.rb +11 -0
  24. data/lib/fluent/log.rb +33 -3
  25. data/lib/fluent/match.rb +9 -0
  26. data/lib/fluent/plugin/buffer.rb +49 -40
  27. data/lib/fluent/plugin/buffer/chunk.rb +2 -1
  28. data/lib/fluent/plugin/in_dummy.rb +2 -123
  29. data/lib/fluent/plugin/in_exec.rb +4 -2
  30. data/lib/fluent/plugin/in_forward.rb +2 -2
  31. data/lib/fluent/plugin/in_gc_stat.rb +16 -0
  32. data/lib/fluent/plugin/in_http.rb +148 -77
  33. data/lib/fluent/plugin/in_monitor_agent.rb +1 -1
  34. data/lib/fluent/plugin/in_sample.rb +141 -0
  35. data/lib/fluent/plugin/in_tail.rb +2 -2
  36. data/lib/fluent/plugin/in_unix.rb +77 -77
  37. data/lib/fluent/plugin/out_file.rb +1 -1
  38. data/lib/fluent/plugin/out_forward.rb +1 -1
  39. data/lib/fluent/plugin/out_forward/load_balancer.rb +1 -1
  40. data/lib/fluent/plugin/out_http.rb +15 -2
  41. data/lib/fluent/plugin/output.rb +1 -0
  42. data/lib/fluent/plugin/parser_json.rb +5 -2
  43. data/lib/fluent/plugin/parser_syslog.rb +215 -54
  44. data/lib/fluent/plugin_helper/cert_option.rb +5 -8
  45. data/lib/fluent/plugin_helper/child_process.rb +3 -2
  46. data/lib/fluent/plugin_helper/socket.rb +1 -1
  47. data/lib/fluent/supervisor.rb +15 -6
  48. data/lib/fluent/system_config.rb +2 -1
  49. data/lib/fluent/test/filter_test.rb +2 -2
  50. data/lib/fluent/test/output_test.rb +3 -3
  51. data/lib/fluent/version.rb +1 -1
  52. data/test/plugin/out_forward/test_load_balancer.rb +46 -0
  53. data/test/plugin/test_buffer.rb +4 -0
  54. data/test/plugin/test_in_exec.rb +18 -0
  55. data/test/plugin/test_in_gc_stat.rb +24 -1
  56. data/test/plugin/test_in_http.rb +57 -0
  57. data/test/plugin/{test_in_dummy.rb → test_in_sample.rb} +25 -25
  58. data/test/plugin/test_in_tail.rb +3 -0
  59. data/test/plugin/test_in_unix.rb +128 -73
  60. data/test/plugin/test_out_http.rb +38 -0
  61. data/test/plugin/test_parser_syslog.rb +66 -29
  62. data/test/plugin_helper/data/cert/empty.pem +0 -0
  63. data/test/plugin_helper/test_cert_option.rb +7 -0
  64. data/test/plugin_helper/test_child_process.rb +15 -0
  65. data/test/plugin_helper/test_http_server_helper.rb +5 -0
  66. data/test/plugin_helper/test_server.rb +34 -0
  67. data/test/plugin_helper/test_socket.rb +8 -0
  68. data/test/test_log.rb +44 -0
  69. data/test/test_match.rb +11 -0
  70. data/test/test_static_config_analysis.rb +2 -2
  71. metadata +9 -6
File without changes
@@ -15,4 +15,11 @@ class CertOptionPluginHelperTest < Test::Unit::TestCase
15
15
  certs = d.cert_option_certificates_from_file("test/plugin_helper/data/cert/cert-with-CRLF.pem")
16
16
  assert_equal(1, certs.length)
17
17
  end
18
+
19
+ test 'raise an error for broken certificates_from_file file' do
20
+ d = Dummy.new
21
+ assert_raise Fluent::ConfigError do
22
+ certs = d.cert_option_certificates_from_file("test/plugin_helper/data/cert/empty.pem")
23
+ end
24
+ end
18
25
  end
@@ -818,5 +818,20 @@ class ChildProcessTest < Test::Unit::TestCase
818
818
  end
819
819
  assert File.exist?(@temp_path)
820
820
  end
821
+
822
+ test 'execute child process writing data to stdout which is unread' do
823
+ callback_called = false
824
+ exit_status = nil
825
+ prog = "echo writing to stdout"
826
+ callback = ->(status){ exit_status = status; callback_called = true }
827
+ Timeout.timeout(TEST_DEADLOCK_TIMEOUT) do
828
+ @d.child_process_execute(:out_exec_process, prog, stderr: :connect, immediate: true, parallel: true, mode: [], wait_timeout: 1, on_exit_callback: callback)
829
+ sleep TEST_WAIT_INTERVAL_FOR_BLOCK_RUNNING until callback_called
830
+ end
831
+ assert callback_called
832
+ assert exit_status
833
+ assert exit_status.success?
834
+ assert_equal 0, exit_status.exitstatus
835
+ end
821
836
  end
822
837
  end
@@ -278,6 +278,7 @@ class HttpHelperTest < Test::Unit::TestCase
278
278
  driver.http_server_create_https_server(:http_server_helper_test_tls, addr: '127.0.0.1', port: PORT, logger: NULL_LOGGER) do |s|
279
279
  s.get('/example/hello') { [200, { 'Content-Type' => 'text/plain' }, 'hello get'] }
280
280
  end
281
+ omit "TLS connection should be aborted due to `Errno::ECONNABORTED`. Need to debug." if Fluent.windows?
281
282
 
282
283
  resp = secure_get("https://127.0.0.1:#{PORT}/example/hello", verify: false)
283
284
  assert_equal('200', resp.code)
@@ -293,6 +294,8 @@ class HttpHelperTest < Test::Unit::TestCase
293
294
  'with passphrase' => ['apple', 'cert-pass.pem', 'cert-key-pass.pem'],
294
295
  'without passphrase' => [nil, 'cert.pem', 'cert-key.pem'])
295
296
  test 'load self-signed cert/key pair, verified from clients using cert files' do |(passphrase, cert, private_key)|
297
+ omit "Self signed certificate blocks TLS connection. Need to debug." if Fluent.windows?
298
+
296
299
  cert_path = File.join(CERT_DIR, cert)
297
300
  private_key_path = File.join(CERT_DIR, private_key)
298
301
  opt = { 'insecure' => 'false', 'private_key_path' => private_key_path, 'cert_path' => cert_path }
@@ -315,6 +318,8 @@ class HttpHelperTest < Test::Unit::TestCase
315
318
  'with passphrase' => ['apple', 'cert-pass.pem', 'cert-key-pass.pem', 'ca-cert-pass.pem'],
316
319
  'without passphrase' => [nil, 'cert.pem', 'cert-key.pem', 'ca-cert.pem'])
317
320
  test 'load cert by private CA cert file, verified from clients using CA cert file' do |(passphrase, cert, cert_key, ca_cert)|
321
+ omit "Self signed certificate blocks TLS connection. Need to debug." if Fluent.windows?
322
+
318
323
  cert_path = File.join(CERT_CA_DIR, cert)
319
324
  private_key_path = File.join(CERT_CA_DIR, cert_key)
320
325
 
@@ -1233,6 +1233,40 @@ class ServerPluginHelperTest < Test::Unit::TestCase
1233
1233
  waiting(10){ sleep 0.1 until received.bytesize == 8 }
1234
1234
  assert_equal "yay\nfoo\n", received
1235
1235
  end
1236
+
1237
+ test 'set ciphers' do
1238
+ cert_path = File.join(@server_cert_dir, "cert.pem")
1239
+ private_key_path = File.join(@certs_dir, "server.key.pem")
1240
+ create_server_pair_signed_by_self(cert_path, private_key_path, nil)
1241
+ tls_options = {
1242
+ protocol: :tls,
1243
+ version: :TLSv1_2,
1244
+ ciphers: 'SHA256',
1245
+ insecure: false,
1246
+ cert_path: cert_path,
1247
+ private_key_path: private_key_path,
1248
+ }
1249
+ conf = @d.server_create_transport_section_object(tls_options)
1250
+ ctx = @d.cert_option_create_context(conf.version, conf.insecure, conf.ciphers, conf)
1251
+ matched = false
1252
+ ctx.ciphers.each do |cipher|
1253
+ cipher_name, tls_version = cipher
1254
+ # OpenSSL 1.0.2: "TLSv1/SSLv3"
1255
+ # OpenSSL 1.1.1: "TLSv1.2"
1256
+ if tls_version == "TLSv1/SSLv3" || tls_version == "TLSv1.2"
1257
+ matched = true
1258
+ unless cipher_name.match(/#{conf.ciphers}/)
1259
+ matched = false
1260
+ break
1261
+ end
1262
+ end
1263
+ end
1264
+
1265
+ error_msg = build_message("Unexpected ciphers for #{conf.version}",
1266
+ "<?>\nwas expected to include only <?> ciphers for #{conf.version}",
1267
+ ctx.ciphers, conf.ciphers)
1268
+ assert(matched, error_msg)
1269
+ end
1236
1270
  end
1237
1271
  end
1238
1272
 
@@ -128,4 +128,12 @@ class SocketHelperTest < Test::Unit::TestCase
128
128
  client.close
129
129
  end
130
130
  end
131
+
132
+ test 'with empty cert file' do
133
+ cert_path = File.expand_path(File.dirname(__FILE__) + '/data/cert/empty.pem')
134
+
135
+ assert_raise Fluent::ConfigError do
136
+ SocketHelperTestPlugin.new.socket_create_tls('127.0.0.1', PORT, cert_path: cert_path)
137
+ end
138
+ end
131
139
  end
@@ -411,6 +411,50 @@ class LogTest < Test::Unit::TestCase
411
411
  end
412
412
  end
413
413
 
414
+ sub_test_case "ignore_same_log_interval" do
415
+ teardown do
416
+ Thread.current[:last_same_log] = nil
417
+ end
418
+
419
+ def test_same_message
420
+ message = "This is test"
421
+ logger = ServerEngine::DaemonLogger.new(@log_device, {log_level: ServerEngine::DaemonLogger::INFO})
422
+ log = Fluent::Log.new(logger, {ignore_same_log_interval: 5})
423
+
424
+ log.error message
425
+ 10.times { |i|
426
+ Timecop.freeze(@timestamp + i + 1)
427
+ log.error message
428
+ }
429
+
430
+ expected = [
431
+ "2016-04-21 02:58:41 +0000 [error]: This is test\n",
432
+ "2016-04-21 02:58:47 +0000 [error]: This is test\n"
433
+ ]
434
+ assert_equal(expected, log.out.logs)
435
+ end
436
+
437
+ def test_different_message
438
+ message = "This is test"
439
+ logger = ServerEngine::DaemonLogger.new(@log_device, {log_level: ServerEngine::DaemonLogger::INFO})
440
+ log = Fluent::Log.new(logger, {ignore_same_log_interval: 10})
441
+
442
+ log.error message
443
+ 3.times { |i|
444
+ Timecop.freeze(@timestamp + i)
445
+ log.error message
446
+ log.error message
447
+ log.info "Hello! " + message
448
+ }
449
+
450
+ expected = [
451
+ "2016-04-21 02:58:41 +0000 [error]: This is test\n",
452
+ "2016-04-21 02:58:41 +0000 [info]: Hello! This is test\n",
453
+ ]
454
+ assert_equal(expected, log.out.logs)
455
+ end
456
+ end
457
+
414
458
  def test_dup
415
459
  dl_opts = {}
416
460
  dl_opts[:log_level] = ServerEngine::DaemonLogger::TRACE
@@ -101,6 +101,17 @@ class MatchTest < Test::Unit::TestCase
101
101
  assert_or_not_match('a.b.** a.c', 'a.c.d')
102
102
  end
103
103
 
104
+ def test_regex_pattern
105
+ assert_glob_match('/a/', 'a')
106
+ assert_glob_not_match('/a/', 'abc')
107
+ assert_glob_match('/a.*/', 'abc')
108
+ assert_glob_not_match('/b.*/', 'abc')
109
+ assert_glob_match('/a\..*/', 'a.b.c')
110
+ assert_glob_not_match('/(?!a\.).*/', 'a.b.c')
111
+ assert_glob_not_match('/a\..*/', 'b.b.c')
112
+ assert_glob_match('/(?!a\.).*/', 'b.b.c')
113
+ end
114
+
104
115
  #def test_character_class
105
116
  # assert_match('[a]', 'a')
106
117
  # assert_match('[ab]', 'a')
@@ -6,7 +6,7 @@ require 'fluent/plugin/out_forward'
6
6
  require 'fluent/plugin/out_stdout'
7
7
  require 'fluent/plugin/out_exec'
8
8
  require 'fluent/plugin/in_forward'
9
- require 'fluent/plugin/in_dummy'
9
+ require 'fluent/plugin/in_sample'
10
10
  require 'fluent/plugin/filter_grep'
11
11
  require 'fluent/plugin/filter_stdout'
12
12
  require 'fluent/plugin/filter_parser'
@@ -74,7 +74,7 @@ class StaticConfigAnalysisTest < ::Test::Unit::TestCase
74
74
  c = Fluent::Config.parse(conf_data, '(test)', '(test_dir)', true)
75
75
  ret = Fluent::StaticConfigAnalysis.call(c)
76
76
  assert_equal [Fluent::Plugin::ExecOutput, Fluent::Plugin::StdoutOutput, Fluent::Plugin::ForwardOutput], ret.outputs.map(&:plugin).map(&:class)
77
- assert_equal [Fluent::Plugin::DummyInput, Fluent::Plugin::ForwardInput], ret.inputs.map(&:plugin).map(&:class)
77
+ assert_equal [Fluent::Plugin::SampleInput, Fluent::Plugin::ForwardInput], ret.inputs.map(&:plugin).map(&:class)
78
78
  assert_equal [Fluent::Plugin::ParserFilter, Fluent::Plugin::StdoutFilter, Fluent::Plugin::GrepFilter], ret.filters.map(&:plugin).map(&:class)
79
79
  assert_equal 1, ret.labels.size
80
80
  assert_equal '@test', ret.labels[0].name
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fluentd
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.10.3
4
+ version: 1.11.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sadayuki Furuhashi
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-05-01 00:00:00.000000000 Z
11
+ date: 2020-09-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: msgpack
@@ -388,8 +388,6 @@ files:
388
388
  - example/copy_roundrobin.conf
389
389
  - example/counter.conf
390
390
  - example/filter_stdout.conf
391
- - example/in_dummy_blocks.conf
392
- - example/in_dummy_with_compression.conf
393
391
  - example/in_forward.conf
394
392
  - example/in_forward_client.conf
395
393
  - example/in_forward_shared_key.conf
@@ -398,6 +396,8 @@ files:
398
396
  - example/in_forward_workers.conf
399
397
  - example/in_http.conf
400
398
  - example/in_out_forward.conf
399
+ - example/in_sample_blocks.conf
400
+ - example/in_sample_with_compression.conf
401
401
  - example/in_syslog.conf
402
402
  - example/in_tail.conf
403
403
  - example/in_tcp.conf
@@ -535,6 +535,7 @@ files:
535
535
  - lib/fluent/plugin/in_http.rb
536
536
  - lib/fluent/plugin/in_monitor_agent.rb
537
537
  - lib/fluent/plugin/in_object_space.rb
538
+ - lib/fluent/plugin/in_sample.rb
538
539
  - lib/fluent/plugin/in_syslog.rb
539
540
  - lib/fluent/plugin/in_tail.rb
540
541
  - lib/fluent/plugin/in_tail/position_file.rb
@@ -745,13 +746,13 @@ files:
745
746
  - test/plugin/test_formatter_single_value.rb
746
747
  - test/plugin/test_formatter_tsv.rb
747
748
  - test/plugin/test_in_debug_agent.rb
748
- - test/plugin/test_in_dummy.rb
749
749
  - test/plugin/test_in_exec.rb
750
750
  - test/plugin/test_in_forward.rb
751
751
  - test/plugin/test_in_gc_stat.rb
752
752
  - test/plugin/test_in_http.rb
753
753
  - test/plugin/test_in_monitor_agent.rb
754
754
  - test/plugin/test_in_object_space.rb
755
+ - test/plugin/test_in_sample.rb
755
756
  - test/plugin/test_in_syslog.rb
756
757
  - test/plugin/test_in_tail.rb
757
758
  - test/plugin/test_in_tcp.rb
@@ -807,6 +808,7 @@ files:
807
808
  - test/plugin_helper/data/cert/cert_chains/ca-cert.pem
808
809
  - test/plugin_helper/data/cert/cert_chains/cert-key.pem
809
810
  - test/plugin_helper/data/cert/cert_chains/cert.pem
811
+ - test/plugin_helper/data/cert/empty.pem
810
812
  - test/plugin_helper/data/cert/generate_cert.rb
811
813
  - test/plugin_helper/data/cert/with_ca/ca-cert-key-pass.pem
812
814
  - test/plugin_helper/data/cert/with_ca/ca-cert-key.pem
@@ -978,13 +980,13 @@ test_files:
978
980
  - test/plugin/test_formatter_single_value.rb
979
981
  - test/plugin/test_formatter_tsv.rb
980
982
  - test/plugin/test_in_debug_agent.rb
981
- - test/plugin/test_in_dummy.rb
982
983
  - test/plugin/test_in_exec.rb
983
984
  - test/plugin/test_in_forward.rb
984
985
  - test/plugin/test_in_gc_stat.rb
985
986
  - test/plugin/test_in_http.rb
986
987
  - test/plugin/test_in_monitor_agent.rb
987
988
  - test/plugin/test_in_object_space.rb
989
+ - test/plugin/test_in_sample.rb
988
990
  - test/plugin/test_in_syslog.rb
989
991
  - test/plugin/test_in_tail.rb
990
992
  - test/plugin/test_in_tcp.rb
@@ -1040,6 +1042,7 @@ test_files:
1040
1042
  - test/plugin_helper/data/cert/cert_chains/ca-cert.pem
1041
1043
  - test/plugin_helper/data/cert/cert_chains/cert-key.pem
1042
1044
  - test/plugin_helper/data/cert/cert_chains/cert.pem
1045
+ - test/plugin_helper/data/cert/empty.pem
1043
1046
  - test/plugin_helper/data/cert/generate_cert.rb
1044
1047
  - test/plugin_helper/data/cert/with_ca/ca-cert-key-pass.pem
1045
1048
  - test/plugin_helper/data/cert/with_ca/ca-cert-key.pem