logstash-output-amazon_es 2.0.1-java → 6.4.0-java

Sign up to get free protection for your applications and to get access to all the features.
Files changed (35) hide show
  1. checksums.yaml +5 -5
  2. data/CONTRIBUTORS +12 -0
  3. data/Gemfile +8 -0
  4. data/LICENSE +10 -199
  5. data/README.md +34 -65
  6. data/lib/logstash/outputs/amazon_es.rb +218 -423
  7. data/lib/logstash/outputs/amazon_es/common.rb +347 -0
  8. data/lib/logstash/outputs/amazon_es/common_configs.rb +141 -0
  9. data/lib/logstash/outputs/amazon_es/elasticsearch-template-es2x.json +95 -0
  10. data/lib/logstash/outputs/amazon_es/elasticsearch-template-es5x.json +46 -0
  11. data/lib/logstash/outputs/amazon_es/elasticsearch-template-es6x.json +45 -0
  12. data/lib/logstash/outputs/amazon_es/elasticsearch-template-es7x.json +46 -0
  13. data/lib/logstash/outputs/amazon_es/http_client.rb +359 -74
  14. data/lib/logstash/outputs/amazon_es/http_client/manticore_adapter.rb +169 -0
  15. data/lib/logstash/outputs/amazon_es/http_client/pool.rb +457 -0
  16. data/lib/logstash/outputs/amazon_es/http_client_builder.rb +164 -0
  17. data/lib/logstash/outputs/amazon_es/template_manager.rb +36 -0
  18. data/logstash-output-amazon_es.gemspec +13 -22
  19. data/spec/es_spec_helper.rb +37 -0
  20. data/spec/unit/http_client_builder_spec.rb +189 -0
  21. data/spec/unit/outputs/elasticsearch/http_client/manticore_adapter_spec.rb +105 -0
  22. data/spec/unit/outputs/elasticsearch/http_client/pool_spec.rb +198 -0
  23. data/spec/unit/outputs/elasticsearch/http_client_spec.rb +222 -0
  24. data/spec/unit/outputs/elasticsearch/template_manager_spec.rb +25 -0
  25. data/spec/unit/outputs/elasticsearch_spec.rb +615 -0
  26. data/spec/unit/outputs/error_whitelist_spec.rb +60 -0
  27. metadata +49 -110
  28. data/lib/logstash/outputs/amazon_es/aws_transport.rb +0 -109
  29. data/lib/logstash/outputs/amazon_es/aws_v4_signer.rb +0 -7
  30. data/lib/logstash/outputs/amazon_es/aws_v4_signer_impl.rb +0 -62
  31. data/lib/logstash/outputs/amazon_es/elasticsearch-template.json +0 -41
  32. data/spec/amazon_es_spec_helper.rb +0 -69
  33. data/spec/unit/outputs/amazon_es_spec.rb +0 -50
  34. data/spec/unit/outputs/elasticsearch/protocol_spec.rb +0 -36
  35. data/spec/unit/outputs/elasticsearch_proxy_spec.rb +0 -58
