fluent-plugin-elasticsearch 5.3.0 → 5.4.0
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.
- checksums.yaml +4 -4
- data/.github/workflows/linux.yml +1 -1
- data/.github/workflows/macos.yml +1 -1
- data/.github/workflows/windows.yml +1 -1
- data/History.md +4 -0
- data/fluent-plugin-elasticsearch.gemspec +1 -1
- data/lib/fluent/plugin/out_elasticsearch.rb +23 -0
- data/test/helper.rb +0 -1
- data/test/plugin/test_elasticsearch_fallback_selector.rb +1 -1
- data/test/plugin/test_elasticsearch_index_lifecycle_management.rb +6 -6
- data/test/plugin/test_in_elasticsearch.rb +10 -10
- data/test/plugin/test_out_elasticsearch.rb +440 -330
- data/test/plugin/test_out_elasticsearch_data_stream.rb +21 -21
- data/test/plugin/test_out_elasticsearch_dynamic.rb +13 -11
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4fc25cc0c5f9b35ce8ab9d733cbd4d908df838540f2bc5aad0fce57267f2c6d5
|
4
|
+
data.tar.gz: 1179e1275edf74186b41c3ff004236a940df58b4c7214f2fe6e3a7ae3852cd81
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 43f42f1611c24eb8ef00c153bf8ed4acc07da4a02535f5df6eecc44d9a2d219a15de1551131e7efeb80c8b8e2c20ef203302d95a2c1fe369d3996920654ec381
|
7
|
+
data.tar.gz: 10de0f5a8e5c2179595a99b01a331cbc102c1d9529a59435d8f5c079236cf4132f86d05e552ae2e08e1bce88ec8eac8cd28c721c016a5cb17e13526cf5336d9e
|
data/.github/workflows/linux.yml
CHANGED
data/.github/workflows/macos.yml
CHANGED
data/History.md
CHANGED
@@ -3,7 +3,7 @@ $:.push File.expand_path('../lib', __FILE__)
|
|
3
3
|
|
4
4
|
Gem::Specification.new do |s|
|
5
5
|
s.name = 'fluent-plugin-elasticsearch'
|
6
|
-
s.version = '5.
|
6
|
+
s.version = '5.4.0'
|
7
7
|
s.authors = ['diogo', 'pitr', 'Hiroshi Hatake']
|
8
8
|
s.email = ['pitr.vern@gmail.com', 'me@diogoterror.com', 'cosmo0920.wp@gmail.com']
|
9
9
|
s.description = %q{Elasticsearch output plugin for Fluent event collector}
|
@@ -653,6 +653,14 @@ EOC
|
|
653
653
|
end
|
654
654
|
end
|
655
655
|
|
656
|
+
def is_ipv6_host(host_str)
|
657
|
+
begin
|
658
|
+
IPAddr.new(host_str).ipv6?
|
659
|
+
rescue IPAddr::InvalidAddressError
|
660
|
+
return false
|
661
|
+
end
|
662
|
+
end
|
663
|
+
|
656
664
|
def get_connection_options(con_host=nil)
|
657
665
|
|
658
666
|
hosts = if con_host || @hosts
|
@@ -664,6 +672,21 @@ EOC
|
|
664
672
|
port: (host_str.split(':')[1] || @port).to_i,
|
665
673
|
scheme: @scheme.to_s
|
666
674
|
}
|
675
|
+
# Support ipv6 for host/host placeholders
|
676
|
+
elsif is_ipv6_host(host_str)
|
677
|
+
if Resolv::IPv6::Regex.match(host_str)
|
678
|
+
{
|
679
|
+
host: "[#{host_str}]",
|
680
|
+
port: @port.to_i,
|
681
|
+
scheme: @scheme.to_s
|
682
|
+
}
|
683
|
+
else
|
684
|
+
{
|
685
|
+
host: host_str,
|
686
|
+
port: @port.to_i,
|
687
|
+
scheme: @scheme.to_s
|
688
|
+
}
|
689
|
+
end
|
667
690
|
else
|
668
691
|
# New hosts format expects URLs such as http://logs.foo.com,https://john:pass@logs2.foo.com/elastic
|
669
692
|
uri = URI(get_escaped_userinfo(host_str))
|
data/test/helper.rb
CHANGED
@@ -15,7 +15,7 @@ class ElasticsearchFallbackSelectorTest < Test::Unit::TestCase
|
|
15
15
|
def stub_elastic(url="http://localhost:9200/_bulk")
|
16
16
|
stub_request(:post, url).with do |req|
|
17
17
|
@index_cmds = req.body.split("\n").map {|r| JSON.parse(r) }
|
18
|
-
end
|
18
|
+
end.to_return({:status => 200, :body => "{}", :headers => { 'Content-Type' => 'json', 'x-elastic-product' => 'Elasticsearch' } })
|
19
19
|
end
|
20
20
|
|
21
21
|
def elasticsearch_version
|
@@ -60,7 +60,7 @@ class TestElasticsearchIndexLifecycleManagement < Test::Unit::TestCase
|
|
60
60
|
|
61
61
|
def test_xpack_info
|
62
62
|
stub_request(:get, "http://localhost:9200/_xpack").
|
63
|
-
to_return(:status => 200, :body => '{"features":{"ilm":{"available":true,"enabled":true}}}', :headers => {"Content-Type"=> "application/json" })
|
63
|
+
to_return(:status => 200, :body => '{"features":{"ilm":{"available":true,"enabled":true}}}', :headers => {"Content-Type"=> "application/json", 'x-elastic-product' => 'Elasticsearch' })
|
64
64
|
stub_elastic_info
|
65
65
|
expected = {"features"=>{"ilm"=>{"available"=>true, "enabled"=>true}}}
|
66
66
|
if xpack_info.is_a?(Elasticsearch::API::Response)
|
@@ -72,32 +72,32 @@ class TestElasticsearchIndexLifecycleManagement < Test::Unit::TestCase
|
|
72
72
|
|
73
73
|
def test_verify_ilm_working
|
74
74
|
stub_request(:get, "http://localhost:9200/_xpack").
|
75
|
-
to_return(:status => 200, :body => '{"features":{"ilm":{"available":true,"enabled":true}}}', :headers => {"Content-Type"=> "application/json" })
|
75
|
+
to_return(:status => 200, :body => '{"features":{"ilm":{"available":true,"enabled":true}}}', :headers => {"Content-Type"=> "application/json", 'x-elastic-product' => 'Elasticsearch' })
|
76
76
|
stub_elastic_info
|
77
77
|
assert_nothing_raised { verify_ilm_working }
|
78
78
|
end
|
79
79
|
|
80
80
|
def test_ilm_policy_doesnt_exists
|
81
81
|
stub_request(:get, "http://localhost:9200/#{ilm_existence_endpoint("fluentd-policy")}").
|
82
|
-
to_return(:status => 404, :body => "", :headers => {})
|
82
|
+
to_return(:status => 404, :body => "", :headers => {'x-elastic-product' => 'Elasticsearch'})
|
83
83
|
stub_elastic_info
|
84
84
|
assert_false(ilm_policy_exists?("fluentd-policy"))
|
85
85
|
end
|
86
86
|
|
87
87
|
def test_ilm_policy_exists
|
88
88
|
stub_request(:get, "http://localhost:9200/#{ilm_existence_endpoint("fluent-policy")}").
|
89
|
-
to_return(:status => 200, :body => "", :headers => {})
|
89
|
+
to_return(:status => 200, :body => "", :headers => {'x-elastic-product' => 'Elasticsearch'})
|
90
90
|
stub_elastic_info
|
91
91
|
assert_true(ilm_policy_exists?("fluent-policy"))
|
92
92
|
end
|
93
93
|
|
94
94
|
def test_create_ilm_policy
|
95
95
|
stub_request(:get, "http://localhost:9200/#{ilm_creation_endpoint("fluent-policy")}").
|
96
|
-
to_return(:status => 404, :body => "", :headers => {})
|
96
|
+
to_return(:status => 404, :body => "", :headers => {'x-elastic-product' => 'Elasticsearch'})
|
97
97
|
stub_request(:put, "http://localhost:9200/#{ilm_creation_endpoint("fluent-policy")}").
|
98
98
|
with(:body => "{\"policy\":{\"phases\":{\"hot\":{\"actions\":{\"rollover\":{\"max_size\":\"50gb\",\"max_age\":\"30d\"}}}}}}",
|
99
99
|
:headers => {'Content-Type'=>'application/json'}).
|
100
|
-
to_return(:status => 200, :body => "", :headers => {})
|
100
|
+
to_return(:status => 200, :body => "", :headers => {'x-elastic-product' => 'Elasticsearch'})
|
101
101
|
stub_elastic_info
|
102
102
|
create_ilm_policy("fluent-policy")
|
103
103
|
|
@@ -334,7 +334,7 @@ class ElasticsearchInputTest < Test::Unit::TestCase
|
|
334
334
|
stub_request(@http_method, "http://localhost:9200/fluentd/_search?scroll=1m&size=1000").
|
335
335
|
with(body: "{\"sort\":[\"_doc\"]}").
|
336
336
|
to_return(status: 200, body: sample_response.to_s,
|
337
|
-
headers: {'Content-Type' => 'application/json'})
|
337
|
+
headers: {'Content-Type' => 'application/json', 'X-elastic-product' => 'Elasticsearch'})
|
338
338
|
stub_elastic_info
|
339
339
|
|
340
340
|
driver(CONFIG)
|
@@ -350,7 +350,7 @@ class ElasticsearchInputTest < Test::Unit::TestCase
|
|
350
350
|
stub_request(@http_method, "http://localhost:9200/#{index_name}/_search?scroll=1m&size=1000").
|
351
351
|
with(body: "{\"sort\":[\"_doc\"]}").
|
352
352
|
to_return(status: 200, body: sample_response(index_name).to_s,
|
353
|
-
headers: {'Content-Type' => 'application/json'})
|
353
|
+
headers: {'Content-Type' => 'application/json', 'X-elastic-product' => 'Elasticsearch'})
|
354
354
|
stub_elastic_info
|
355
355
|
|
356
356
|
driver(CONFIG + %[index_name #{index_name}])
|
@@ -366,7 +366,7 @@ class ElasticsearchInputTest < Test::Unit::TestCase
|
|
366
366
|
stub_request(@http_method, "http://localhost:9200/#{index_name}/_search?scroll=1m&size=1000").
|
367
367
|
with(body: "{\"sort\":[\"_doc\"]}").
|
368
368
|
to_return(status: 200, body: sample_response(index_name).to_s,
|
369
|
-
headers: {'Content-Type' => 'application/json'})
|
369
|
+
headers: {'Content-Type' => 'application/json', 'X-elastic-product' => 'Elasticsearch'})
|
370
370
|
stub_elastic_info
|
371
371
|
|
372
372
|
driver(CONFIG + %[parse_timestamp])
|
@@ -385,7 +385,7 @@ class ElasticsearchInputTest < Test::Unit::TestCase
|
|
385
385
|
stub_request(@http_method, "http://localhost:9200/#{index_name}/_search?scroll=1m&size=1000").
|
386
386
|
with(body: "{\"sort\":[\"_doc\"]}").
|
387
387
|
to_return(status: 200, body: sample_response(index_name).to_s,
|
388
|
-
headers: {'Content-Type' => 'application/json'})
|
388
|
+
headers: {'Content-Type' => 'application/json', 'X-elastic-product' => 'Elasticsearch'})
|
389
389
|
stub_elastic_info
|
390
390
|
|
391
391
|
driver(CONFIG + %[parse_timestamp true
|
@@ -405,7 +405,7 @@ class ElasticsearchInputTest < Test::Unit::TestCase
|
|
405
405
|
stub_request(@http_method, "http://localhost:9200/fluentd/_search?scroll=1m&size=1000").
|
406
406
|
with(body: "{\"sort\":[\"_doc\"]}").
|
407
407
|
to_return(status: 200, body: sample_response.to_s,
|
408
|
-
headers: {'Content-Type' => 'application/json'})
|
408
|
+
headers: {'Content-Type' => 'application/json', 'X-elastic-product' => 'Elasticsearch'})
|
409
409
|
stub_elastic_info
|
410
410
|
|
411
411
|
driver(CONFIG + %[docinfo true])
|
@@ -425,11 +425,11 @@ class ElasticsearchInputTest < Test::Unit::TestCase
|
|
425
425
|
stub_request(@http_method, "http://localhost:9200/fluentd/_search?scroll=1m&size=1000").
|
426
426
|
with(body: "{\"sort\":[\"_doc\"],\"slice\":{\"id\":0,\"max\":2}}").
|
427
427
|
to_return(status: 200, body: sample_response.to_s,
|
428
|
-
headers: {'Content-Type' => 'application/json'})
|
428
|
+
headers: {'Content-Type' => 'application/json', 'X-elastic-product' => 'Elasticsearch'})
|
429
429
|
stub_request(@http_method, "http://localhost:9200/fluentd/_search?scroll=1m&size=1000").
|
430
430
|
with(body: "{\"sort\":[\"_doc\"],\"slice\":{\"id\":1,\"max\":2}}").
|
431
431
|
to_return(status: 200, body: sample_response.to_s,
|
432
|
-
headers: {'Content-Type' => 'application/json'})
|
432
|
+
headers: {'Content-Type' => 'application/json', 'X-elastic-product' => 'Elasticsearch'})
|
433
433
|
stub_elastic_info
|
434
434
|
|
435
435
|
driver(CONFIG + %[num_slices 2])
|
@@ -446,7 +446,7 @@ class ElasticsearchInputTest < Test::Unit::TestCase
|
|
446
446
|
stub_request(@http_method, "http://localhost:9200/fluentd/_search?scroll=1m&size=1").
|
447
447
|
with(body: "{\"sort\":[\"_doc\"]}").
|
448
448
|
to_return(status: 200, body: sample_scroll_response.to_s,
|
449
|
-
headers: {'Content-Type' => 'application/json'})
|
449
|
+
headers: {'Content-Type' => 'application/json', 'X-elastic-product' => 'Elasticsearch'})
|
450
450
|
connection = 0
|
451
451
|
scroll_request = stub_request(@http_method, "http://localhost:9200/_search/scroll?scroll=1m").
|
452
452
|
with(
|
@@ -457,10 +457,10 @@ class ElasticsearchInputTest < Test::Unit::TestCase
|
|
457
457
|
scroll_request.to_return(lambda do |req|
|
458
458
|
if connection <= 1
|
459
459
|
{status: 200, body: sample_scroll_response_2.to_s,
|
460
|
-
headers: {'Content-Type' => 'application/json'}}
|
460
|
+
headers: {'Content-Type' => 'application/json', 'X-elastic-product' => 'Elasticsearch'}}
|
461
461
|
else
|
462
462
|
{status: 200, body: sample_scroll_response_terminate.to_s,
|
463
|
-
headers: {'Content-Type' => 'application/json'}}
|
463
|
+
headers: {'Content-Type' => 'application/json', 'X-elastic-product' => 'Elasticsearch'}}
|
464
464
|
end
|
465
465
|
end)
|
466
466
|
stub_request(:delete, "http://localhost:9200/_search/scroll/WomkoUKG0QPB679Ulo6TqQgh3pIGRUmrl9qXXGK3EeiQh9rbYNasTkspZQcJ01uz").
|