logstash-output-rabbitmq 4.0.7-java → 4.0.8-java
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/Gemfile +8 -1
- data/docs/index.asciidoc +279 -0
- data/lib/logstash/outputs/rabbitmq.rb +3 -1
- data/logstash-output-rabbitmq.gemspec +2 -2
- data/spec/outputs/rabbitmq_spec.rb +33 -14
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: dbde233852ddfa02201c3fe3e2bc05326624ef90
|
4
|
+
data.tar.gz: 2e0c0a8f71af46d29f42121155f4c8bc05907d14
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 804b03b245fa79881a8fc914df74c1207eee2e2a3cda923f0ff5d68db4e4e0e41804cee786576f7e6649bb67a401adf62f36713c7a2a392c61ebc1d94cd0a55b
|
7
|
+
data.tar.gz: 05b45722189c028e8afcf8103540e368956598a583a269d49e648d85ef93b6a9773fdecfcb18a789cf5500dd599817ee1f9df1bac69f5069caa067ef59eb9fc0
|
data/Gemfile
CHANGED
@@ -1,4 +1,11 @@
|
|
1
1
|
source 'https://rubygems.org'
|
2
2
|
|
3
|
-
# Specify your gem's dependencies in logstash-mass_effect.gemspec
|
4
3
|
gemspec
|
4
|
+
|
5
|
+
logstash_path = ENV["LOGSTASH_PATH"] || "../../logstash"
|
6
|
+
use_logstash_source = ENV["LOGSTASH_SOURCE"] && ENV["LOGSTASH_SOURCE"].to_s == "1"
|
7
|
+
|
8
|
+
if Dir.exist?(logstash_path) && use_logstash_source
|
9
|
+
gem 'logstash-core', :path => "#{logstash_path}/logstash-core"
|
10
|
+
gem 'logstash-core-plugin-api', :path => "#{logstash_path}/logstash-core-plugin-api"
|
11
|
+
end
|
data/docs/index.asciidoc
ADDED
@@ -0,0 +1,279 @@
|
|
1
|
+
:plugin: rabbitmq
|
2
|
+
:type: output
|
3
|
+
|
4
|
+
///////////////////////////////////////////
|
5
|
+
START - GENERATED VARIABLES, DO NOT EDIT!
|
6
|
+
///////////////////////////////////////////
|
7
|
+
:version: %VERSION%
|
8
|
+
:release_date: %RELEASE_DATE%
|
9
|
+
:changelog_url: %CHANGELOG_URL%
|
10
|
+
:include_path: ../../../../logstash/docs/include
|
11
|
+
///////////////////////////////////////////
|
12
|
+
END - GENERATED VARIABLES, DO NOT EDIT!
|
13
|
+
///////////////////////////////////////////
|
14
|
+
|
15
|
+
[id="plugins-{type}-{plugin}"]
|
16
|
+
|
17
|
+
=== Rabbitmq output plugin
|
18
|
+
|
19
|
+
include::{include_path}/plugin_header.asciidoc[]
|
20
|
+
|
21
|
+
==== Description
|
22
|
+
|
23
|
+
Push events to a RabbitMQ exchange. Requires RabbitMQ 2.x
|
24
|
+
or later version (3.x is recommended).
|
25
|
+
|
26
|
+
Relevant links:
|
27
|
+
|
28
|
+
* http://www.rabbitmq.com/[RabbitMQ]
|
29
|
+
* http://rubymarchhare.info[March Hare]
|
30
|
+
|
31
|
+
[id="plugins-{type}s-{plugin}-options"]
|
32
|
+
==== Rabbitmq Output Configuration Options
|
33
|
+
|
34
|
+
This plugin supports the following configuration options plus the <<plugins-{type}s-{plugin}-common-options>> described later.
|
35
|
+
|
36
|
+
[cols="<,<,<",options="header",]
|
37
|
+
|=======================================================================
|
38
|
+
|Setting |Input type|Required
|
39
|
+
| <<plugins-{type}s-{plugin}-arguments>> |<<array,array>>|No
|
40
|
+
| <<plugins-{type}s-{plugin}-automatic_recovery>> |<<boolean,boolean>>|No
|
41
|
+
| <<plugins-{type}s-{plugin}-connect_retry_interval>> |<<number,number>>|No
|
42
|
+
| <<plugins-{type}s-{plugin}-connection_timeout>> |<<number,number>>|No
|
43
|
+
| <<plugins-{type}s-{plugin}-durable>> |<<boolean,boolean>>|No
|
44
|
+
| <<plugins-{type}s-{plugin}-exchange>> |<<string,string>>|Yes
|
45
|
+
| <<plugins-{type}s-{plugin}-exchange_type>> |<<string,string>>, one of `["fanout", "direct", "topic", "x-consistent-hash", "x-modulus-hash"]`|Yes
|
46
|
+
| <<plugins-{type}s-{plugin}-heartbeat>> |<<number,number>>|No
|
47
|
+
| <<plugins-{type}s-{plugin}-host>> |<<string,string>>|Yes
|
48
|
+
| <<plugins-{type}s-{plugin}-key>> |<<string,string>>|No
|
49
|
+
| <<plugins-{type}s-{plugin}-passive>> |<<boolean,boolean>>|No
|
50
|
+
| <<plugins-{type}s-{plugin}-password>> |<<password,password>>|No
|
51
|
+
| <<plugins-{type}s-{plugin}-persistent>> |<<boolean,boolean>>|No
|
52
|
+
| <<plugins-{type}s-{plugin}-port>> |<<number,number>>|No
|
53
|
+
| <<plugins-{type}s-{plugin}-ssl>> |<<boolean,boolean>>|No
|
54
|
+
| <<plugins-{type}s-{plugin}-ssl_certificate_password>> |<<string,string>>|No
|
55
|
+
| <<plugins-{type}s-{plugin}-ssl_certificate_path>> |a valid filesystem path|No
|
56
|
+
| <<plugins-{type}s-{plugin}-ssl_version>> |<<string,string>>|No
|
57
|
+
| <<plugins-{type}s-{plugin}-user>> |<<string,string>>|No
|
58
|
+
| <<plugins-{type}s-{plugin}-vhost>> |<<string,string>>|No
|
59
|
+
|=======================================================================
|
60
|
+
|
61
|
+
Also see <<plugins-{type}s-{plugin}-common-options>> for a list of options supported by all
|
62
|
+
output plugins.
|
63
|
+
|
64
|
+
|
65
|
+
|
66
|
+
[id="plugins-{type}s-{plugin}-arguments"]
|
67
|
+
===== `arguments`
|
68
|
+
|
69
|
+
* Value type is <<array,array>>
|
70
|
+
* Default value is `{}`
|
71
|
+
|
72
|
+
Extra queue arguments as an array.
|
73
|
+
To make a RabbitMQ queue mirrored, use: `{"x-ha-policy" => "all"}`
|
74
|
+
|
75
|
+
[id="plugins-{type}s-{plugin}-automatic_recovery"]
|
76
|
+
===== `automatic_recovery`
|
77
|
+
|
78
|
+
* Value type is <<boolean,boolean>>
|
79
|
+
* Default value is `true`
|
80
|
+
|
81
|
+
Set this to automatically recover from a broken connection. You almost certainly don't want to override this!!!
|
82
|
+
|
83
|
+
[id="plugins-{type}s-{plugin}-connect_retry_interval"]
|
84
|
+
===== `connect_retry_interval`
|
85
|
+
|
86
|
+
* Value type is <<number,number>>
|
87
|
+
* Default value is `1`
|
88
|
+
|
89
|
+
Time in seconds to wait before retrying a connection
|
90
|
+
|
91
|
+
[id="plugins-{type}s-{plugin}-connection_timeout"]
|
92
|
+
===== `connection_timeout`
|
93
|
+
|
94
|
+
* Value type is <<number,number>>
|
95
|
+
* There is no default value for this setting.
|
96
|
+
|
97
|
+
The default connection timeout in milliseconds. If not specified the timeout is infinite.
|
98
|
+
|
99
|
+
[id="plugins-{type}s-{plugin}-debug"]
|
100
|
+
===== `debug` (DEPRECATED)
|
101
|
+
|
102
|
+
* DEPRECATED WARNING: This configuration item is deprecated and may not be available in future versions.
|
103
|
+
* Value type is <<boolean,boolean>>
|
104
|
+
* Default value is `false`
|
105
|
+
|
106
|
+
Enable or disable logging
|
107
|
+
|
108
|
+
[id="plugins-{type}s-{plugin}-durable"]
|
109
|
+
===== `durable`
|
110
|
+
|
111
|
+
* Value type is <<boolean,boolean>>
|
112
|
+
* Default value is `true`
|
113
|
+
|
114
|
+
Is this exchange durable? (aka; Should it survive a broker restart?)
|
115
|
+
|
116
|
+
[id="plugins-{type}s-{plugin}-exchange"]
|
117
|
+
===== `exchange`
|
118
|
+
|
119
|
+
* This is a required setting.
|
120
|
+
* Value type is <<string,string>>
|
121
|
+
* There is no default value for this setting.
|
122
|
+
|
123
|
+
The name of the exchange
|
124
|
+
|
125
|
+
[id="plugins-{type}s-{plugin}-exchange_type"]
|
126
|
+
===== `exchange_type`
|
127
|
+
|
128
|
+
* This is a required setting.
|
129
|
+
* Value can be any of: `fanout`, `direct`, `topic`, `x-consistent-hash`, `x-modulus-hash`
|
130
|
+
* There is no default value for this setting.
|
131
|
+
|
132
|
+
The exchange type (fanout, topic, direct)
|
133
|
+
|
134
|
+
[id="plugins-{type}s-{plugin}-heartbeat"]
|
135
|
+
===== `heartbeat`
|
136
|
+
|
137
|
+
* Value type is <<number,number>>
|
138
|
+
* There is no default value for this setting.
|
139
|
+
|
140
|
+
Heartbeat delay in seconds. If unspecified no heartbeats will be sent
|
141
|
+
|
142
|
+
[id="plugins-{type}s-{plugin}-host"]
|
143
|
+
===== `host`
|
144
|
+
|
145
|
+
* This is a required setting.
|
146
|
+
* Value type is <<string,string>>
|
147
|
+
* There is no default value for this setting.
|
148
|
+
|
149
|
+
Common functionality for the rabbitmq input/output
|
150
|
+
RabbitMQ server address(es)
|
151
|
+
host can either be a single host, or a list of hosts
|
152
|
+
i.e.
|
153
|
+
host => "localhost"
|
154
|
+
or
|
155
|
+
host => ["host01", "host02]
|
156
|
+
|
157
|
+
if multiple hosts are provided on the initial connection and any subsequent
|
158
|
+
recovery attempts of the hosts is chosen at random and connected to.
|
159
|
+
Note that only one host connection is active at a time.
|
160
|
+
|
161
|
+
[id="plugins-{type}s-{plugin}-key"]
|
162
|
+
===== `key`
|
163
|
+
|
164
|
+
* Value type is <<string,string>>
|
165
|
+
* Default value is `"logstash"`
|
166
|
+
|
167
|
+
The default codec for this plugin is JSON. You can override this to suit your particular needs however.
|
168
|
+
Key to route to by default. Defaults to 'logstash'
|
169
|
+
|
170
|
+
* Routing keys are ignored on fanout exchanges.
|
171
|
+
|
172
|
+
[id="plugins-{type}s-{plugin}-passive"]
|
173
|
+
===== `passive`
|
174
|
+
|
175
|
+
* Value type is <<boolean,boolean>>
|
176
|
+
* Default value is `false`
|
177
|
+
|
178
|
+
Passive queue creation? Useful for checking queue existance without modifying server state
|
179
|
+
|
180
|
+
[id="plugins-{type}s-{plugin}-password"]
|
181
|
+
===== `password`
|
182
|
+
|
183
|
+
* Value type is <<password,password>>
|
184
|
+
* Default value is `"guest"`
|
185
|
+
|
186
|
+
RabbitMQ password
|
187
|
+
|
188
|
+
[id="plugins-{type}s-{plugin}-persistent"]
|
189
|
+
===== `persistent`
|
190
|
+
|
191
|
+
* Value type is <<boolean,boolean>>
|
192
|
+
* Default value is `true`
|
193
|
+
|
194
|
+
Should RabbitMQ persist messages to disk?
|
195
|
+
|
196
|
+
[id="plugins-{type}s-{plugin}-port"]
|
197
|
+
===== `port`
|
198
|
+
|
199
|
+
* Value type is <<number,number>>
|
200
|
+
* Default value is `5672`
|
201
|
+
|
202
|
+
RabbitMQ port to connect on
|
203
|
+
|
204
|
+
[id="plugins-{type}s-{plugin}-ssl"]
|
205
|
+
===== `ssl`
|
206
|
+
|
207
|
+
* Value type is <<boolean,boolean>>
|
208
|
+
* There is no default value for this setting.
|
209
|
+
|
210
|
+
Enable or disable SSL.
|
211
|
+
Note that by default remote certificate verification is off.
|
212
|
+
Specify ssl_certificate_path and ssl_certificate_password if you need
|
213
|
+
certificate verification
|
214
|
+
|
215
|
+
[id="plugins-{type}s-{plugin}-ssl_certificate_password"]
|
216
|
+
===== `ssl_certificate_password`
|
217
|
+
|
218
|
+
* Value type is <<string,string>>
|
219
|
+
* There is no default value for this setting.
|
220
|
+
|
221
|
+
Password for the encrypted PKCS12 (.p12) certificate file specified in ssl_certificate_path
|
222
|
+
|
223
|
+
[id="plugins-{type}s-{plugin}-ssl_certificate_path"]
|
224
|
+
===== `ssl_certificate_path`
|
225
|
+
|
226
|
+
* Value type is <<path,path>>
|
227
|
+
* There is no default value for this setting.
|
228
|
+
|
229
|
+
Path to an SSL certificate in PKCS12 (.p12) format used for verifying the remote host
|
230
|
+
|
231
|
+
[id="plugins-{type}s-{plugin}-ssl_version"]
|
232
|
+
===== `ssl_version`
|
233
|
+
|
234
|
+
* Value type is <<string,string>>
|
235
|
+
* Default value is `"TLSv1.2"`
|
236
|
+
|
237
|
+
Version of the SSL protocol to use.
|
238
|
+
|
239
|
+
[id="plugins-{type}s-{plugin}-tls_certificate_password"]
|
240
|
+
===== `tls_certificate_password` (DEPRECATED)
|
241
|
+
|
242
|
+
* DEPRECATED WARNING: This configuration item is deprecated and may not be available in future versions.
|
243
|
+
* Value type is <<string,string>>
|
244
|
+
* There is no default value for this setting.
|
245
|
+
|
246
|
+
TLS certificate password
|
247
|
+
|
248
|
+
[id="plugins-{type}s-{plugin}-tls_certificate_path"]
|
249
|
+
===== `tls_certificate_path` (DEPRECATED)
|
250
|
+
|
251
|
+
* DEPRECATED WARNING: This configuration item is deprecated and may not be available in future versions.
|
252
|
+
* Value type is <<path,path>>
|
253
|
+
* There is no default value for this setting.
|
254
|
+
|
255
|
+
TLS certifcate path
|
256
|
+
|
257
|
+
[id="plugins-{type}s-{plugin}-user"]
|
258
|
+
===== `user`
|
259
|
+
|
260
|
+
* Value type is <<string,string>>
|
261
|
+
* Default value is `"guest"`
|
262
|
+
|
263
|
+
RabbitMQ username
|
264
|
+
|
265
|
+
[id="plugins-{type}s-{plugin}-vhost"]
|
266
|
+
===== `vhost`
|
267
|
+
|
268
|
+
* Value type is <<string,string>>
|
269
|
+
* Default value is `"/"`
|
270
|
+
|
271
|
+
The vhost (virtual host) to use. If you don't know what this
|
272
|
+
is, leave the default. With the exception of the default
|
273
|
+
vhost ("/"), names of vhosts should not begin with a forward
|
274
|
+
slash.
|
275
|
+
|
276
|
+
|
277
|
+
|
278
|
+
[id="plugins-{type}s-{plugin}-common-options"]
|
279
|
+
include::{include_path}/{type}.asciidoc[]
|
@@ -1,6 +1,8 @@
|
|
1
1
|
# encoding: UTF-8
|
2
2
|
require "logstash/pipeline"
|
3
3
|
require "logstash/plugin_mixins/rabbitmq_connection"
|
4
|
+
java_import java.util.concurrent.TimeoutException
|
5
|
+
java_import com.rabbitmq.client.AlreadyClosedException
|
4
6
|
|
5
7
|
# Push events to a RabbitMQ exchange. Requires RabbitMQ 2.x
|
6
8
|
# or later version (3.x is recommended).
|
@@ -52,7 +54,7 @@ module LogStash
|
|
52
54
|
def publish(event, message)
|
53
55
|
raise ArgumentError, "No exchange set in HareInfo!!!" unless @hare_info.exchange
|
54
56
|
@hare_info.exchange.publish(message, :routing_key => event.sprintf(@key), :properties => { :persistent => @persistent })
|
55
|
-
rescue MarchHare::Exception, IOError,
|
57
|
+
rescue MarchHare::Exception, IOError, AlreadyClosedException, TimeoutException => e
|
56
58
|
@logger.error("Error while publishing. Will retry.",
|
57
59
|
:message => e.message,
|
58
60
|
:exception => e.class,
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Gem::Specification.new do |s|
|
2
2
|
s.name = 'logstash-output-rabbitmq'
|
3
|
-
s.version = '4.0.
|
3
|
+
s.version = '4.0.8'
|
4
4
|
s.licenses = ['Apache License (2.0)']
|
5
5
|
s.summary = "Push events to a RabbitMQ exchange"
|
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"
|
@@ -10,7 +10,7 @@ Gem::Specification.new do |s|
|
|
10
10
|
s.require_paths = ["lib"]
|
11
11
|
|
12
12
|
# Files
|
13
|
-
s.files = Dir[
|
13
|
+
s.files = Dir["lib/**/*","spec/**/*","*.gemspec","*.md","CONTRIBUTORS","Gemfile","LICENSE","NOTICE.TXT", "vendor/jar-dependencies/**/*.jar", "vendor/jar-dependencies/**/*.rb", "VERSION", "docs/**/*"]
|
14
14
|
|
15
15
|
# Tests
|
16
16
|
s.test_files = s.files.grep(%r{^(test|spec|features)/})
|
@@ -2,6 +2,7 @@
|
|
2
2
|
require "logstash/devutils/rspec/spec_helper"
|
3
3
|
require "logstash/pipeline"
|
4
4
|
require "logstash/outputs/rabbitmq"
|
5
|
+
java_import java.util.concurrent.TimeoutException
|
5
6
|
|
6
7
|
describe LogStash::Outputs::RabbitMQ do
|
7
8
|
let(:klass) { LogStash::Outputs::RabbitMQ }
|
@@ -24,6 +25,25 @@ describe LogStash::Outputs::RabbitMQ do
|
|
24
25
|
let(:instance) { klass.new(rabbitmq_settings) }
|
25
26
|
let(:hare_info) { instance.instance_variable_get(:@hare_info) }
|
26
27
|
|
28
|
+
shared_examples 'recovers from exception gracefully' do
|
29
|
+
it 'should execute publish twice due to a retry' do
|
30
|
+
expect(exchange).to have_received(:publish).twice
|
31
|
+
end
|
32
|
+
|
33
|
+
it 'should sleep for the retry' do
|
34
|
+
expect(instance).to have_received(:sleep_for_retry).once
|
35
|
+
end
|
36
|
+
|
37
|
+
it 'should send the correct message (twice)' do
|
38
|
+
expect(exchange).to have_received(:publish).with(encoded_event, anything).twice
|
39
|
+
end
|
40
|
+
|
41
|
+
it 'should send the correct metadata (twice)' do
|
42
|
+
expected_metadata = {:routing_key => event.sprintf(key), :properties => {:persistent => persistent }}
|
43
|
+
expect(exchange).to have_received(:publish).with(anything, expected_metadata).twice
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
27
47
|
it "should register as an output plugin" do
|
28
48
|
expect(LogStash::Plugin.lookup("output", "rabbitmq")).to eql(LogStash::Outputs::RabbitMQ)
|
29
49
|
end
|
@@ -76,35 +96,34 @@ describe LogStash::Outputs::RabbitMQ do
|
|
76
96
|
end
|
77
97
|
end
|
78
98
|
|
79
|
-
context
|
99
|
+
context 'when an exception is encountered' do
|
100
|
+
let(:exception) { nil }
|
101
|
+
|
80
102
|
before do
|
81
103
|
i = 0
|
82
104
|
allow(instance).to receive(:connect!)
|
83
105
|
allow(instance).to receive(:sleep_for_retry)
|
84
106
|
allow(exchange).to receive(:publish).with(any_args) do
|
85
107
|
i += 1
|
86
|
-
raise
|
108
|
+
raise exception if i == 1
|
87
109
|
end
|
88
110
|
|
89
111
|
instance.send(:publish, event, encoded_event)
|
90
112
|
end
|
91
113
|
|
92
|
-
|
93
|
-
|
114
|
+
context 'when it is a MarchHare exception' do
|
115
|
+
let(:exception) { MarchHare::Exception }
|
116
|
+
it_behaves_like 'recovers from exception gracefully'
|
94
117
|
end
|
95
118
|
|
96
|
-
|
97
|
-
|
119
|
+
context 'when it is a MarchHare::ChannelAlreadyClosed' do
|
120
|
+
let(:exception) { MarchHare::ChannelAlreadyClosed }
|
121
|
+
it_behaves_like 'recovers from exception gracefully'
|
98
122
|
end
|
99
123
|
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
it "should send the correct metadata (twice)" do
|
105
|
-
expected_metadata = {:routing_key => event.sprintf(key), :properties => {:persistent => persistent }}
|
106
|
-
|
107
|
-
expect(exchange).to have_received(:publish).with(anything, expected_metadata).twice
|
124
|
+
context 'when it is a TimeoutException' do
|
125
|
+
let(:exception) { TimeoutException.new }
|
126
|
+
it_behaves_like 'recovers from exception gracefully'
|
108
127
|
end
|
109
128
|
end
|
110
129
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: logstash-output-rabbitmq
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 4.0.
|
4
|
+
version: 4.0.8
|
5
5
|
platform: java
|
6
6
|
authors:
|
7
7
|
- Elastic
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-
|
11
|
+
date: 2017-06-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
requirement: !ruby/object:Gem::Requirement
|
@@ -104,6 +104,7 @@ files:
|
|
104
104
|
- LICENSE
|
105
105
|
- NOTICE.TXT
|
106
106
|
- README.md
|
107
|
+
- docs/index.asciidoc
|
107
108
|
- lib/logstash/outputs/rabbitmq.rb
|
108
109
|
- logstash-output-rabbitmq.gemspec
|
109
110
|
- spec/outputs/rabbitmq_spec.rb
|