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").
         
     |