fluent-plugin-prometheus 0.1.3 → 0.2.0

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
  SHA1:
3
- metadata.gz: 2697668d79174be33f93db6777808ba2e4b6e856
4
- data.tar.gz: 9a842e147273f306bd2b7d18fbf6f2ca35ba3de9
3
+ metadata.gz: 5dbca01329f7efc77c5fa44288e017857e3c5a3a
4
+ data.tar.gz: a5e6e68b51cd13af4ba048f070b69b92e831bf89
5
5
  SHA512:
6
- metadata.gz: f25473b6467b07dcc4e25ca95696abb22aa2c1bafaf44707ba07bae3ae5d0f3bf89c6cbe62dc57858630bfcab9e2bf85b13d3d7f0423e9ed8dbd504bca33ed1e
7
- data.tar.gz: 90a812f445c0b53189119ffe6e62d7eba8541528ace398c1caaebcf991c961ffa063ae440d338614559f436a0a619a9e1ac994f5270bcea0cfed74b3069398ed
6
+ metadata.gz: cb2b9a310bdb2f74a8bfd3f6fdde9379f75cefcb98a36c32083ddf97019a6bf0efccb7592d9c62af7fd4bdf55261407573e984775ee432f393d83612f25a8464
7
+ data.tar.gz: 6033c960888b9989fbebced596a949c9333595a9df6376a24fee8c91723c898dbe365693d62c9b179e86e08a04551a722b3c6c08626560aa3197656f34f144c8
data/README.md CHANGED
@@ -217,6 +217,30 @@ If key is empty, the metric values is treated as 1, so the counter increments by
217
217
  - `key`: key name of record for instrumentation (required)
