fluent-plugin-prometheus 0.1.3 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
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
-