@@ -1,41 +0,0 @@
1
- {
2
- "template" : "logstash-*",
3
- "settings" : {
4
- "index.refresh_interval" : "5s"
5
- },
6
- "mappings" : {
7
- "_default_" : {
8
- "_all" : {"enabled" : true, "omit_norms" : true},
9
- "dynamic_templates" : [ {
10
- "message_field" : {
11
- "match" : "message",
12
- "match_mapping_type" : "string",
13
- "mapping" : {
14
- "type" : "string", "index" : "analyzed", "omit_norms" : true
15
- }
16
- }
17
- }, {
18
- "string_fields" : {
19
- "match" : "*",
20
- "match_mapping_type" : "string",
21
- "mapping" : {
22
- "type" : "string", "index" : "analyzed", "omit_norms" : true,
23
- "fields" : {
24
- "raw" : {"type": "string", "index" : "not_analyzed", "ignore_above" : 256}
25
- }
26
- }
27
- }
28
- } ],
29
- "properties" : {
30
- "@version": { "type": "string", "index": "not_analyzed" },
31
- "geoip" : {
32
- "type" : "object",
33
- "dynamic": true,
34
- "properties" : {
35
- "location" : { "type" : "geo_point" }
36
- }
37
- }
38
- }
39
- }
40
- }
41
- }
@@ -1,69 +0,0 @@
1
- require "logstash/devutils/rspec/spec_helper"
2
- require "ftw"
3
- require "logstash/plugin"
4
- require "logstash/json"
5
- require "stud/try"
6
- require "longshoreman"
7
-
8
- CONTAINER_NAME = "logstash-output-amazon-es-#{rand(999).to_s}"
9
- CONTAINER_IMAGE = "elasticsearch"
10
- CONTAINER_TAG = "1.6"
11
-
12
- DOCKER_INTEGRATION = ENV["DOCKER_INTEGRATION"]
13
-
14
- module ESHelper
15
- def get_host
16
- DOCKER_INTEGRATION ? Longshoreman.new.get_host_ip : "127.0.0.1"
17
- end
18
-
19
- def get_port
20
- return 9200 unless DOCKER_INTEGRATION
21
-
22
- container = Longshoreman::Container.new
23
- container.get(CONTAINER_NAME)
24
- container.rport(9200)
25
- end
26
-
27
- def get_client
28
- Elasticsearch::Client.new(:host => "#{get_host}:#{get_port}")
29
- end
30
- end
31
-
32
-
33
- RSpec.configure do |config|
34
- config.include ESHelper
35
-
36
-
37
- if DOCKER_INTEGRATION
38
- # this :all hook gets run before every describe block that is tagged with :integration => true.
39
- config.before(:all, :integration => true) do
40
-
41
-
42
- # check if container exists already before creating new one.
43
- begin
44
- ls = Longshoreman::new
45
- ls.container.get(CONTAINER_NAME)
46
- rescue Docker::Error::NotFoundError
47
- Longshoreman.new("#{CONTAINER_IMAGE}:#{CONTAINER_TAG}", CONTAINER_NAME)
48
- # TODO(talevy): verify ES is running instead of static timeout
49
- sleep 10
50
- end
51
- end
52
-
53
- # we want to do a final cleanup after all :integration runs,
54
- # but we don't want to clean up before the last block.
55
- # This is a final blind check to see if the ES docker container is running and
56
- # needs to be cleaned up. If no container can be found and/or docker is not
57
- # running on the system, we do nothing.
58
- config.after(:suite) do
59
- # only cleanup docker container if system has docker and the container is running
60
- begin
61
- ls = Longshoreman::new
62
- ls.container.get(CONTAINER_NAME)
63
- ls.cleanup
64
- rescue Docker::Error::NotFoundError, Excon::Errors::SocketError
65
- # do nothing
66
- end
67
- end
68
- end
69
- end
@@ -1,50 +0,0 @@
1
- require_relative "../../../spec/amazon_es_spec_helper"
2
-
3
- describe "outputs/amazon_es" do
4
- describe "http client create" do
5
- require "logstash/outputs/amazon_es"
6
- require "elasticsearch"
7
-
8
- let(:options) {
9
- {
10
- "index" => "my-index",
11
- "hosts" => "localhost",
12
- "path" => "some-path"
13
- }
14
- }
15
-
16
- let(:eso) {LogStash::Outputs::AmazonES.new(options)}
17
-
18
- let(:manticore_host) {
19
- eso.client.send(:client).transport.options[:hosts].first
20
- }
21
-
22
- around(:each) do |block|
23
- thread = eso.register
24
- block.call()
25
- thread.kill()
26
- end
27
-
28
- describe "with path" do
29
- it "should properly create a URI with the path" do
30
- expect(eso.path).to eql(options["path"])
31
- end
32
-
33
-
34
- it "should properly set the path on the HTTP client" do
35
- expect(manticore_host).to include("/" + options["path"])
36
- end
37
-
38
- context "with extra slashes" do
39
- let(:path) { "/slashed-path/ "}
40
- let(:eso) {
41
- LogStash::Outputs::AmazonES.new(options.merge("path" => "/some-path/"))
42
- }
43
-
44
- it "should properly set the path on the HTTP client without adding slashes" do
45
- expect(manticore_host).to include(options["path"])
46
- end
47
- end
48
- end
49
- end
50
- end
@@ -1,36 +0,0 @@
1
- require "logstash/devutils/rspec/spec_helper"
2
- require "logstash/outputs/amazon_es/http_client"
3
- require "java"
4
-
5
- describe LogStash::Outputs::AES::HttpClient do
6
- context "successful" do
7
- it "should map correctly" do
8
- bulk_response = {"took"=>74, "errors"=>false, "items"=>[{"create"=>{"_index"=>"logstash-2014.11.17",
9
- "_type"=>"logs", "_id"=>"AUxTS2C55Jrgi-hC6rQF",
10
- "_version"=>1, "status"=>201}}]}
11
- actual = LogStash::Outputs::AES::HttpClient.normalize_bulk_response(bulk_response)
12
- insist { actual } == {"errors"=> false}
13
- end
14
- end
15
-
16
- context "contains failures" do
17
- it "should map correctly" do
18
- bulk_response = {"took"=>71, "errors"=>true,
19
- "items"=>[{"create"=>{"_index"=>"logstash-2014.11.17",
20
- "_type"=>"logs", "_id"=>"AUxTQ_OI5Jrgi-hC6rQB", "status"=>400,
21
- "error"=>"MapperParsingException[failed to parse]..."}}]}
22
- actual = LogStash::Outputs::AES::HttpClient.normalize_bulk_response(bulk_response)
23
- insist { actual } == {"errors"=> true, "statuses"=> [400]}
24
- end
25
- end
26
-
27
- describe "sniffing" do
28
- let(:base_options) { {:hosts => ["127.0.0.1"] }}
29
- let(:client) { LogStash::Outputs::AES::HttpClient.new(base_options.merge(client_opts)) }
30
- let(:transport) { client.client.transport }
31
-
32
- before do
33
- allow(transport).to receive(:reload_connections!)
34
- end
35
- end
36
- end
@@ -1,58 +0,0 @@
1
- require_relative "../../../spec/amazon_es_spec_helper"
2
- require 'stud/temporary'
3
- require 'elasticsearch'
4
- require "logstash/outputs/amazon_es"
5
-
6
- describe "Proxy option" do
7
- let(:settings) {
8
- {
9
- "hosts" => "node01",
10
- "proxy" => proxy
11
- }
12
- }
13
- subject {
14
- LogStash::Outputs::AmazonES.new(settings)
15
- }
16
-
17
- before do
18
- allow(::Elasticsearch::Client).to receive(:new).with(any_args)
19
- end
20
-
21
- describe "valid configs" do
22
- before do
23
- subject.register
24
- end
25
-
26
- context "when specified as a string" do
27
- let(:proxy) { "http://127.0.0.1:1234" }
28
-
29
- it "should set the proxy to the exact value" do
30
- expect(::Elasticsearch::Client).to have_received(:new) do |options|
31
- expect(options[:transport_options][:proxy]).to eql(proxy)
32
- end
33
- end
34
- end
35
-
36
- context "when specified as a hash" do
37
- let(:proxy) { {"hosts" => "127.0.0.1", "protocol" => "http"} }
38
-
39
- it "should pass through the proxy values as symbols" do
40
- expected = {:hosts => proxy["hosts"], :protocol => proxy["protocol"]}
41
- expect(::Elasticsearch::Client).to have_received(:new) do |options|
42
- expect(options[:transport_options][:proxy]).to eql(expected)
43
- end
44
- end
45
- end
46
- end
47
-
48
- describe "invalid configs" do
49
- let(:proxy) { ["bad", "stuff"] }
50
-
51
- it "should have raised an exception" do
52
- expect {
53
- subject.register
54
- }.to raise_error(LogStash::ConfigurationError)
55
- end
56
- end
57
-
58
- end