logstash-output-influxdb 3.0.0 → 3.1.2
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/CHANGELOG.md +14 -0
- data/CONTRIBUTORS +1 -0
- data/README.md +5 -1
- data/lib/logstash/outputs/influxdb.rb +15 -10
- data/logstash-output-influxdb.gemspec +2 -2
- data/spec/outputs/influxdb_spec.rb +153 -2
- metadata +20 -26
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 98758c0e7ae9f464d3f3bedbd7e806852068de37
|
4
|
+
data.tar.gz: 3cd70751da808e61018de4bd7bf939bbd610f01c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8c4b6d62bdd19c0599d48d60b9bc449cf735e28928e334ac33173d849c1cfeb1c119b377cd4d0e36b8b25324747053a6928d3e044d76c65c7995f949dc997cad
|
7
|
+
data.tar.gz: 9b8dda87b34515887acb82ae0c9ffe59d6428d8b55036a35fb49ee6f618a8f01c65618fffbcd60b3794d99a2025977e63e74d5f561bc446cec4b121697a5cf3a
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,17 @@
|
|
1
|
+
# 3.1.2
|
2
|
+
- Depend on logstash-core-plugin-api instead of logstash-core, removing the need to mass update plugins on major releases of logstash
|
3
|
+
# 3.1.1
|
4
|
+
- New dependency requirements for logstash-core for the 5.0 release
|
5
|
+
## 3.1.0
|
6
|
+
- New option to enable SSL/TLS encrypted communication to InfluxDB
|
7
|
+
- DB parameter now supports sprintf formatting
|
8
|
+
|
9
|
+
## 3.0.0
|
10
|
+
- Update to work with influxdb 0.9
|
11
|
+
- breaking change, renaming 'series' to 'measurement'
|
12
|
+
- breaking change for values of time_precision
|
13
|
+
- Special characters now properly escaped in tag key/value, field key, measurement
|
14
|
+
|
1
15
|
## 2.0.0
|
2
16
|
- Plugins were updated to follow the new shutdown semantic, this mainly allows Logstash to instruct input plugins to terminate gracefully,
|
3
17
|
instead of using Thread.raise on the plugins' threads. Ref: https://github.com/elastic/logstash/pull/3895
|
data/CONTRIBUTORS
CHANGED
@@ -6,6 +6,7 @@ Contributors:
|
|
6
6
|
* Kurt Hurtado (kurtado)
|
7
7
|
* Pier-Hugues Pellerin (ph)
|
8
8
|
* Richard Pijnenburg (electrical)
|
9
|
+
* Michael Laws (mikelaws)
|
9
10
|
|
10
11
|
Note: If you've sent us patches, bug reports, or otherwise contributed to
|
11
12
|
Logstash, and you aren't on the list above and want to be, please let us know
|
data/README.md
CHANGED
@@ -1,3 +1,7 @@
|
|
1
|
+
# Note
|
2
|
+
**This plugin needs maintainers -- please comment on this issue https://github.com/logstash-plugins/logstash-output-influxdb/issues/34 if you would like to help!**
|
3
|
+
|
4
|
+
|
1
5
|
# Logstash Plugin
|
2
6
|
|
3
7
|
[ file.
|
93
|
+
For more information about contributing, see the [CONTRIBUTING](https://github.com/elastic/logstash/blob/master/CONTRIBUTING.md) file.
|
@@ -19,7 +19,7 @@ class LogStash::Outputs::InfluxDB < LogStash::Outputs::Base
|
|
19
19
|
|
20
20
|
config_name "influxdb"
|
21
21
|
|
22
|
-
# The database to write
|
22
|
+
# The database to write - supports sprintf formatting
|
23
23
|
config :db, :validate => :string, :default => "statistics"
|
24
24
|
|
25
25
|
# The retention policy to use
|
@@ -37,6 +37,9 @@ class LogStash::Outputs::InfluxDB < LogStash::Outputs::Base
|
|
37
37
|
# The password for the user who access to the named database
|
38
38
|
config :password, :validate => :password, :default => nil
|
39
39
|
|
40
|
+
# Enable SSL/TLS secured communication to InfluxDB
|
41
|
+
config :ssl, :validate => :boolean, :default => false
|
42
|
+
|
40
43
|
# Measurement name - supports sprintf formatting
|
41
44
|
config :measurement, :validate => :string, :default => "logstash"
|
42
45
|
|
@@ -113,10 +116,7 @@ class LogStash::Outputs::InfluxDB < LogStash::Outputs::Base
|
|
113
116
|
|
114
117
|
@client = Manticore::Client.new
|
115
118
|
@queue = []
|
116
|
-
|
117
|
-
@query_params = "db=#{@db}&rp=#{@retention_policy}&precision=#{@time_precision}&u=#{@user}&p=#{@password.value}"
|
118
|
-
@base_url = "http://#{@host}:#{@port}/write"
|
119
|
-
@url = "#{@base_url}?#{@query_params}"
|
119
|
+
@protocol = @ssl ? "https" : "http"
|
120
120
|
|
121
121
|
buffer_initialize(
|
122
122
|
:max_items => @flush_size,
|
@@ -162,18 +162,23 @@ class LogStash::Outputs::InfluxDB < LogStash::Outputs::Base
|
|
162
162
|
}
|
163
163
|
event_hash["tags"] = tags unless tags.empty?
|
164
164
|
|
165
|
-
buffer_receive(event_hash)
|
165
|
+
buffer_receive(event_hash, event.sprintf(@db))
|
166
166
|
end # def receive
|
167
167
|
|
168
168
|
|
169
|
-
def flush(events, teardown = false)
|
170
|
-
@logger.debug? and @logger.debug("Flushing #{events.size} events to #{
|
171
|
-
post(events_to_request_body(events))
|
169
|
+
def flush(events, database, teardown = false)
|
170
|
+
@logger.debug? and @logger.debug("Flushing #{events.size} events to #{database} - Teardown? #{teardown}")
|
171
|
+
post(events_to_request_body(events), database)
|
172
172
|
end # def flush
|
173
173
|
|
174
174
|
|
175
|
-
def post(body)
|
175
|
+
def post(body, database, proto = @protocol)
|
176
176
|
begin
|
177
|
+
@query_params = "db=#{database}&rp=#{@retention_policy}&precision=#{@time_precision}&u=#{@user}&p=#{@password.value}"
|
178
|
+
@base_url = "#{proto}://#{@host}:#{@port}/write"
|
179
|
+
@url = "#{@base_url}?#{@query_params}"
|
180
|
+
|
181
|
+
@logger.debug? and @logger.debug("POSTing to #{@url}")
|
177
182
|
@logger.debug? and @logger.debug("Post body: #{body}")
|
178
183
|
response = @client.post!(@url, :body => body)
|
179
184
|
|
@@ -1,7 +1,7 @@
|
|
1
1
|
Gem::Specification.new do |s|
|
2
2
|
|
3
3
|
s.name = 'logstash-output-influxdb'
|
4
|
-
s.version = '3.
|
4
|
+
s.version = '3.1.2'
|
5
5
|
s.licenses = ['Apache License (2.0)']
|
6
6
|
s.summary = "This output lets you output Metrics to InfluxDB"
|
7
7
|
s.description = "This gem is a logstash plugin required to be installed on top of the Logstash core pipeline using $LS_HOME/bin/plugin install gemname. This gem is not a stand-alone program"
|
@@ -20,7 +20,7 @@ Gem::Specification.new do |s|
|
|
20
20
|
s.metadata = { "logstash_plugin" => "true", "logstash_group" => "output" }
|
21
21
|
|
22
22
|
# Gem dependencies
|
23
|
-
s.add_runtime_dependency "logstash-core", "
|
23
|
+
s.add_runtime_dependency "logstash-core-plugin-api", "~> 1.0"
|
24
24
|
|
25
25
|
s.add_runtime_dependency 'stud'
|
26
26
|
s.add_runtime_dependency 'manticore'
|
@@ -26,7 +26,8 @@ describe LogStash::Outputs::InfluxDB do
|
|
26
26
|
|
27
27
|
before do
|
28
28
|
subject.register
|
29
|
-
|
29
|
+
# Added db name parameter to post - M.Laws
|
30
|
+
allow(subject).to receive(:post).with(result, "statistics")
|
30
31
|
|
31
32
|
2.times do
|
32
33
|
subject.receive(LogStash::Event.new("foo" => "1", "bar" => "2", "time" => "3", "type" => "generator"))
|
@@ -39,7 +40,7 @@ describe LogStash::Outputs::InfluxDB do
|
|
39
40
|
let(:result) { "logstash foo=\"1\",bar=\"2\" 3\nlogstash foo=\"1\",bar=\"2\" 3" }
|
40
41
|
|
41
42
|
it "should receive 2 events, flush and call post with 2 items json array" do
|
42
|
-
expect(subject).to have_received(:post).with(result)
|
43
|
+
expect(subject).to have_received(:post).with(result, "statistics")
|
43
44
|
end
|
44
45
|
|
45
46
|
end
|
@@ -354,4 +355,154 @@ describe LogStash::Outputs::InfluxDB do
|
|
354
355
|
pipeline.run
|
355
356
|
end
|
356
357
|
end
|
358
|
+
|
359
|
+
# Test issue #32 - Add support for HTTPS via configuration
|
360
|
+
# --------------------------------------------------------
|
361
|
+
# A simple test to verify that setting the ssl configuration option works
|
362
|
+
# similar to other Logstash output plugins (specifically the Elasticsearch
|
363
|
+
# output plugin).
|
364
|
+
context "setting the ssl configuration option to true" do
|
365
|
+
let(:config) do <<-CONFIG
|
366
|
+
input {
|
367
|
+
generator {
|
368
|
+
message => "foo=1 bar=2 baz=3 time=4"
|
369
|
+
count => 1
|
370
|
+
type => "generator"
|
371
|
+
}
|
372
|
+
}
|
373
|
+
|
374
|
+
filter {
|
375
|
+
kv { }
|
376
|
+
}
|
377
|
+
|
378
|
+
output {
|
379
|
+
influxdb {
|
380
|
+
host => "localhost"
|
381
|
+
ssl => true
|
382
|
+
measurement => "barfoo"
|
383
|
+
allow_time_override => true
|
384
|
+
use_event_fields_for_data_points => true
|
385
|
+
exclude_fields => [ "@version", "@timestamp", "sequence",
|
386
|
+
"message", "type", "host" ]
|
387
|
+
}
|
388
|
+
}
|
389
|
+
CONFIG
|
390
|
+
end
|
391
|
+
|
392
|
+
let(:expected_url) { 'https://localhost:8086/write?db=statistics&rp=default&precision=ms&u=&p=' }
|
393
|
+
let(:expected_body) { 'barfoo foo="1",bar="2",baz="3" 4' }
|
394
|
+
|
395
|
+
it "should POST to an https URL" do
|
396
|
+
expect_any_instance_of(Manticore::Client).to receive(:post!).with(expected_url, body: expected_body)
|
397
|
+
pipeline.run
|
398
|
+
end
|
399
|
+
end
|
400
|
+
|
401
|
+
# Test issue #31 - Run "db" parameter through event.sprintf() to support...
|
402
|
+
# -------------------------------------------------------------------------
|
403
|
+
# This test is intended to verify writes to multiple measurements in A SINGLE
|
404
|
+
# DATABASE continue to work *after* implementing #31. Also verifies that
|
405
|
+
# sprintf formatting is supported in the measurement name.
|
406
|
+
context "receiving 3 points between 2 measurements in 1 database" do
|
407
|
+
let(:config) do <<-CONFIG
|
408
|
+
input {
|
409
|
+
generator {
|
410
|
+
lines => [
|
411
|
+
"foo=1 bar=2 baz=m1 time=1",
|
412
|
+
"foo=3 bar=4 baz=m2 time=2",
|
413
|
+
"foo=5 bar=6 baz=m2 time=3"
|
414
|
+
]
|
415
|
+
count => 1
|
416
|
+
type => "generator"
|
417
|
+
}
|
418
|
+
}
|
419
|
+
|
420
|
+
filter {
|
421
|
+
kv { }
|
422
|
+
}
|
423
|
+
|
424
|
+
output {
|
425
|
+
influxdb {
|
426
|
+
host => "localhost"
|
427
|
+
db => "barfoo"
|
428
|
+
measurement => "%{baz}"
|
429
|
+
allow_time_override => true
|
430
|
+
use_event_fields_for_data_points => true
|
431
|
+
exclude_fields => [ "@version", "@timestamp", "sequence",
|
432
|
+
"message", "type", "host" ]
|
433
|
+
}
|
434
|
+
}
|
435
|
+
CONFIG
|
436
|
+
end
|
437
|
+
|
438
|
+
let(:expected_url) { 'http://localhost:8086/write?db=barfoo&rp=default&precision=ms&u=&p=' }
|
439
|
+
let(:expected_body) { "m1 foo=\"1\",bar=\"2\",baz=\"m1\" 1\nm2 foo=\"3\",bar=\"4\",baz=\"m2\" 2\nm2 foo=\"5\",bar=\"6\",baz=\"m2\" 3" }
|
440
|
+
|
441
|
+
it "should result in a single POST (one per database)" do
|
442
|
+
expect_any_instance_of(Manticore::Client).to receive(:post!).once
|
443
|
+
pipeline.run
|
444
|
+
end
|
445
|
+
|
446
|
+
it "should POST in bulk format" do
|
447
|
+
expect_any_instance_of(Manticore::Client).to receive(:post!).with(expected_url, body: expected_body)
|
448
|
+
pipeline.run
|
449
|
+
end
|
450
|
+
end
|
451
|
+
|
452
|
+
# Test issue #31 - Run "db" parameter through event.sprintf() to support...
|
453
|
+
# -------------------------------------------------------------------------
|
454
|
+
# This test is intended to verify writes to multiple measurements in MULTIPLE
|
455
|
+
# DATABASES result in separate bulk POSTs (one for each database in the
|
456
|
+
# buffer), and the correct measurements being written to the correct db.
|
457
|
+
# Also verifies that sprintf formatting is correctly supported in the
|
458
|
+
# database name.
|
459
|
+
context "receiving 4 points between 2 measurements in 2 databases" do
|
460
|
+
let(:config) do <<-CONFIG
|
461
|
+
input {
|
462
|
+
generator {
|
463
|
+
lines => [
|
464
|
+
"foo=1 bar=db1 baz=m1 time=1",
|
465
|
+
"foo=2 bar=db1 baz=m2 time=2",
|
466
|
+
"foo=3 bar=db2 baz=m1 time=3",
|
467
|
+
"foo=4 bar=db2 baz=m2 time=4"
|
468
|
+
]
|
469
|
+
count => 1
|
470
|
+
type => "generator"
|
471
|
+
}
|
472
|
+
}
|
473
|
+
|
474
|
+
filter {
|
475
|
+
kv { }
|
476
|
+
}
|
477
|
+
|
478
|
+
output {
|
479
|
+
influxdb {
|
480
|
+
host => "localhost"
|
481
|
+
db => "%{bar}"
|
482
|
+
measurement => "%{baz}"
|
483
|
+
allow_time_override => true
|
484
|
+
use_event_fields_for_data_points => true
|
485
|
+
exclude_fields => [ "@version", "@timestamp", "sequence",
|
486
|
+
"message", "type", "host" ]
|
487
|
+
}
|
488
|
+
}
|
489
|
+
CONFIG
|
490
|
+
end
|
491
|
+
|
492
|
+
let(:expected_url_db1) { 'http://localhost:8086/write?db=db1&rp=default&precision=ms&u=&p=' }
|
493
|
+
let(:expected_url_db2) { 'http://localhost:8086/write?db=db2&rp=default&precision=ms&u=&p=' }
|
494
|
+
let(:expected_body_db1) { "m1 foo=\"1\",bar=\"db1\",baz=\"m1\" 1\nm2 foo=\"2\",bar=\"db1\",baz=\"m2\" 2" }
|
495
|
+
let(:expected_body_db2) { "m1 foo=\"3\",bar=\"db2\",baz=\"m1\" 3\nm2 foo=\"4\",bar=\"db2\",baz=\"m2\" 4" }
|
496
|
+
|
497
|
+
it "should result in two POSTs (one per database)" do
|
498
|
+
expect_any_instance_of(Manticore::Client).to receive(:post!).twice
|
499
|
+
pipeline.run
|
500
|
+
end
|
501
|
+
|
502
|
+
it "should post in bulk format" do
|
503
|
+
expect_any_instance_of(Manticore::Client).to receive(:post!).with(expected_url_db1, body: expected_body_db1)
|
504
|
+
expect_any_instance_of(Manticore::Client).to receive(:post!).with(expected_url_db2, body: expected_body_db2)
|
505
|
+
pipeline.run
|
506
|
+
end
|
507
|
+
end
|
357
508
|
end
|
metadata
CHANGED
@@ -1,39 +1,33 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: logstash-output-influxdb
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.
|
4
|
+
version: 3.1.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Elastic
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-03-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
requirement: !ruby/object:Gem::Requirement
|
15
15
|
requirements:
|
16
|
-
- -
|
16
|
+
- - "~>"
|
17
17
|
- !ruby/object:Gem::Version
|
18
|
-
version:
|
19
|
-
|
20
|
-
- !ruby/object:Gem::Version
|
21
|
-
version: 3.0.0
|
22
|
-
name: logstash-core
|
18
|
+
version: '1.0'
|
19
|
+
name: logstash-core-plugin-api
|
23
20
|
prerelease: false
|
24
21
|
type: :runtime
|
25
22
|
version_requirements: !ruby/object:Gem::Requirement
|
26
23
|
requirements:
|
27
|
-
- -
|
28
|
-
- !ruby/object:Gem::Version
|
29
|
-
version: 2.0.0.beta2
|
30
|
-
- - <
|
24
|
+
- - "~>"
|
31
25
|
- !ruby/object:Gem::Version
|
32
|
-
version:
|
26
|
+
version: '1.0'
|
33
27
|
- !ruby/object:Gem::Dependency
|
34
28
|
requirement: !ruby/object:Gem::Requirement
|
35
29
|
requirements:
|
36
|
-
- -
|
30
|
+
- - ">="
|
37
31
|
- !ruby/object:Gem::Version
|
38
32
|
version: '0'
|
39
33
|
name: stud
|
@@ -41,13 +35,13 @@ dependencies:
|
|
41
35
|
type: :runtime
|
42
36
|
version_requirements: !ruby/object:Gem::Requirement
|
43
37
|
requirements:
|
44
|
-
- -
|
38
|
+
- - ">="
|
45
39
|
- !ruby/object:Gem::Version
|
46
40
|
version: '0'
|
47
41
|
- !ruby/object:Gem::Dependency
|
48
42
|
requirement: !ruby/object:Gem::Requirement
|
49
43
|
requirements:
|
50
|
-
- -
|
44
|
+
- - ">="
|
51
45
|
- !ruby/object:Gem::Version
|
52
46
|
version: '0'
|
53
47
|
name: manticore
|
@@ -55,13 +49,13 @@ dependencies:
|
|
55
49
|
type: :runtime
|
56
50
|
version_requirements: !ruby/object:Gem::Requirement
|
57
51
|
requirements:
|
58
|
-
- -
|
52
|
+
- - ">="
|
59
53
|
- !ruby/object:Gem::Version
|
60
54
|
version: '0'
|
61
55
|
- !ruby/object:Gem::Dependency
|
62
56
|
requirement: !ruby/object:Gem::Requirement
|
63
57
|
requirements:
|
64
|
-
- -
|
58
|
+
- - ">="
|
65
59
|
- !ruby/object:Gem::Version
|
66
60
|
version: '0'
|
67
61
|
name: logstash-devutils
|
@@ -69,13 +63,13 @@ dependencies:
|
|
69
63
|
type: :development
|
70
64
|
version_requirements: !ruby/object:Gem::Requirement
|
71
65
|
requirements:
|
72
|
-
- -
|
66
|
+
- - ">="
|
73
67
|
- !ruby/object:Gem::Version
|
74
68
|
version: '0'
|
75
69
|
- !ruby/object:Gem::Dependency
|
76
70
|
requirement: !ruby/object:Gem::Requirement
|
77
71
|
requirements:
|
78
|
-
- -
|
72
|
+
- - ">="
|
79
73
|
- !ruby/object:Gem::Version
|
80
74
|
version: '0'
|
81
75
|
name: logstash-input-generator
|
@@ -83,13 +77,13 @@ dependencies:
|
|
83
77
|
type: :development
|
84
78
|
version_requirements: !ruby/object:Gem::Requirement
|
85
79
|
requirements:
|
86
|
-
- -
|
80
|
+
- - ">="
|
87
81
|
- !ruby/object:Gem::Version
|
88
82
|
version: '0'
|
89
83
|
- !ruby/object:Gem::Dependency
|
90
84
|
requirement: !ruby/object:Gem::Requirement
|
91
85
|
requirements:
|
92
|
-
- -
|
86
|
+
- - ">="
|
93
87
|
- !ruby/object:Gem::Version
|
94
88
|
version: '0'
|
95
89
|
name: logstash-filter-kv
|
@@ -97,7 +91,7 @@ dependencies:
|
|
97
91
|
type: :development
|
98
92
|
version_requirements: !ruby/object:Gem::Requirement
|
99
93
|
requirements:
|
100
|
-
- -
|
94
|
+
- - ">="
|
101
95
|
- !ruby/object:Gem::Version
|
102
96
|
version: '0'
|
103
97
|
description: This gem is a logstash plugin required to be installed on top of the Logstash core pipeline using $LS_HOME/bin/plugin install gemname. This gem is not a stand-alone program
|
@@ -127,17 +121,17 @@ require_paths:
|
|
127
121
|
- lib
|
128
122
|
required_ruby_version: !ruby/object:Gem::Requirement
|
129
123
|
requirements:
|
130
|
-
- -
|
124
|
+
- - ">="
|
131
125
|
- !ruby/object:Gem::Version
|
132
126
|
version: '0'
|
133
127
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
134
128
|
requirements:
|
135
|
-
- -
|
129
|
+
- - ">="
|
136
130
|
- !ruby/object:Gem::Version
|
137
131
|
version: '0'
|
138
132
|
requirements: []
|
139
133
|
rubyforge_project:
|
140
|
-
rubygems_version: 2.4.
|
134
|
+
rubygems_version: 2.4.8
|
141
135
|
signing_key:
|
142
136
|
specification_version: 4
|
143
137
|
summary: This output lets you output Metrics to InfluxDB
|