logstash-output-graphite 0.1.1 → 0.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/logstash-output-graphite.gemspec +3 -1
- data/spec/outputs/graphite_spec.rb +91 -76
- data/spec/server.rb +39 -0
- data/spec/spec_helper.rb +3 -0
- metadata +39 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 43878fb6306207fac8b8dc188489cbabbe6ec7ff
|
4
|
+
data.tar.gz: f3a78ec1f7647830bf35e708853165f9a2c5719a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 829ddb59da8be6fc592b90d8b67856520adaeb214a61fe4af86b17a03f79325b4d3911522c71a2b94c15a385734008a0917b3bd6ee795e76f4fe447fce9a0ca5
|
7
|
+
data.tar.gz: 26ee32f6ec304f17622f646c72c05ef924acbaf3dff76dde7363267bff9df035f5c37cc670eb7fb5ab2f0948a04808f6bf0866a90ea5fb6172a0781bf228626a
|
@@ -1,7 +1,7 @@
|
|
1
1
|
Gem::Specification.new do |s|
|
2
2
|
|
3
3
|
s.name = 'logstash-output-graphite'
|
4
|
-
s.version = '0.1.
|
4
|
+
s.version = '0.1.2'
|
5
5
|
s.licenses = ['Apache License (2.0)']
|
6
6
|
s.summary = "This output allows you to pull metrics from your logs and ship them to Graphite"
|
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"
|
@@ -23,5 +23,7 @@ Gem::Specification.new do |s|
|
|
23
23
|
s.add_runtime_dependency 'logstash', '>= 1.4.0', '< 2.0.0'
|
24
24
|
|
25
25
|
s.add_development_dependency 'logstash-devutils'
|
26
|
+
s.add_development_dependency 'logstash-input-generator'
|
27
|
+
s.add_development_dependency 'logstash-filter-kv'
|
26
28
|
end
|
27
29
|
|
@@ -1,14 +1,10 @@
|
|
1
|
-
|
2
|
-
require "logstash/outputs/graphite"
|
3
|
-
require "mocha/api"
|
1
|
+
require_relative '../spec_helper'
|
4
2
|
|
5
|
-
describe LogStash::Outputs::Graphite
|
6
|
-
|
3
|
+
describe LogStash::Outputs::Graphite do
|
7
4
|
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
input {
|
5
|
+
let(:port) { 4939 }
|
6
|
+
let(:config) do <<-CONFIG
|
7
|
+
input {
|
12
8
|
generator {
|
13
9
|
message => "foo=fancy bar=42"
|
14
10
|
count => 1
|
@@ -27,36 +23,39 @@ describe LogStash::Outputs::Graphite, :socket => true do
|
|
27
23
|
metrics => [ "hurray.%{foo}", "%{bar}" ]
|
28
24
|
}
|
29
25
|
}
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
end
|
45
|
-
end
|
46
|
-
end
|
26
|
+
CONFIG
|
27
|
+
end
|
28
|
+
|
29
|
+
let(:pipeline) { LogStash::Pipeline.new(config) }
|
30
|
+
let(:server) { Mocks::Server.new(port) }
|
31
|
+
|
32
|
+
before do
|
33
|
+
server.start
|
34
|
+
pipeline.run
|
35
|
+
end
|
36
|
+
|
37
|
+
after do
|
38
|
+
server.stop
|
39
|
+
end
|
47
40
|
|
48
|
-
|
49
|
-
lines = queue.pop
|
41
|
+
context "with a default run" do
|
50
42
|
|
51
|
-
|
52
|
-
|
43
|
+
it "generate one element" do
|
44
|
+
expect(server.size).to eq(1)
|
53
45
|
end
|
46
|
+
|
47
|
+
it "include all metrics" do
|
48
|
+
lines = server.pop
|
49
|
+
expect(lines).to match(/^hurray.fancy 42.0 \d{10,}\n$/)
|
50
|
+
end
|
51
|
+
|
54
52
|
end
|
55
53
|
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
54
|
+
context "if fields_are_metrics => true" do
|
55
|
+
context "when metrics_format => ..." do
|
56
|
+
|
57
|
+
context "match one key" do
|
58
|
+
let(:config) do <<-CONFIG
|
60
59
|
input {
|
61
60
|
generator {
|
62
61
|
message => "foo=123"
|
@@ -72,7 +71,7 @@ describe LogStash::Outputs::Graphite, :socket => true do
|
|
72
71
|
output {
|
73
72
|
graphite {
|
74
73
|
host => "localhost"
|
75
|
-
port =>
|
74
|
+
port => #{port}
|
76
75
|
fields_are_metrics => true
|
77
76
|
include_metrics => ["foo"]
|
78
77
|
metrics_format => "foo.bar.sys.data.*"
|
@@ -80,17 +79,22 @@ describe LogStash::Outputs::Graphite, :socket => true do
|
|
80
79
|
}
|
81
80
|
}
|
82
81
|
CONFIG
|
82
|
+
end
|
83
|
+
|
84
|
+
it "generate one element" do
|
85
|
+
expect(server.size).to eq(1)
|
86
|
+
end
|
83
87
|
|
84
|
-
|
85
|
-
|
86
|
-
lines
|
87
|
-
insist { lines.size } == 1
|
88
|
-
insist { lines[0] } =~ /^foo.bar.sys.data.foo 123.0 \d{10,}\n$/
|
88
|
+
it "match the generated key" do
|
89
|
+
lines = server.pop
|
90
|
+
expect(lines).to match(/^foo.bar.sys.data.foo 123.0 \d{10,}\n$/)
|
89
91
|
end
|
92
|
+
|
90
93
|
end
|
91
94
|
|
92
|
-
|
93
|
-
|
95
|
+
context "match all keys" do
|
96
|
+
|
97
|
+
let(:config) do <<-CONFIG
|
94
98
|
input {
|
95
99
|
generator {
|
96
100
|
message => "foo=123 bar=42"
|
@@ -106,7 +110,7 @@ describe LogStash::Outputs::Graphite, :socket => true do
|
|
106
110
|
output {
|
107
111
|
graphite {
|
108
112
|
host => "localhost"
|
109
|
-
port =>
|
113
|
+
port => #{port}
|
110
114
|
fields_are_metrics => true
|
111
115
|
include_metrics => [".*"]
|
112
116
|
metrics_format => "foo.bar.sys.data.*"
|
@@ -114,19 +118,31 @@ describe LogStash::Outputs::Graphite, :socket => true do
|
|
114
118
|
}
|
115
119
|
}
|
116
120
|
CONFIG
|
121
|
+
end
|
122
|
+
|
123
|
+
let(:lines) do
|
124
|
+
dict = {}
|
125
|
+
while(!server.empty?)
|
126
|
+
line = server.pop
|
127
|
+
key = line.split(' ')[0]
|
128
|
+
dict[key] = line
|
129
|
+
end
|
130
|
+
dict
|
131
|
+
end
|
117
132
|
|
118
|
-
|
119
|
-
|
120
|
-
|
133
|
+
it "match the generated foo key" do
|
134
|
+
expect(lines['foo.bar.sys.data.foo']).to match(/^foo.bar.sys.data.foo 123.0 \d{10,}\n$/)
|
135
|
+
end
|
121
136
|
|
122
|
-
|
123
|
-
|
124
|
-
insist { lines }.any? { |l| l =~ /^foo.bar.sys.data.bar 42.0 \d{10,}\n$/ }
|
137
|
+
it "match the generated bar key" do
|
138
|
+
expect(lines['foo.bar.sys.data.bar']).to match(/^foo.bar.sys.data.bar 42.0 \d{10,}\n$/)
|
125
139
|
end
|
140
|
+
|
126
141
|
end
|
127
142
|
|
128
|
-
|
129
|
-
|
143
|
+
context "no match" do
|
144
|
+
|
145
|
+
let(:config) do <<-CONFIG
|
130
146
|
input {
|
131
147
|
generator {
|
132
148
|
message => "foo=123 bar=42"
|
@@ -142,7 +158,7 @@ describe LogStash::Outputs::Graphite, :socket => true do
|
|
142
158
|
output {
|
143
159
|
graphite {
|
144
160
|
host => "localhost"
|
145
|
-
port =>
|
161
|
+
port => #{port}
|
146
162
|
fields_are_metrics => true
|
147
163
|
include_metrics => ["notmatchinganything"]
|
148
164
|
metrics_format => "foo.bar.sys.data.*"
|
@@ -150,16 +166,16 @@ describe LogStash::Outputs::Graphite, :socket => true do
|
|
150
166
|
}
|
151
167
|
}
|
152
168
|
CONFIG
|
169
|
+
end
|
153
170
|
|
154
|
-
|
155
|
-
|
156
|
-
lines = @mock.readlines
|
157
|
-
insist { lines.size } == 0
|
171
|
+
it "generate no event" do
|
172
|
+
expect(server.empty?).to be_true
|
158
173
|
end
|
159
174
|
end
|
160
175
|
|
161
|
-
|
162
|
-
|
176
|
+
context "match a key with invalid metric_format" do
|
177
|
+
|
178
|
+
let(:config) do <<-CONFIG
|
163
179
|
input {
|
164
180
|
generator {
|
165
181
|
message => "foo=123"
|
@@ -175,7 +191,7 @@ describe LogStash::Outputs::Graphite, :socket => true do
|
|
175
191
|
output {
|
176
192
|
graphite {
|
177
193
|
host => "localhost"
|
178
|
-
port =>
|
194
|
+
port => #{port}
|
179
195
|
fields_are_metrics => true
|
180
196
|
include_metrics => ["foo"]
|
181
197
|
metrics_format => "invalidformat"
|
@@ -183,21 +199,21 @@ describe LogStash::Outputs::Graphite, :socket => true do
|
|
183
199
|
}
|
184
200
|
}
|
185
201
|
CONFIG
|
202
|
+
end
|
186
203
|
|
187
|
-
|
188
|
-
|
189
|
-
lines
|
190
|
-
insist { lines.size } == 1
|
191
|
-
insist { lines[0] } =~ /^foo 123.0 \d{10,}\n$/
|
204
|
+
it "match the foo key" do
|
205
|
+
lines = server.pop
|
206
|
+
expect(lines).to match(/^foo 123.0 \d{10,}\n$/)
|
192
207
|
end
|
193
208
|
end
|
194
209
|
end
|
195
210
|
end
|
196
211
|
|
197
|
-
|
198
|
-
|
199
|
-
|
200
|
-
|
212
|
+
context "fields are metrics = false" do
|
213
|
+
context "metrics_format not set" do
|
214
|
+
context "match one key with metrics list" do
|
215
|
+
|
216
|
+
let(:config) do <<-CONFIG
|
201
217
|
input {
|
202
218
|
generator {
|
203
219
|
message => "foo=123"
|
@@ -213,7 +229,7 @@ describe LogStash::Outputs::Graphite, :socket => true do
|
|
213
229
|
output {
|
214
230
|
graphite {
|
215
231
|
host => "localhost"
|
216
|
-
port =>
|
232
|
+
port => #{port}
|
217
233
|
fields_are_metrics => false
|
218
234
|
include_metrics => ["foo"]
|
219
235
|
metrics => [ "custom.foo", "%{foo}" ]
|
@@ -221,16 +237,15 @@ describe LogStash::Outputs::Graphite, :socket => true do
|
|
221
237
|
}
|
222
238
|
}
|
223
239
|
CONFIG
|
240
|
+
end
|
224
241
|
|
225
|
-
|
226
|
-
|
227
|
-
lines
|
228
|
-
|
229
|
-
insist { lines.size } == 1
|
230
|
-
insist { lines[0] } =~ /^custom.foo 123.0 \d{10,}\n$/
|
242
|
+
it "match the custom.foo key" do
|
243
|
+
lines = server.pop
|
244
|
+
expect(lines).to match(/^custom.foo 123.0 \d{10,}\n$/)
|
231
245
|
end
|
232
|
-
end
|
233
246
|
|
247
|
+
end
|
234
248
|
end
|
235
249
|
end
|
250
|
+
|
236
251
|
end
|
data/spec/server.rb
ADDED
@@ -0,0 +1,39 @@
|
|
1
|
+
module Mocks
|
2
|
+
class Server
|
3
|
+
|
4
|
+
def initialize(port)
|
5
|
+
@queue = Queue.new
|
6
|
+
@port = port
|
7
|
+
end
|
8
|
+
|
9
|
+
def start
|
10
|
+
@server = TCPServer.new("127.0.0.1", @port)
|
11
|
+
@queue.clear
|
12
|
+
Thread.new do
|
13
|
+
client = @server.accept
|
14
|
+
while true
|
15
|
+
line = client.readline
|
16
|
+
@queue << line
|
17
|
+
end
|
18
|
+
end
|
19
|
+
self
|
20
|
+
end
|
21
|
+
|
22
|
+
def size
|
23
|
+
@queue.length
|
24
|
+
end
|
25
|
+
|
26
|
+
def pop
|
27
|
+
@queue.pop
|
28
|
+
end
|
29
|
+
|
30
|
+
def stop
|
31
|
+
@server.close
|
32
|
+
end
|
33
|
+
|
34
|
+
def empty?
|
35
|
+
@queue.empty?
|
36
|
+
end
|
37
|
+
|
38
|
+
end
|
39
|
+
end
|
data/spec/spec_helper.rb
ADDED
metadata
CHANGED
@@ -1,16 +1,25 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: logstash-output-graphite
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Elasticsearch
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2015-01-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
|
+
name: logstash
|
15
|
+
version_requirements: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - '>='
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 1.4.0
|
20
|
+
- - <
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: 2.0.0
|
14
23
|
requirement: !ruby/object:Gem::Requirement
|
15
24
|
requirements:
|
16
25
|
- - '>='
|
@@ -19,31 +28,50 @@ dependencies:
|
|
19
28
|
- - <
|
20
29
|
- !ruby/object:Gem::Version
|
21
30
|
version: 2.0.0
|
22
|
-
name: logstash
|
23
31
|
prerelease: false
|
24
32
|
type: :runtime
|
33
|
+
- !ruby/object:Gem::Dependency
|
34
|
+
name: logstash-devutils
|
25
35
|
version_requirements: !ruby/object:Gem::Requirement
|
26
36
|
requirements:
|
27
37
|
- - '>='
|
28
38
|
- !ruby/object:Gem::Version
|
29
|
-
version:
|
30
|
-
|
39
|
+
version: '0'
|
40
|
+
requirement: !ruby/object:Gem::Requirement
|
41
|
+
requirements:
|
42
|
+
- - '>='
|
31
43
|
- !ruby/object:Gem::Version
|
32
|
-
version:
|
44
|
+
version: '0'
|
45
|
+
prerelease: false
|
46
|
+
type: :development
|
33
47
|
- !ruby/object:Gem::Dependency
|
48
|
+
name: logstash-input-generator
|
49
|
+
version_requirements: !ruby/object:Gem::Requirement
|
50
|
+
requirements:
|
51
|
+
- - '>='
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '0'
|
34
54
|
requirement: !ruby/object:Gem::Requirement
|
35
55
|
requirements:
|
36
56
|
- - '>='
|
37
57
|
- !ruby/object:Gem::Version
|
38
58
|
version: '0'
|
39
|
-
name: logstash-devutils
|
40
59
|
prerelease: false
|
41
60
|
type: :development
|
61
|
+
- !ruby/object:Gem::Dependency
|
62
|
+
name: logstash-filter-kv
|
42
63
|
version_requirements: !ruby/object:Gem::Requirement
|
43
64
|
requirements:
|
44
65
|
- - '>='
|
45
66
|
- !ruby/object:Gem::Version
|
46
67
|
version: '0'
|
68
|
+
requirement: !ruby/object:Gem::Requirement
|
69
|
+
requirements:
|
70
|
+
- - '>='
|
71
|
+
- !ruby/object:Gem::Version
|
72
|
+
version: '0'
|
73
|
+
prerelease: false
|
74
|
+
type: :development
|
47
75
|
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
|
48
76
|
email: info@elasticsearch.com
|
49
77
|
executables: []
|
@@ -57,6 +85,8 @@ files:
|
|
57
85
|
- lib/logstash/outputs/graphite.rb
|
58
86
|
- logstash-output-graphite.gemspec
|
59
87
|
- spec/outputs/graphite_spec.rb
|
88
|
+
- spec/server.rb
|
89
|
+
- spec/spec_helper.rb
|
60
90
|
homepage: http://www.elasticsearch.org/guide/en/logstash/current/index.html
|
61
91
|
licenses:
|
62
92
|
- Apache License (2.0)
|
@@ -85,3 +115,5 @@ specification_version: 4
|
|
85
115
|
summary: This output allows you to pull metrics from your logs and ship them to Graphite
|
86
116
|
test_files:
|
87
117
|
- spec/outputs/graphite_spec.rb
|
118
|
+
- spec/server.rb
|
119
|
+
- spec/spec_helper.rb
|