218
218
  - `<labels>`: additional labels for this metric (optional). See [Labels](#Labels)
219
219
 
220
+ ### histogram type
221
+
222
+ ```
223
+ <metric>
224
+ name message_foo
225
+ type histogram
226
+ desc The histogram of foo in message.
227
+ key foo
228
+ buckets 0.1, 1, 5, 10
229
+ <labels>
230
+ tag ${tag}
231
+ host ${hostname}
232
+ foo bar
233
+ </labels>
234
+ </metric>
235
+ ```
236
+
237
+ - `name`: metric name (required)
238
+ - `type`: metric type (required)
239
+ - `desc`: description of metric (required)
240
+ - `key`: key name of record for instrumentation (required)
241
+ - `buckets`: buckets of record for instrumentation (optional)
242
+ - `<labels>`: additional labels for this metric (optional). See [Labels](#Labels)
243
+
220
244
  ## Labels
221
245
 
222
246
  See [Prometheus Data Model](http://prometheus.io/docs/concepts/data_model/) first.
@@ -280,7 +304,7 @@ In this case, `message_foo_counter` has `tag`, `hostname`, `key` and `data_type`
280
304
 
281
305
  ## Try plugin with nginx
282
306
 
283
- Checkout respotiroy and setup it.
307
+ Checkout repository and setup.
284
308
 
285
309
  ```
286
310
  $ git clone git://github.com/kazegusuri/fluent-plugin-prometheus
@@ -291,8 +315,8 @@ $ bundle install --path vendor/bundle
291
315
  Download pre-compiled prometheus binary and start it. It listens on 9090.
292
316
 
293
317
  ```
294
- $ wget https://github.com/prometheus/prometheus/releases/download/0.16.1/prometheus-0.16.1.linux-amd64.tar.gz -O - | tar zxf -
295
- $ ./prometheus-0.16.1.linux-amd64/prometheus -config.file=./misc/prometheus.yaml -storage.local.path=./prometheus/metrics
318
+ $ wget https://github.com/prometheus/prometheus/releases/download/v1.0.1/prometheus-1.0.1.linux-amd64.tar.gz -O - | tar zxf -
319
+ $ ./prometheus-1.0.1.linux-amd64/prometheus -config.file=./misc/prometheus.yaml -storage.local.path=./prometheus/metrics
296
320
  ```
297
321
 
298
322
  Install Nginx for sample metrics. It listens on 80 and 9999.
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |spec|
2
2
  spec.name = "fluent-plugin-prometheus"
3
- spec.version = "0.1.3"
3
+ spec.version = "0.2.0"
4
4
  spec.authors = ["Masahiro Sano"]
5
5
  spec.email = ["sabottenda@gmail.com"]
6
6
  spec.summary = %q{A fluent plugin that collects metrics and exposes for Prometheus.}
@@ -34,8 +34,10 @@ module Fluent
34
34
  metrics << Fluent::Prometheus::Gauge.new(element, registry, labels)
35
35
  when 'counter'
36
36
  metrics << Fluent::Prometheus::Counter.new(element, registry, labels)
37
+ when 'histogram'
38
+ metrics << Fluent::Prometheus::Histogram.new(element, registry, labels)
37
39
  else
38
- raise ConfigError, "type option must be 'counter', 'gauge' or 'summary'"
40
+ raise ConfigError, "type option must be 'counter', 'gauge', 'summary' or 'histogram'"
39
41
  end
40
42
  }
41
43
  metrics
@@ -46,7 +48,13 @@ module Fluent
46
48
  if defined?(Fluent::Filter) # for v0.12, built-in PlaceholderExpander
47
49
  begin
48
50
  require 'fluent/plugin/filter_record_transformer'
49
- return Fluent::RecordTransformerFilter::PlaceholderExpander.new(log: log)
51
+ if defined?(Fluent::Plugin::RecordTransformerFilter::PlaceholderExpander)
52
+ # for v0.14
53
+ return Fluent::Plugin::RecordTransformerFilter::PlaceholderExpander.new(log: log)
54
+ else
55
+ # for v0.12
56
+ return Fluent::RecordTransformerFilter::PlaceholderExpander.new(log: log)
57
+ end
50
58
  rescue LoadError => e
51
59
  raise ConfigError, "cannot find filter_record_transformer plugin: #{e.message}"
52
60
  end
@@ -188,7 +196,35 @@ module Fluent
188
196
 
189
197
  def instrument(record, expander, placeholders)
190
198
  if record[@key]
191
- @summary.add(labels(record, expander, placeholders), record[@key])
199
+ @summary.observe(labels(record, expander, placeholders), record[@key])
200
+ end
201
+ end
202
+ end
203
+
204
+ class Histogram < Metric
205
+ def initialize(element, registry, labels)
206
+ super
207
+ if @key.nil?
208
+ raise ConfigError, "histogram metric requires 'key' option"
209
+ end
210
+
211
+ begin
212
+ if element['buckets']
213
+ buckets = element['buckets'].split(/,/).map(&:strip).map do |e|
214
+ e[/\A\d+.\d+\Z/] ? e.to_f : e.to_i
215
+ end
216
+ @histogram = registry.histogram(element['name'].to_sym, element['desc'], {}, buckets)
217
+ else
218
+ @histogram = registry.histogram(element['name'].to_sym, element['desc'])
219
+ end
220
+ rescue ::Prometheus::Client::Registry::AlreadyRegisteredError
221
+ @histogram = Fluent::Prometheus::Metric.get(registry, element['name'].to_sym, :histogram, element['desc'])
222
+ end
223
+ end
224
+
225
+ def instrument(record, expander, placeholders)
226
+ if record[@key]
227
+ @histogram.observe(labels(record, expander, placeholders), record[@key])
192
228
  end
193
229
  end
194
230
  end
data/misc/prometheus.yaml CHANGED
@@ -2,7 +2,7 @@
2
2
  scrape_configs:
3
3
  - job_name: fluentd
4
4
  scrape_interval: 5s
5
- target_groups:
5
+ static_configs:
6
6
  - targets:
7
7
  - 'localhost:24231'
8
8
  metrics_path: /metrics
@@ -12,7 +12,7 @@ describe Fluent::PrometheusFilter do
12
12
  end
13
13
 
14
14
  describe '#run' do
15
- let(:message) { {"foo" => 100, "bar" => 100, "baz" => 100} }
15
+ let(:message) { {"foo" => 100, "bar" => 100, "baz" => 100, "qux" => 10} }
16
16
  let(:es) { driver.run { driver.emit(message, Time.now) }.filtered }
17
17
 
18
18
  context 'simple config' do
@@ -12,7 +12,7 @@ describe Fluent::PrometheusOutput do
12
12
  end
13
13
 
14
14
  describe '#run' do
15
- let(:message) { {"foo" => 100, "bar" => 100, "baz" => 100} }
15
+ let(:message) { {"foo" => 100, "bar" => 100, "baz" => 100, "qux" => 10} }
16
16
  let(:es) { driver.run { driver.emit(message, Time.now) } }
17
17
 
18
18
  context 'simple config' do
@@ -42,6 +42,16 @@ FULL_CONFIG = BASE_CONFIG + %[
42
42
  key foo3
43
43
  </labels>
44
44
  </metric>
45
+ <metric>
46
+ name full_qux
47
+ type histogram
48
+ desc Something qux.
49
+ key qux
50
+ buckets 0.1, 1, 5, 10
51
+ <labels>
52
+ key foo4
53
+ </labels>
54
+ </metric>
45
55
  <labels>
46
56
  test_key test_value
47
57
  </labels>
@@ -83,6 +93,7 @@ shared_context 'full_config' do
83
93
  let(:counter) { registry.get(:full_foo) }
84
94
  let(:gauge) { registry.get(:full_bar) }
85
95
  let(:summary) { registry.get(:full_baz) }
96
+ let(:histogram) { registry.get(:full_qux) }
86
97
  end
87
98
 
88
99
  shared_context 'placeholder_config' do
@@ -139,12 +150,14 @@ shared_examples_for 'output configuration' do
139
150
  end
140
151
  end
141
152
 
153
+ emit_count = 0
142
154
  shared_examples_for 'instruments record' do
143
155
  context 'full config' do
144
156
  include_context 'full_config'
145
157
 
146
158
  before :each do
147
159
  es
160
+ emit_count += 1
148
161
  end
149
162
 
150
163
  it 'adds all metrics' do
@@ -154,6 +167,7 @@ shared_examples_for 'instruments record' do
154
167
  expect(counter).to be_kind_of(::Prometheus::Client::Metric)
155
168
  expect(gauge).to be_kind_of(::Prometheus::Client::Metric)
156
169
  expect(summary).to be_kind_of(::Prometheus::Client::Metric)
170
+ expect(histogram).to be_kind_of(::Prometheus::Client::Metric)
157
171
  end
158
172
 
159
173
  it 'instruments counter metric' do
@@ -171,6 +185,12 @@ shared_examples_for 'instruments record' do
171
185
  expect(summary.get({test_key: 'test_value', key: 'foo3'})).to be_kind_of(Hash)
172
186
  expect(summary.get({test_key: 'test_value', key: 'foo3'})[0.99]).to eq(100)
173
187
  end
188
+
189
+ it 'instruments histogram metric' do
190
+ expect(histogram.type).to eq(:histogram)
191
+ expect(histogram.get({test_key: 'test_value', key: 'foo4'})).to be_kind_of(Hash)
192
+ expect(histogram.get({test_key: 'test_value', key: 'foo4'})[10]).to eq(emit_count)
193
+ end
174
194
  end
175
195
 
176
196
  context 'placeholder config' do
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fluent-plugin-prometheus
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.3
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Masahiro Sano
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-06-04 00:00:00.000000000 Z
11
+ date: 2016-08-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: fluentd
@@ -118,7 +118,6 @@ files:
118
118
  - lib/fluent/plugin/prometheus.rb
119
119
  - misc/fluentd_sample.conf
120
120
  - misc/nginx_proxy.conf
121
- - misc/prometheus-old-format.conf
122
121
  - misc/prometheus.yaml
123
122
  - spec/fluent/plugin/filter_prometheus_spec.rb
124
123
  - spec/fluent/plugin/out_prometheus_spec.rb
@@ -1,10 +0,0 @@
1
- # A job to scrape an endpoint of Fluentd running on localhost.
2
- job: {
3
- name: "fluentd"
4
- scrape_interval: "5s"
5
-
6
- target_group: {
7
- target: "http://localhost:24231/metrics"
8
- }
9
- }
10
-