logstash-output-prometheus 0.1.0 → 0.1.1

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 667c219d828f53a1a0a6e3949297b5a7ff9f2561db62332f7d286c4abde345fd
4
- data.tar.gz: 6043bc410be20a1dcc2722134d2cccb15d4d2715488e881098e52741bae63057
3
+ metadata.gz: 130b0b24895276dd2b0d14e77d3b7004e5eaeff456db0f03ad0f45d47e53e4ab
4
+ data.tar.gz: 0a1439290b627946dd5c97d01d8f34c5da5f8fd04a8d9d1c9897d8bc81c4236e
5
5
  SHA512:
6
- metadata.gz: a842d58037e05203313574bd5c9180c4a4255918a9f4321c0618728b8d38c34154d16d093db7c9bbf2475fd45cc49b2b44881a5df0adb4c38eaeb78aaa1bc4d3
7
- data.tar.gz: ad7f9ddc0b44a250223994af94cc285ce5d8ec191707c9f29b08b908fc3b7d4da57a84ab422fcdc92053a24a1b03dd60ff4ef58e6b6a9178e72faaf35bae715a
6
+ metadata.gz: 13f01ed0e935e21ee717c82eada2b3e530c7b50b9758b9edb8d988c42869ed71b012f86e75cf1bd20dec2dd0ed644392f7ea543d2ca12addd849cb2542488d86
7
+ data.tar.gz: 93d3d9ff2fd1ce56e33230513561beacb81b7b731964cea352c84178f6348e6f7340382f82a702f712cacec3a00641f8722f2f5c8167ad77c3f066c7995b12cb
data/CHANGELOG.md CHANGED
@@ -1,2 +1,4 @@
1
+ ## 0.1.1
2
+ - Fixed bug with unique labels under the same metric name for timers
1
3
  ## 0.1.0
2
4
  - Plugin created with the logstash plugin generator
data/CONTRIBUTORS CHANGED
@@ -2,7 +2,7 @@ The following is a list of people who have contributed ideas, code, bug
2
2
  reports, or in general have helped logstash along its way.
3
3
 
4
4
  Contributors:
5
- * Spencer Malone - smalone@rsglab.com
5
+ * Spencer Malone
6
6
 
7
7
  Note: If you've sent us patches, bug reports, or otherwise contributed to
8
8
  Logstash, and you aren't on the list above and want to be, please let us know
@@ -77,13 +77,15 @@ class LogStash::Outputs::Prometheus < LogStash::Outputs::Base
77
77
  @timer.each do |metric_name, val|
78
78
  val = setup_registry_labels(val)
79
79
 
80
- if val['type'] == "histogram"
81
- metric = prom_server.histogram(metric_name.to_sym, docstring: val['description'], labels: val['labels'].keys, buckets: val['buckets'])
82
- else
83
- metric = prom_server.summary(metric_name.to_sym, labels: val['labels'].keys, docstring: val['description'])
84
- end
80
+ if $metrics[port.to_s + metric_name].nil?
81
+ if val['type'] == "histogram"
82
+ metric = prom_server.histogram(metric_name.to_sym, docstring: val['description'], labels: val['labels'].keys, buckets: val['buckets'])
83
+ else
84
+ metric = prom_server.summary(metric_name.to_sym, labels: val['labels'].keys, docstring: val['description'])
85
+ end
85
86
 
86
- $metrics[port.to_s + metric_name] = metric
87
+ $metrics[port.to_s + metric_name] = metric
88
+ end
87
89
  end
88
90
  end # def register
89
91
 
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = 'logstash-output-prometheus'
3
- s.version = '0.1.0'
3
+ s.version = '0.1.1'
4
4
  s.licenses = ['Apache-2.0']
5
5
  s.summary = 'Output logstash data to a prometheus exporter'
6
6
  # s.homepage = 'Nada'
@@ -8,13 +8,21 @@ require 'net/http'
8
8
  describe LogStash::Outputs::Prometheus do
9
9
  let(:port) { rand(2000..10000) }
10
10
  let(:output) { LogStash::Outputs::Prometheus.new(properties) }
11
+ let(:secondary_output) {
12
+ if secondary_properties.nil?
13
+ LogStash::Outputs::Prometheus.new(properties)
14
+ else
15
+ LogStash::Outputs::Prometheus.new(secondary_properties)
16
+ end
17
+ }
11
18
 
12
19
  before do
13
20
  output.register
21
+ secondary_output.register
14
22
  end
15
23
 
16
- after do
17
- output.kill_thread
24
+ let(:secondary_properties) do
25
+ nil
18
26
  end
19
27
 
20
28
  let(:event) do
@@ -23,6 +31,16 @@ describe LogStash::Outputs::Prometheus do
23
31
  )
24
32
  end
25
33
 
34
+ let(:secondary_event) do
35
+ if secondary_properties.nil?
36
+ LogStash::Event.new(
37
+ secondary_properties
38
+ )
39
+ else
40
+ event
41
+ end
42
+ end
43
+
26
44
  shared_examples "it should expose data" do |*values|
27
45
  it "should expose data" do
28
46
  output.receive(event)
@@ -50,6 +68,35 @@ describe LogStash::Outputs::Prometheus do
50
68
  end
51
69
  end
52
70
 
