fluent-plugin-prometheus 1.2.1 → 1.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +8 -6
- data/fluent-plugin-prometheus.gemspec +1 -1
- data/lib/fluent/plugin/prometheus.rb +32 -7
- data/spec/fluent/plugin/shared.rb +26 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 274c9ef3f67ca084c8b46d6a24ca97ce8313d2ade4409426dc2bb664ec227f31
|
4
|
+
data.tar.gz: 1c3cc72e17e834cf5144315086856bc8a8394a1a893771f7521e0a0fd4adf73f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 791e3bf0e513d98d32f0bb8a0f936e305f373ae2706fd9ad6bd3cdd12eb9adcd288d811ea3bcc9eb06c50b7eb583ec5edda3fb52751f7def52252c1174780407
|
7
|
+
data.tar.gz: 2aa16a95bedb91f4f04bac51a8fe96ee540aefe13532429d12803f97f0537e9fd3c10bb54a37c8145f8a58fe0e06e7975d7e99e1a8addb686eb12311ab9951c5
|
data/README.md
CHANGED
@@ -42,8 +42,8 @@ See [sample configuration](./misc/fluentd_sample.conf), or try [tutorial](#try-p
|
|
42
42
|
|
43
43
|
### prometheus input plugin
|
44
44
|
|
45
|
-
You have to configure this plugin to expose metrics collected by other
|
46
|
-
This plugin provides a metrics HTTP endpoint to be scraped by a
|
45
|
+
You have to configure this plugin to expose metrics collected by other Prometheus plugins.
|
46
|
+
This plugin provides a metrics HTTP endpoint to be scraped by a Prometheus server on 24231/tcp(default).
|
47
47
|
|
48
48
|
With following configuration, you can access http://localhost:24231/metrics on a server where fluentd running.
|
49
49
|
|
@@ -56,7 +56,7 @@ With following configuration, you can access http://localhost:24231/metrics on a
|
|
56
56
|
More configuration parameters:
|
57
57
|
|
58
58
|
- `bind`: binding interface (default: '0.0.0.0')
|
59
|
-
- `port`: listen port (
|
59
|
+
- `port`: listen port (default: 24231)
|
60
60
|
- `metrics_path`: metrics HTTP endpoint (default: /metrics)
|
61
61
|
|
62
62
|
When using multiple workers, each worker binds to port + `fluent_worker_id`.
|
@@ -224,6 +224,8 @@ In output plugin style:
|
|
224
224
|
|
225
225
|
With above configuration, the plugin collects a metric named `message_foo_counter` from key `foo` of each records.
|
226
226
|
|
227
|
+
You can access nested keys in records via dot or bracket notation (https://docs.fluentd.org/v1.0/articles/api-plugin-helper-record_accessor#syntax), for example: `$.kubernetes.namespace`, `$['key1'][0]['key2']`. The record accessor is enable only if the value starts with `$.` or `$[`.
|
228
|
+
|
227
229
|
See Supported Metric Type and Labels for more configuration parameters.
|
228
230
|
|
229
231
|
## Supported Metric Types
|
@@ -350,12 +352,12 @@ Reserved placeholders are:
|
|
350
352
|
- `${hostname}`: hostname
|
351
353
|
- `${worker_id}`: fluent worker id
|
352
354
|
- `${tag}`: tag name
|
353
|
-
- only
|
355
|
+
- only available in Prometheus output/filter plugin
|
354
356
|
|
355
357
|
|
356
358
|
### top-level labels and labels inside metric
|
357
359
|
|
358
|
-
Prometheus output/filter plugin can have multiple metric section. Top-level labels section
|
360
|
+
Prometheus output/filter plugin can have multiple metric section. Top-level labels section specifies labels for all metrics. Labels section inside metric section specifies labels for the metric. Both are specified, labels are merged.
|
359
361
|
|
360
362
|
```
|
361
363
|
<filter message>
|
@@ -399,7 +401,7 @@ $ cd fluent-plugin-prometheus
|
|
399
401
|
$ bundle install --path vendor/bundle
|
400
402
|
```
|
401
403
|
|
402
|
-
Download pre-compiled
|
404
|
+
Download pre-compiled Prometheus binary and start it. It listens on 9090.
|
403
405
|
|
404
406
|
```
|
405
407
|
$ wget https://github.com/prometheus/prometheus/releases/download/v1.5.2/prometheus-1.5.2.linux-amd64.tar.gz -O - | tar zxf -
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Gem::Specification.new do |spec|
|
2
2
|
spec.name = "fluent-plugin-prometheus"
|
3
|
-
spec.version = "1.
|
3
|
+
spec.version = "1.3.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.}
|
@@ -36,6 +36,10 @@ module Fluent
|
|
36
36
|
conf.elements.select { |element|
|
37
37
|
element.name == 'metric'
|
38
38
|
}.each { |element|
|
39
|
+
if element.has_key?('key') && (element['key'].start_with?('$.') || element['key'].start_with?('$['))
|
40
|
+
value = element['key']
|
41
|
+
element['key'] = PluginHelper::RecordAccessor::Accessor.new(value)
|
42
|
+
end
|
39
43
|
case element['type']
|
40
44
|
when 'summary'
|
41
45
|
metrics << Fluent::Plugin::Prometheus::Summary.new(element, registry, labels)
|
@@ -147,8 +151,13 @@ module Fluent
|
|
147
151
|
end
|
148
152
|
|
149
153
|
def instrument(record, expander, placeholders)
|
150
|
-
if
|
151
|
-
|
154
|
+
if @key.is_a?(String)
|
155
|
+
value = record[@key]
|
156
|
+
else
|
157
|
+
value = @key.call(record)
|
158
|
+
end
|
159
|
+
if value
|
160
|
+
@gauge.set(labels(record, expander, placeholders), value)
|
152
161
|
end
|
153
162
|
end
|
154
163
|
end
|
@@ -165,7 +174,13 @@ module Fluent
|
|
165
174
|
|
166
175
|
def instrument(record, expander, placeholders)
|
167
176
|
# use record value of the key if key is specified, otherwise just increment
|
168
|
-
|
177
|
+
if @key.nil?
|
178
|
+
value = 1
|
179
|
+
elsif @key.is_a?(String)
|
180
|
+
value = record[@key]
|
181
|
+
else
|
182
|
+
value = @key.call(record)
|
183
|
+
end
|
169
184
|
|
170
185
|
# ignore if record value is nil
|
171
186
|
return if value.nil?
|
@@ -189,8 +204,13 @@ module Fluent
|
|
189
204
|
end
|
190
205
|
|
191
206
|
def instrument(record, expander, placeholders)
|
192
|
-
if
|
193
|
-
|
207
|
+
if @key.is_a?(String)
|
208
|
+
value = record[@key]
|
209
|
+
else
|
210
|
+
value = @key.call(record)
|
211
|
+
end
|
212
|
+
if value
|
213
|
+
@summary.observe(labels(record, expander, placeholders), value)
|
194
214
|
end
|
195
215
|
end
|
196
216
|
end
|
@@ -217,8 +237,13 @@ module Fluent
|
|
217
237
|
end
|
218
238
|
|
219
239
|
def instrument(record, expander, placeholders)
|
220
|
-
if
|
221
|
-
|
240
|
+
if @key.is_a?(String)
|
241
|
+
value = record[@key]
|
242
|
+
else
|
243
|
+
value = @key.call(record)
|
244
|
+
end
|
245
|
+
if value
|
246
|
+
@histogram.observe(labels(record, expander, placeholders), value)
|
222
247
|
end
|
223
248
|
end
|
224
249
|
end
|
@@ -52,6 +52,24 @@ FULL_CONFIG = BASE_CONFIG + %[
|
|
52
52
|
key foo4
|
53
53
|
</labels>
|
54
54
|
</metric>
|
55
|
+
<metric>
|
56
|
+
name full_accessor1
|
57
|
+
type summary
|
58
|
+
desc Something with accessor.
|
59
|
+
key $.foo
|
60
|
+
<labels>
|
61
|
+
key foo5
|
62
|
+
</labels>
|
63
|
+
</metric>
|
64
|
+
<metric>
|
65
|
+
name full_accessor2
|
66
|
+
type counter
|
67
|
+
desc Something with accessor.
|
68
|
+
key $.foo
|
69
|
+
<labels>
|
70
|
+
key foo6
|
71
|
+
</labels>
|
72
|
+
</metric>
|
55
73
|
<labels>
|
56
74
|
test_key test_value
|
57
75
|
</labels>
|
@@ -110,6 +128,8 @@ shared_context 'full_config' do
|
|
110
128
|
let(:gauge) { registry.get(:full_bar) }
|
111
129
|
let(:summary) { registry.get(:full_baz) }
|
112
130
|
let(:histogram) { registry.get(:full_qux) }
|
131
|
+
let(:summary_with_accessor) { registry.get(:full_accessor1) }
|
132
|
+
let(:counter_with_accessor) { registry.get(:full_accessor2) }
|
113
133
|
end
|
114
134
|
|
115
135
|
shared_context 'placeholder_config' do
|
@@ -192,15 +212,20 @@ shared_examples_for 'instruments record' do
|
|
192
212
|
expect(registry.metrics.map(&:name)).to include(:full_foo)
|
193
213
|
expect(registry.metrics.map(&:name)).to include(:full_bar)
|
194
214
|
expect(registry.metrics.map(&:name)).to include(:full_baz)
|
215
|
+
expect(registry.metrics.map(&:name)).to include(:full_accessor1)
|
216
|
+
expect(registry.metrics.map(&:name)).to include(:full_accessor2)
|
195
217
|
expect(counter).to be_kind_of(::Prometheus::Client::Metric)
|
196
218
|
expect(gauge).to be_kind_of(::Prometheus::Client::Metric)
|
197
219
|
expect(summary).to be_kind_of(::Prometheus::Client::Metric)
|
220
|
+
expect(summary_with_accessor).to be_kind_of(::Prometheus::Client::Metric)
|
221
|
+
expect(counter_with_accessor).to be_kind_of(::Prometheus::Client::Metric)
|
198
222
|
expect(histogram).to be_kind_of(::Prometheus::Client::Metric)
|
199
223
|
end
|
200
224
|
|
201
225
|
it 'instruments counter metric' do
|
202
226
|
expect(counter.type).to eq(:counter)
|
203
227
|
expect(counter.get({test_key: 'test_value', key: 'foo1'})).to be_kind_of(Numeric)
|
228
|
+
expect(counter_with_accessor.get({test_key: 'test_value', key: 'foo6'})).to be_kind_of(Numeric)
|
204
229
|
end
|
205
230
|
|
206
231
|
it 'instruments gauge metric' do
|
@@ -212,6 +237,7 @@ shared_examples_for 'instruments record' do
|
|
212
237
|
expect(summary.type).to eq(:summary)
|
213
238
|
expect(summary.get({test_key: 'test_value', key: 'foo3'})).to be_kind_of(Hash)
|
214
239
|
expect(summary.get({test_key: 'test_value', key: 'foo3'})[0.99]).to eq(100)
|
240
|
+
expect(summary_with_accessor.get({test_key: 'test_value', key: 'foo5'})[0.99]).to eq(100)
|
215
241
|
end
|
216
242
|
|
217
243
|
it 'instruments histogram metric' 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: 1.
|
4
|
+
version: 1.3.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:
|
11
|
+
date: 2019-01-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: fluentd
|