fluent-plugin-prometheus 1.2.0 → 1.2.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/README.md +4 -2
- data/fluent-plugin-prometheus.gemspec +1 -1
- data/lib/fluent/plugin/in_prometheus_monitor.rb +3 -1
- data/lib/fluent/plugin/prometheus.rb +12 -3
- data/spec/fluent/plugin/in_prometheus_monitor_spec.rb +25 -0
- data/spec/fluent/plugin/shared.rb +40 -0
- metadata +5 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 64ed448a556ffbc5fda04297363a53663dc2acff960d358bb24b07e227b99b3a
|
4
|
+
data.tar.gz: 2ad3f13b35c60b0fad6664831e9d4edcacfcf963a3a819c658aad761bc64af2f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: cb6b43bf8e18dea2ff324a1a75738b51513c652ca3afdea8bf941f5d56e0b44028d19726daef5ee704070597e243e0c5262db1edaf6027adb3f1a2f6baf3c76a
|
7
|
+
data.tar.gz: 0dd07480d6a1a4db6345e14727f932b1c2ce09ce9683f01f4fe4c3e008c608742ef47a68aca27371f182dc1b8cd995420bef3a4d666abe6ff0ec6ed218513916
|
data/README.md
CHANGED
@@ -339,9 +339,11 @@ You can add labels with static value or dynamic value from records. In `promethe
|
|
339
339
|
|
340
340
|
All labels sections has same format. Each lines have key/value for label.
|
341
341
|
|
342
|
-
You can
|
342
|
+
You can access nested fields 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 `$[`. Other values are handled as raw string as is and may be expanded by placeholder described later.
|
343
343
|
|
344
|
-
You can
|
344
|
+
You can use placeholder for label values. The placeholders will be expanded from reserved values and records.
|
345
|
+
If you specify `${hostname}`, it will be expanded by value of a hostname where fluentd runs.
|
346
|
+
The placeholder for records is deprecated. Use record accessor syntax instead.
|
345
347
|
|
346
348
|
Reserved placeholders are:
|
347
349
|
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Gem::Specification.new do |spec|
|
2
2
|
spec.name = "fluent-plugin-prometheus"
|
3
|
-
spec.version = "1.2.
|
3
|
+
spec.version = "1.2.1"
|
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.}
|
@@ -27,7 +27,9 @@ module Fluent::Plugin
|
|
27
27
|
placeholders = expander.prepare_placeholders({'hostname' => hostname, 'worker_id' => fluentd_worker_id})
|
28
28
|
@base_labels = Fluent::Plugin::Prometheus.parse_labels_elements(conf)
|
29
29
|
@base_labels.each do |key, value|
|
30
|
-
|
30
|
+
if value.is_a?(String)
|
31
|
+
@base_labels[key] = expander.expand(value, placeholders)
|
32
|
+
end
|
31
33
|
end
|
32
34
|
|
33
35
|
if defined?(Fluent::Plugin) && defined?(Fluent::Plugin::MonitorAgentInput)
|
@@ -18,7 +18,13 @@ module Fluent
|
|
18
18
|
labels.first.each do |key, value|
|
19
19
|
labels.first.has_key?(key)
|
20
20
|
|
21
|
-
|
21
|
+
# use RecordAccessor only for $. and $[ syntax
|
22
|
+
# otherwise use the value as is or expand the value by RecordTransformer for ${} syntax
|
23
|
+
if value.start_with?('$.') || value.start_with?('$[')
|
24
|
+
base_labels[key.to_sym] = PluginHelper::RecordAccessor::Accessor.new(value)
|
25
|
+
else
|
26
|
+
base_labels[key.to_sym] = value
|
27
|
+
end
|
22
28
|
end
|
23
29
|
end
|
24
30
|
|
@@ -102,8 +108,11 @@ module Fluent
|
|
102
108
|
def labels(record, expander, placeholders)
|
103
109
|
label = {}
|
104
110
|
@base_labels.each do |k, v|
|
105
|
-
|
106
|
-
|
111
|
+
if v.is_a?(String)
|
112
|
+
label[k] = expander.expand(v, placeholders)
|
113
|
+
else
|
114
|
+
label[k] = v.call(record)
|
115
|
+
end
|
107
116
|
end
|
108
117
|
label
|
109
118
|
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'fluent/plugin/in_prometheus_monitor'
|
3
|
+
require 'fluent/test/driver/input'
|
4
|
+
|
5
|
+
describe Fluent::Plugin::PrometheusMonitorInput do
|
6
|
+
MONITOR_CONFIG = %[
|
7
|
+
@type prometheus_monitor
|
8
|
+
<labels>
|
9
|
+
host ${hostname}
|
10
|
+
foo bar
|
11
|
+
no_effect1 $.foo.bar
|
12
|
+
no_effect2 $[0][1]
|
13
|
+
</labels>
|
14
|
+
]
|
15
|
+
|
16
|
+
let(:config) { MONITOR_CONFIG }
|
17
|
+
let(:port) { 24231 }
|
18
|
+
let(:driver) { Fluent::Test::Driver::Input.new(Fluent::Plugin::PrometheusMonitorInput).configure(config) }
|
19
|
+
|
20
|
+
describe '#configure' do
|
21
|
+
it 'does not raise error' do
|
22
|
+
expect{driver}.not_to raise_error
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -73,6 +73,18 @@ PLACEHOLDER_CONFIG = BASE_CONFIG + %[
|
|
73
73
|
</labels>
|
74
74
|
]
|
75
75
|
|
76
|
+
ACCESSOR_CONFIG = BASE_CONFIG + %[
|
77
|
+
<metric>
|
78
|
+
name accessor_foo
|
79
|
+
type counter
|
80
|
+
desc Something foo.
|
81
|
+
key foo
|
82
|
+
<labels>
|
83
|
+
foo $.foo
|
84
|
+
</labels>
|
85
|
+
</metric>
|
86
|
+
]
|
87
|
+
|
76
88
|
COUNTER_WITHOUT_KEY_CONFIG = BASE_CONFIG + %[
|
77
89
|
<metric>
|
78
90
|
name without_key_foo
|
@@ -107,6 +119,13 @@ shared_context 'placeholder_config' do
|
|
107
119
|
let(:counter) { registry.get(name) }
|
108
120
|
end
|
109
121
|
|
122
|
+
shared_context 'accessor_config' do
|
123
|
+
let(:orig_name) { 'accessor_foo' }
|
124
|
+
let(:config) { ACCESSOR_CONFIG.gsub(orig_name, name.to_s) }
|
125
|
+
let(:name) { "#{orig_name}_#{gen_time_suffix}".to_sym }
|
126
|
+
let(:counter) { registry.get(name) }
|
127
|
+
end
|
128
|
+
|
110
129
|
shared_context 'counter_without_key_config' do
|
111
130
|
let(:orig_name) { 'without_key_foo' }
|
112
131
|
let(:config) { COUNTER_WITHOUT_KEY_CONFIG.gsub(orig_name, name.to_s) }
|
@@ -137,6 +156,11 @@ shared_examples_for 'output configuration' do
|
|
137
156
|
it { expect{driver}.not_to raise_error }
|
138
157
|
end
|
139
158
|
|
159
|
+
describe 'configure accessor configuration' do
|
160
|
+
include_context 'accessor_config'
|
161
|
+
it { expect{driver}.not_to raise_error }
|
162
|
+
end
|
163
|
+
|
140
164
|
describe 'configure counter without key configuration' do
|
141
165
|
include_context 'counter_without_key_config'
|
142
166
|
it { expect{driver}.not_to raise_error }
|
@@ -217,6 +241,22 @@ shared_examples_for 'instruments record' do
|
|
217
241
|
end
|
218
242
|
end
|
219
243
|
|
244
|
+
context 'accessor config' do
|
245
|
+
include_context 'accessor_config'
|
246
|
+
|
247
|
+
before :each do
|
248
|
+
es
|
249
|
+
end
|
250
|
+
|
251
|
+
it 'expands accessor with record values' do
|
252
|
+
expect(registry.metrics.map(&:name)).to include(name)
|
253
|
+
expect(counter).to be_kind_of(::Prometheus::Client::Metric)
|
254
|
+
key, _ = counter.values.find {|k,v| v == 100 }
|
255
|
+
expect(key).to be_kind_of(Hash)
|
256
|
+
expect(key[:foo]).to eq(100)
|
257
|
+
end
|
258
|
+
end
|
259
|
+
|
220
260
|
context 'counter_without config' do
|
221
261
|
include_context 'counter_without_key_config'
|
222
262
|
|
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.2.
|
4
|
+
version: 1.2.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Masahiro Sano
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-11-
|
11
|
+
date: 2018-11-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: fluentd
|
@@ -127,6 +127,7 @@ files:
|
|
127
127
|
- misc/prometheus.yaml
|
128
128
|
- misc/prometheus_alerts.yaml
|
129
129
|
- spec/fluent/plugin/filter_prometheus_spec.rb
|
130
|
+
- spec/fluent/plugin/in_prometheus_monitor_spec.rb
|
130
131
|
- spec/fluent/plugin/out_prometheus_spec.rb
|
131
132
|
- spec/fluent/plugin/prometheus_spec.rb
|
132
133
|
- spec/fluent/plugin/shared.rb
|
@@ -151,12 +152,13 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
151
152
|
version: '0'
|
152
153
|
requirements: []
|
153
154
|
rubyforge_project:
|
154
|
-
rubygems_version: 2.6
|
155
|
+
rubygems_version: 2.7.6
|
155
156
|
signing_key:
|
156
157
|
specification_version: 4
|
157
158
|
summary: A fluent plugin that collects metrics and exposes for Prometheus.
|
158
159
|
test_files:
|
159
160
|
- spec/fluent/plugin/filter_prometheus_spec.rb
|
161
|
+
- spec/fluent/plugin/in_prometheus_monitor_spec.rb
|
160
162
|
- spec/fluent/plugin/out_prometheus_spec.rb
|
161
163
|
- spec/fluent/plugin/prometheus_spec.rb
|
162
164
|
- spec/fluent/plugin/shared.rb
|