71
+ shared_examples "it should expose data from multiple outputs" do |*values|
72
+ it "should be able to handle unique labels under the same name" do
73
+ secondary_output.receive(secondary_event)
74
+
75
+ output.receive(event)
76
+
77
+ url = URI.parse("http://localhost:#{port}/metrics")
78
+ req = Net::HTTP::Get.new(url.to_s)
79
+
80
+ attempts = 0
81
+
82
+ begin
83
+ res = Net::HTTP.start(url.host, url.port) {|http|
84
+ http.request(req)
85
+ }
86
+ rescue
87
+ attempts++
88
+ sleep(0.1)
89
+ if attempts < 10
90
+ retry
91
+ end
92
+ end
93
+
94
+ values.each do |value|
95
+ expect(res.body).to include(value)
96
+ end
97
+ end
98
+ end
99
+
53
100
  describe "counter behavior" do
54
101
  let(:properties) {
55
102
  {
@@ -65,7 +112,23 @@ describe LogStash::Outputs::Prometheus do
65
112
  }
66
113
  }
67
114
 
115
+ let(:secondary_properties) {
116
+ {
117
+ "port" => port,
118
+ "increment" => {
119
+ "basic_counter" => {
120
+ "description" => "Test",
121
+ "labels" => {
122
+ "mylabel" => "boo"
123
+ }
124
+ }
125
+ }
126
+ }
127
+ }
128
+
68
129
  include_examples "it should expose data", 'basic_counter{mylabel="hi"} 1', "# TYPE basic_counter counter", "# HELP basic_counter Test"
130
+ include_examples "it should expose data from multiple outputs", 'basic_counter{mylabel="hi"} 1', 'basic_counter{mylabel="boo"} 1'
131
+
69
132
  end
70
133
 
71
134
  describe "gauge behavior" do
@@ -76,12 +139,32 @@ describe LogStash::Outputs::Prometheus do
76
139
  "increment" => {
77
140
  "basic_gauge" => {
78
141
  "description" => "Test1",
142
+ "labels" => {
143
+ "mylabel" => "hi"
144
+ },
79
145
  "type" => "gauge"
80
146
  }
81
147
  }
82
148
  }
83
149
  }
84
- include_examples "it should expose data", "basic_gauge 1.0", "# TYPE basic_gauge gauge", "# HELP basic_gauge Test1"
150
+
151
+ let(:secondary_properties) {
152
+ {
153
+ "port" => port,
154
+ "increment" => {
155
+ "basic_gauge" => {
156
+ "description" => "Test1",
157
+ "type" => "gauge",
158
+ "labels" => {
159
+ "mylabel" => "boo"
160
+ }
161
+ }
162
+ }
163
+ }
164
+ }
165
+
166
+ include_examples "it should expose data", 'basic_gauge{mylabel="hi"} 1.0', "# TYPE basic_gauge gauge", "# HELP basic_gauge Test1"
167
+ include_examples "it should expose data from multiple outputs", 'basic_gauge{mylabel="hi"} 1', 'basic_gauge{mylabel="boo"} 1'
85
168
  end
86
169
 
87
170
  describe "decrement" do
@@ -124,12 +207,32 @@ describe LogStash::Outputs::Prometheus do
124
207
  "huh" => {
125
208
  "description" => "noway",
126
209
  "type" => "summary",
127
- "value" => "11"
210
+ "value" => "11",
211
+ "labels" => {
212
+ "mylabel" => "hi"
213
+ }
128
214
  }
129
215
  }
130
216
  }
131
217
  }
132
- include_examples "it should expose data", "huh_sum 11.0", "huh_count 1.0", "# TYPE huh summary", "# HELP huh noway"
218
+
219
+ let(:secondary_properties) {
220
+ {
221
+ "port" => port,
222
+ "timer" => {
223
+ "huh" => {
224
+ "description" => "noway",
225
+ "type" => "summary",
226
+ "value" => "10",
227
+ "labels" => {
228
+ "mylabel" => "boo"
229
+ }
230
+ }
231
+ }
232
+ }
233
+ }
234
+ include_examples "it should expose data", 'huh_sum{mylabel="hi"} 11.0', 'huh_count{mylabel="hi"} 1.0', "# TYPE huh summary", "# HELP huh noway"
235
+ include_examples "it should expose data from multiple outputs", 'huh_sum{mylabel="hi"} 11.0', 'huh_sum{mylabel="boo"} 10.0'
133
236
  end
134
237
 
135
238
  describe "histogram behavior" do
@@ -142,12 +245,32 @@ describe LogStash::Outputs::Prometheus do
142
245
  "description" => "abe",
143
246
  "type" => "histogram",
144
247
  "buckets" => [1, 5, 10],
145
- "value" => "0"
248
+ "value" => "0",
249
+ "labels" => {
250
+ "mylabel" => "hi"
251
+ }
252
+ }
253
+ }
254
+ }
255
+ }
256
+ let(:secondary_properties) {
257
+ {
258
+ "port" => port,
259
+ "timer" => {
260
+ "history" => {
261
+ "description" => "abe",
262
+ "type" => "histogram",
263
+ "buckets" => [1, 5, 10],
264
+ "value" => "0",
265
+ "labels" => {
266
+ "mylabel" => "boo"
267
+ }
146
268
  }
147
269
  }
148
270
  }
149
271
  }
150
272
  include_examples "it should expose data", "# TYPE history histogram", "# HELP history abe"
273
+ include_examples "it should expose data from multiple outputs", 'history_sum{mylabel="hi"} 0.0', 'history_sum{mylabel="boo"} 0.0'
151
274
  end
152
275
 
153
276
  describe "sum and count" do
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: logstash-output-prometheus
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Spencer Malone
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-09-19 00:00:00.000000000 Z
11
+ date: 2019-10-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  requirement: !ruby/object:Gem::Requirement