fluent-plugin-prometheus 1.2.1 → 1.3.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 +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
|