logstash-output-mongodb 3.0.1 → 3.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 4ffa90de651ecb6cdded946ccb3df2e6b4ac6f40
4
- data.tar.gz: 763433ec998c5c463eaead7a6253310fd41d2fe4
3
+ metadata.gz: 37c6554062844f26b2e5523500973e725f290ff0
4
+ data.tar.gz: 7a23d57d1bce56f1382eaf175d2513bcec133085
5
5
  SHA512:
6
- metadata.gz: 3638c30d6d3eeaab6ab73916f08679847b348888749b059a0e83a9624ac99f57598243aaa7c29b8256dfd6dbc960531e4b4fe0042ed89b7de78f5eed2128c9ff
7
- data.tar.gz: 90c011a9f9f71fb0d93cce2e16b1653f29d2675319090f0ed6b5ce4026ed9c0b2b98d5b940d75b5d52fc0abaa0799f95d73ded649a06bea9dcbfe743b686d42f
6
+ metadata.gz: 8bedf6b5a8e973d5a3a940b5ad9606719c4457a23be1947311a4910cd00a512f1e10503038d710ae4dd4ff19562b4e7fddd5ee7878a939e40f532627226c5572
7
+ data.tar.gz: aef06d938a3f2c6722c583ad8465ebb7563666c3af6f946061b9197bf5207e41960a377be30e28a3a543fb7e0cdf96c397584594a07087772baa2103a53807af
data/CHANGELOG.md CHANGED
@@ -1,3 +1,6 @@
1
+ ## 3.1.0
2
+ - Add support for bulk inserts to improve performance.
3
+
1
4
  ## 3.0.1
2
5
  - Docs: Fix doc generation issue by removing extraneous comments and adding a short description of the plugin
3
6
 
@@ -34,11 +34,41 @@ class LogStash::Outputs::Mongodb < LogStash::Outputs::Base
34
34
  # "_id" field in the event.
35
35
  config :generateId, :validate => :boolean, :default => false
36
36
 
37
+
38
+ # Bulk insert flag, set to true to allow bulk insertion, else it will insert events one by one.
39
+ config :bulk, :validate => :boolean, :default => false
40
+ # Bulk interval, Used to insert events periodically if the "bulk" flag is activated.
41
+ config :bulk_interval, :validate => :number, :default => 2
42
+ # Bulk events number, if the number of events to insert into a collection raise that limit, it will be bulk inserted
43
+ # whatever the bulk interval value (mongodb hard limit is 1000).
44
+ config :bulk_size, :validate => :number, :default => 900, :maximum => 999, :min => 2
45
+
46
+ # Mutex used to synchronize access to 'documents'
47
+ @@mutex = Mutex.new
48
+
37
49
  public
38
50
  def register
39
51
  Mongo::Logger.logger = @logger
40
52
  conn = Mongo::Client.new(@uri)
41
53
  @db = conn.use(@database)
54
+
55
+ if @bulk_size > 1000
56
+ raise LogStash::ConfigurationError, "Bulk size must be lower than '1000', currently '#{@bulk_size}'"
57
+ end
58
+ @documents = {}
59
+ Thread.new do
60
+ loop do
61
+ sleep @bulk_interval
62
+ @@mutex.synchronize do
63
+ @documents.each do |collection, values|
64
+ if values.length > 0
65
+ @db[collection].insert_many(values)
66
+ @documents.delete(collection)
67
+ end
68
+ end
69
+ end
70
+ end
71
+ end
42
72
  end # def register
43
73
 
44
74
  def receive(event)
@@ -53,7 +83,23 @@ class LogStash::Outputs::Mongodb < LogStash::Outputs::Base
53
83
  if @generateId
54
84
  document["_id"] = BSON::ObjectId.new(nil, event.timestamp)
55
85
  end
56
- @db[event.sprintf(@collection)].insert_one(document)
86
+ if @bulk
87
+ @@mutex.synchronize do
88
+ collection = event.sprintf(@collection)
89
+ if(!@documents[collection])
90
+ @documents[collection] = []
91
+ end
92
+ @documents[collection].push(document)
93
+
94
+ if(@documents[collection].length >= @bulk_size)
95
+ @db[collection].insert_many(@documents[collection])
96
+ @documents.delete(collection)
97
+ end
98
+ end
99
+ else
100
+ @db[event.sprintf(@collection)].insert_one(document)
101
+ end
102
+
57
103
  rescue => e
58
104
  @logger.warn("Failed to send event to MongoDB", :event => event, :exception => e,
59
105
  :backtrace => e.backtrace)
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = 'logstash-output-mongodb'
3
- s.version = '3.0.1'
3
+ s.version = '3.1.0'
4
4
  s.licenses = ['Apache License (2.0)']
5
5
  s.summary = "Store events into MongoDB"
6
6
  s.description = "This gem is a Logstash plugin required to be installed on top of the Logstash core pipeline using $LS_HOME/bin/logstash-plugin install gemname. This gem is not a stand-alone program"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: logstash-output-mongodb
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.0.1
4
+ version: 3.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Elastic
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-02-15 00:00:00.000000000 Z
11
+ date: 2017-04-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  requirement: !ruby/object:Gem::Requirement