fluent-plugin-prometheus-smarter 1.8.4

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.
@@ -0,0 +1,138 @@
1
+ require 'spec_helper'
2
+ require 'fluent/plugin/in_prometheus'
3
+ require 'fluent/test/driver/input'
4
+
5
+ require 'net/http'
6
+
7
+ describe Fluent::Plugin::PromMetricsAggregator do
8
+
9
+ metrics_worker_1 = %[# TYPE fluentd_status_buffer_queue_length gauge
10
+ # HELP fluentd_status_buffer_queue_length Current buffer queue length.
11
+ fluentd_status_buffer_queue_length{host="0123456789ab",worker_id="0",plugin_id="plugin-1",plugin_category="output",type="s3"} 0.0
12
+ fluentd_status_buffer_queue_length{host="0123456789ab",worker_id="0",plugin_id="plugin-2",plugin_category="output",type="s3"} 0.0
13
+ # TYPE fluentd_status_buffer_total_bytes gauge
14
+ # HELP fluentd_status_buffer_total_bytes Current total size of queued buffers.
15
+ fluentd_status_buffer_total_bytes{host="0123456789ab",worker_id="0",plugin_id="plugin-1",plugin_category="output",type="s3"} 0.0
16
+ fluentd_status_buffer_total_bytes{host="0123456789ab",worker_id="0",plugin_id="plugin-2",plugin_category="output",type="s3"} 0.0
17
+ # TYPE log_counter counter
18
+ # HELP log_counter the number of received logs
19
+ log_counter{worker_id="0",host="0123456789ab",tag="fluent.info"} 1.0
20
+ # HELP empty_metric A metric with no data
21
+ # TYPE empty_metric gauge
22
+ # HELP http_request_duration_seconds The HTTP request latencies in seconds.
23
+ # TYPE http_request_duration_seconds histogram
24
+ http_request_duration_seconds_bucket{code="200",worker_id="0",method="GET",le="0.005"} 58
25
+ http_request_duration_seconds_bucket{code="200",worker_id="0",method="GET",le="0.01"} 58
26
+ http_request_duration_seconds_bucket{code="200",worker_id="0",method="GET",le="0.05"} 59
27
+ http_request_duration_seconds_bucket{code="200",worker_id="0",method="GET",le="0.1"} 59
28
+ http_request_duration_seconds_bucket{code="200",worker_id="0",method="GET",le="1"} 59
29
+ http_request_duration_seconds_bucket{code="200",worker_id="0",method="GET",le="10"} 59
30
+ http_request_duration_seconds_bucket{code="200",worker_id="0",method="GET",le="+Inf"} 59
31
+ http_request_duration_seconds_sum{code="200",worker_id="0",method="GET"} 0.05046115500000003
32
+ http_request_duration_seconds_count{code="200",worker_id="0",method="GET"} 59
33
+ ]
34
+
35
+ metrics_worker_2 = %[# TYPE fluentd_output_status_buffer_queue_length gauge
36
+ # HELP fluentd_output_status_buffer_queue_length Current buffer queue length.
37
+ fluentd_output_status_buffer_queue_length{host="0123456789ab",worker_id="0",plugin_id="plugin-1",type="s3"} 0.0
38
+ fluentd_output_status_buffer_queue_length{host="0123456789ab",worker_id="0",plugin_id="plugin-2",type="s3"} 0.0
39
+ # TYPE fluentd_output_status_buffer_total_bytes gauge
40
+ # HELP fluentd_output_status_buffer_total_bytes Current total size of queued buffers.
41
+ fluentd_output_status_buffer_total_bytes{host="0123456789ab",worker_id="0",plugin_id="plugin-1",type="s3"} 0.0
42
+ fluentd_output_status_buffer_total_bytes{host="0123456789ab",worker_id="0",plugin_id="plugin-2",type="s3"} 0.0
43
+ ]
44
+
45
+ metrics_worker_3 = %[# TYPE fluentd_status_buffer_queue_length gauge
46
+ # HELP fluentd_status_buffer_queue_length Current buffer queue length.
47
+ fluentd_status_buffer_queue_length{host="0123456789ab",worker_id="1",plugin_id="plugin-1",plugin_category="output",type="s3"} 0.0
48
+ fluentd_status_buffer_queue_length{host="0123456789ab",worker_id="1",plugin_id="plugin-2",plugin_category="output",type="s3"} 0.0
49
+ # TYPE fluentd_status_buffer_total_bytes gauge
50
+ # HELP fluentd_status_buffer_total_bytes Current total size of queued buffers.
51
+ fluentd_status_buffer_total_bytes{host="0123456789ab",worker_id="1",plugin_id="plugin-1",plugin_category="output",type="s3"} 0.0
52
+ fluentd_status_buffer_total_bytes{host="0123456789ab",worker_id="1",plugin_id="plugin-2",plugin_category="output",type="s3"} 0.0
53
+ # HELP http_request_duration_seconds The HTTP request latencies in seconds.
54
+ # TYPE http_request_duration_seconds histogram
55
+ http_request_duration_seconds_bucket{code="200",worker_id="1",method="GET",le="0.005"} 70
56
+ http_request_duration_seconds_bucket{code="200",worker_id="1",method="GET",le="0.01"} 70
57
+ http_request_duration_seconds_bucket{code="200",worker_id="1",method="GET",le="0.05"} 71
58
+ http_request_duration_seconds_bucket{code="200",worker_id="1",method="GET",le="0.1"} 71
59
+ http_request_duration_seconds_bucket{code="200",worker_id="1",method="GET",le="1"} 71
60
+ http_request_duration_seconds_bucket{code="200",worker_id="1",method="GET",le="10"} 71
61
+ http_request_duration_seconds_bucket{code="200",worker_id="1",method="GET",le="+Inf"} 71
62
+ http_request_duration_seconds_sum{code="200",worker_id="1",method="GET"} 0.05646315600000003
63
+ http_request_duration_seconds_count{code="200",worker_id="1",method="GET"} 71
64
+ ]
65
+
66
+ metrics_merged_1_and_3 = %[# TYPE fluentd_status_buffer_queue_length gauge
67
+ # HELP fluentd_status_buffer_queue_length Current buffer queue length.
68
+ fluentd_status_buffer_queue_length{host="0123456789ab",worker_id="0",plugin_id="plugin-1",plugin_category="output",type="s3"} 0.0
69
+ fluentd_status_buffer_queue_length{host="0123456789ab",worker_id="0",plugin_id="plugin-2",plugin_category="output",type="s3"} 0.0
70
+ fluentd_status_buffer_queue_length{host="0123456789ab",worker_id="1",plugin_id="plugin-1",plugin_category="output",type="s3"} 0.0
71
+ fluentd_status_buffer_queue_length{host="0123456789ab",worker_id="1",plugin_id="plugin-2",plugin_category="output",type="s3"} 0.0
72
+ # TYPE fluentd_status_buffer_total_bytes gauge
73
+ # HELP fluentd_status_buffer_total_bytes Current total size of queued buffers.
74
+ fluentd_status_buffer_total_bytes{host="0123456789ab",worker_id="0",plugin_id="plugin-1",plugin_category="output",type="s3"} 0.0
75
+ fluentd_status_buffer_total_bytes{host="0123456789ab",worker_id="0",plugin_id="plugin-2",plugin_category="output",type="s3"} 0.0
76
+ fluentd_status_buffer_total_bytes{host="0123456789ab",worker_id="1",plugin_id="plugin-1",plugin_category="output",type="s3"} 0.0
77
+ fluentd_status_buffer_total_bytes{host="0123456789ab",worker_id="1",plugin_id="plugin-2",plugin_category="output",type="s3"} 0.0
78
+ # TYPE log_counter counter
79
+ # HELP log_counter the number of received logs
80
+ log_counter{worker_id="0",host="0123456789ab",tag="fluent.info"} 1.0
81
+ # HELP empty_metric A metric with no data
82
+ # TYPE empty_metric gauge
83
+ # HELP http_request_duration_seconds The HTTP request latencies in seconds.
84
+ # TYPE http_request_duration_seconds histogram
85
+ http_request_duration_seconds_bucket{code="200",worker_id="0",method="GET",le="0.005"} 58
86
+ http_request_duration_seconds_bucket{code="200",worker_id="0",method="GET",le="0.01"} 58
87
+ http_request_duration_seconds_bucket{code="200",worker_id="0",method="GET",le="0.05"} 59
88
+ http_request_duration_seconds_bucket{code="200",worker_id="0",method="GET",le="0.1"} 59
89
+ http_request_duration_seconds_bucket{code="200",worker_id="0",method="GET",le="1"} 59
90
+ http_request_duration_seconds_bucket{code="200",worker_id="0",method="GET",le="10"} 59
91
+ http_request_duration_seconds_bucket{code="200",worker_id="0",method="GET",le="+Inf"} 59
92
+ http_request_duration_seconds_sum{code="200",worker_id="0",method="GET"} 0.05046115500000003
93
+ http_request_duration_seconds_count{code="200",worker_id="0",method="GET"} 59
94
+ http_request_duration_seconds_bucket{code="200",worker_id="1",method="GET",le="0.005"} 70
95
+ http_request_duration_seconds_bucket{code="200",worker_id="1",method="GET",le="0.01"} 70
96
+ http_request_duration_seconds_bucket{code="200",worker_id="1",method="GET",le="0.05"} 71
97
+ http_request_duration_seconds_bucket{code="200",worker_id="1",method="GET",le="0.1"} 71
98
+ http_request_duration_seconds_bucket{code="200",worker_id="1",method="GET",le="1"} 71
99
+ http_request_duration_seconds_bucket{code="200",worker_id="1",method="GET",le="10"} 71
100
+ http_request_duration_seconds_bucket{code="200",worker_id="1",method="GET",le="+Inf"} 71
101
+ http_request_duration_seconds_sum{code="200",worker_id="1",method="GET"} 0.05646315600000003
102
+ http_request_duration_seconds_count{code="200",worker_id="1",method="GET"} 71
103
+ ]
104
+
105
+ describe 'add_metrics' do
106
+ context '1st_metrics' do
107
+ it 'adds all fields' do
108
+ all_metrics = Fluent::Plugin::PromMetricsAggregator.new
109
+ all_metrics.add_metrics(metrics_worker_1)
110
+ result_str = all_metrics.get_metrics
111
+
112
+ expect(result_str).to eq(metrics_worker_1)
113
+ end
114
+ end
115
+ context '2nd_metrics' do
116
+ it 'append new metrics' do
117
+ all_metrics = Fluent::Plugin::PromMetricsAggregator.new
118
+ all_metrics.add_metrics(metrics_worker_1)
119
+ all_metrics.add_metrics(metrics_worker_2)
120
+ result_str = all_metrics.get_metrics
121
+
122
+ expect(result_str).to eq(metrics_worker_1 + metrics_worker_2)
123
+ end
124
+ end
125
+
126
+ context '3rd_metrics' do
127
+ it 'append existing metrics in the right place' do
128
+ all_metrics = Fluent::Plugin::PromMetricsAggregator.new
129
+ all_metrics.add_metrics(metrics_worker_1)
130
+ all_metrics.add_metrics(metrics_worker_2)
131
+ all_metrics.add_metrics(metrics_worker_3)
132
+ result_str = all_metrics.get_metrics
133
+
134
+ expect(result_str).to eq(metrics_merged_1_and_3 + metrics_worker_2)
135
+ end
136
+ end
137
+ end
138
+ end
@@ -0,0 +1,249 @@
1
+
2
+ BASE_CONFIG = %[
3
+ @type prometheus
4
+ ]
5
+
6
+ SIMPLE_CONFIG = BASE_CONFIG + %[
7
+ <metric>
8
+ name simple_foo
9
+ type counter
10
+ desc Something foo.
11
+ key foo
12
+ </metric>
13
+ ]
14
+
15
+ FULL_CONFIG = BASE_CONFIG + %[
16
+ <metric>
17
+ name full_foo
18
+ type counter
19
+ desc Something foo.
20
+ key foo
21
+ <labels>
22
+ key foo1
23
+ </labels>
24
+ </metric>
25
+ <metric>
26
+ name full_bar
27
+ type gauge
28
+ desc Something bar.
29
+ key bar
30
+ <labels>
31
+ key foo2
32
+ </labels>
33
+ </metric>
34
+ <metric>
35
+ name full_baz
36
+ type summary
37
+ desc Something baz.
38
+ key baz
39
+ <labels>
40
+ key foo3
41
+ </labels>
42
+ </metric>
43
+ <metric>
44
+ name full_qux
45
+ type histogram
46
+ desc Something qux.
47
+ key qux
48
+ buckets 0.1, 1, 5, 10
49
+ <labels>
50
+ key foo4
51
+ </labels>
52
+ </metric>
53
+ <metric>
54
+ name full_accessor1
55
+ type summary
56
+ desc Something with accessor.
57
+ key $.foo
58
+ <labels>
59
+ key foo5
60
+ </labels>
61
+ </metric>
62
+ <metric>
63
+ name full_accessor2
64
+ type counter
65
+ desc Something with accessor.
66
+ key $.foo
67
+ <labels>
68
+ key foo6
69
+ </labels>
70
+ </metric>
71
+ <labels>
72
+ test_key test_value
73
+ </labels>
74
+ ]
75
+
76
+ PLACEHOLDER_CONFIG = BASE_CONFIG + %[
77
+ <metric>
78
+ name placeholder_foo
79
+ type counter
80
+ desc Something foo.
81
+ key foo
82
+ <labels>
83
+ foo ${foo}
84
+ </labels>
85
+ </metric>
86
+ <labels>
87
+ tag ${tag}
88
+ hostname ${hostname}
89
+ </labels>
90
+ ]
91
+
92
+ ACCESSOR_CONFIG = BASE_CONFIG + %[
93
+ <metric>
94
+ name accessor_foo
95
+ type counter
96
+ desc Something foo.
97
+ key foo
98
+ <labels>
99
+ foo $.foo
100
+ </labels>
101
+ </metric>
102
+ ]
103
+
104
+ COUNTER_WITHOUT_KEY_CONFIG = BASE_CONFIG + %[
105
+ <metric>
106
+ name without_key_foo
107
+ type counter
108
+ desc Something foo.
109
+ </metric>
110
+ ]
111
+
112
+ shared_examples_for 'output configuration' do
113
+ context 'base config' do
114
+ let(:config) { BASE_CONFIG }
115
+ it { expect { driver }.not_to raise_error }
116
+ end
117
+
118
+ context 'with simple configuration' do
119
+ let(:config) { SIMPLE_CONFIG }
120
+ it { expect { driver }.not_to raise_error }
121
+ end
122
+
123
+ context 'with full configuration' do
124
+ let(:config) { FULL_CONFIG }
125
+ it { expect { driver }.not_to raise_error }
126
+ end
127
+
128
+ context 'with placeholder configuration' do
129
+ let(:config) { PLACEHOLDER_CONFIG }
130
+ it { expect { driver }.not_to raise_error }
131
+ end
132
+
133
+ context 'with accessor configuration' do
134
+ let(:config) { ACCESSOR_CONFIG }
135
+ it { expect { driver }.not_to raise_error }
136
+ end
137
+
138
+ describe 'with counter without key configuration' do
139
+ let(:config) { COUNTER_WITHOUT_KEY_CONFIG }
140
+ it { expect { driver }.not_to raise_error }
141
+ end
142
+
143
+ context 'with unknown type' do
144
+ let(:config) do
145
+ BASE_CONFIG + %[
146
+ <metric>
147
+ type foo
148
+ </metric>
149
+ ]
150
+ end
151
+ it { expect { driver }.to raise_error(Fluent::ConfigError) }
152
+ end
153
+ end
154
+
155
+ shared_examples_for 'instruments record' do
156
+ before do
157
+ driver.run(default_tag: tag) { driver.feed(event_time, message) }
158
+ end
159
+
160
+ context 'full config' do
161
+ let(:config) { FULL_CONFIG }
162
+ let(:counter) { registry.get(:full_foo) }
163
+ let(:gauge) { registry.get(:full_bar) }
164
+ let(:summary) { registry.get(:full_baz) }
165
+ let(:histogram) { registry.get(:full_qux) }
166
+ let(:summary_with_accessor) { registry.get(:full_accessor1) }
167
+ let(:counter_with_accessor) { registry.get(:full_accessor2) }
168
+
169
+ it 'adds all metrics' do
170
+ expect(registry.metrics.map(&:name)).to eq(%i[full_foo full_bar full_baz full_qux full_accessor1 full_accessor2])
171
+ expect(counter).to be_kind_of(::Prometheus::Client::Metric)
172
+ expect(gauge).to be_kind_of(::Prometheus::Client::Metric)
173
+ expect(summary).to be_kind_of(::Prometheus::Client::Metric)
174
+ expect(summary_with_accessor).to be_kind_of(::Prometheus::Client::Metric)
175
+ expect(counter_with_accessor).to be_kind_of(::Prometheus::Client::Metric)
176
+ expect(histogram).to be_kind_of(::Prometheus::Client::Metric)
177
+ end
178
+
179
+ it 'instruments counter metric' do
180
+ expect(counter.type).to eq(:counter)
181
+ expect(counter.get({test_key: 'test_value', key: 'foo1'})).to be_kind_of(Numeric)
182
+ expect(counter_with_accessor.get({test_key: 'test_value', key: 'foo6'})).to be_kind_of(Numeric)
183
+ end
184
+
185
+ it 'instruments gauge metric' do
186
+ expect(gauge.type).to eq(:gauge)
187
+ expect(gauge.get({test_key: 'test_value', key: 'foo2'})).to eq(100)
188
+ end
189
+
190
+ it 'instruments summary metric' do
191
+ expect(summary.type).to eq(:summary)
192
+ expect(summary.get({test_key: 'test_value', key: 'foo3'})).to be_kind_of(Hash)
193
+ expect(summary.get({test_key: 'test_value', key: 'foo3'})[0.99]).to eq(100)
194
+ expect(summary_with_accessor.get({test_key: 'test_value', key: 'foo5'})[0.99]).to eq(100)
195
+ end
196
+
197
+ it 'instruments histogram metric' do
198
+ driver.run(default_tag: tag) do
199
+ 4.times { driver.feed(event_time, message) }
200
+ end
201
+
202
+ expect(histogram.type).to eq(:histogram)
203
+ expect(histogram.get({test_key: 'test_value', key: 'foo4'})).to be_kind_of(Hash)
204
+ expect(histogram.get({test_key: 'test_value', key: 'foo4'})[10]).to eq(5) # 4 + `es` in before
205
+ end
206
+ end
207
+
208
+ context 'placeholder config' do
209
+ let(:config) { PLACEHOLDER_CONFIG }
210
+ let(:counter) { registry.get(:placeholder_foo) }
211
+
212
+ it 'expands placeholders with record values' do
213
+ expect(registry.metrics.map(&:name)).to eq([:placeholder_foo])
214
+ expect(counter).to be_kind_of(::Prometheus::Client::Metric)
215
+ key, _ = counter.values.find {|k,v| v == 100 }
216
+ expect(key).to be_kind_of(Hash)
217
+ expect(key[:tag]).to eq(tag)
218
+ expect(key[:hostname]).to be_kind_of(String)
219
+ expect(key[:hostname]).not_to eq("${hostname}")
220
+ expect(key[:hostname]).not_to be_empty
221
+ expect(key[:foo]).to eq("100")
222
+ end
223
+ end
224
+
225
+ context 'accessor config' do
226
+ let(:config) { ACCESSOR_CONFIG }
227
+ let(:counter) { registry.get(:accessor_foo) }
228
+
229
+ it 'expands accessor with record values' do
230
+ expect(registry.metrics.map(&:name)).to eq([:accessor_foo])
231
+ expect(counter).to be_kind_of(::Prometheus::Client::Metric)
232
+ key, _ = counter.values.find {|k,v| v == 100 }
233
+ expect(key).to be_kind_of(Hash)
234
+ expect(key[:foo]).to eq(100)
235
+ end
236
+ end
237
+
238
+ context 'counter_without config' do
239
+ let(:config) { COUNTER_WITHOUT_KEY_CONFIG }
240
+ let(:counter) { registry.get(:without_key_foo) }
241
+
242
+ it 'just increments by 1' do
243
+ expect(registry.metrics.map(&:name)).to eq([:without_key_foo])
244
+ expect(counter).to be_kind_of(::Prometheus::Client::Metric)
245
+ _, value = counter.values.find {|k,v| k == {} }
246
+ expect(value).to eq(1)
247
+ end
248
+ end
249
+ end
@@ -0,0 +1,10 @@
1
+ $LOAD_PATH.unshift File.expand_path('../../lib', __FILE__)
2
+ require 'fluent/test'
3
+ require 'fluent/test/helpers'
4
+ require 'fluent/plugin/prometheus'
5
+
6
+ # Disable Test::Unit
7
+ Test::Unit::AutoRunner.need_auto_run = false
8
+
9
+ Fluent::Test.setup
10
+ include Fluent::Test::Helpers
metadata ADDED
@@ -0,0 +1,174 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: fluent-plugin-prometheus-smarter
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.8.4
5
+ platform: ruby
6
+ authors:
7
+ - Masahiro Sano
8
+ - Josh Minor
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2020-05-01 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: fluentd
16
+ requirement: !ruby/object:Gem::Requirement
17
+ requirements:
18
+ - - ">="
19
+ - !ruby/object:Gem::Version
20
+ version: 1.9.1
21
+ - - "<"
22
+ - !ruby/object:Gem::Version
23
+ version: '2'
24
+ type: :runtime
25
+ prerelease: false
26
+ version_requirements: !ruby/object:Gem::Requirement
27
+ requirements:
28
+ - - ">="
29
+ - !ruby/object:Gem::Version
30
+ version: 1.9.1
31
+ - - "<"
32
+ - !ruby/object:Gem::Version
33
+ version: '2'
34
+ - !ruby/object:Gem::Dependency
35
+ name: prometheus-client
36
+ requirement: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "<"
39
+ - !ruby/object:Gem::Version
40
+ version: '0.10'
41
+ type: :runtime
42
+ prerelease: false
43
+ version_requirements: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "<"
46
+ - !ruby/object:Gem::Version
47
+ version: '0.10'
48
+ - !ruby/object:Gem::Dependency
49
+ name: bundler
50
+ requirement: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ type: :development
56
+ prerelease: false
57
+ version_requirements: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ - !ruby/object:Gem::Dependency
63
+ name: rake
64
+ requirement: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ type: :development
70
+ prerelease: false
71
+ version_requirements: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ - !ruby/object:Gem::Dependency
77
+ name: rspec
78
+ requirement: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ type: :development
84
+ prerelease: false
85
+ version_requirements: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ - !ruby/object:Gem::Dependency
91
+ name: test-unit
92
+ requirement: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ type: :development
98
+ prerelease: false
99
+ version_requirements: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ description: A fluent plugin that collects metrics and exposes for Prometheus.
105
+ email:
106
+ - sabottenda@gmail.com
107
+ executables: []
108
+ extensions: []
109
+ extra_rdoc_files: []
110
+ files:
111
+ - ".gitignore"
112
+ - ".rspec"
113
+ - ".travis.yml"
114
+ - Gemfile
115
+ - LICENSE
116
+ - README.md
117
+ - Rakefile
118
+ - fluent-plugin-prometheus.gemspec
119
+ - lib/fluent/plugin/filter_prometheus.rb
120
+ - lib/fluent/plugin/in_prometheus.rb
121
+ - lib/fluent/plugin/in_prometheus_monitor.rb
122
+ - lib/fluent/plugin/in_prometheus_output_monitor.rb
123
+ - lib/fluent/plugin/in_prometheus_tail_monitor.rb
124
+ - lib/fluent/plugin/metric_prometheus.rb
125
+ - lib/fluent/plugin/out_prometheus.rb
126
+ - lib/fluent/plugin/prometheus.rb
127
+ - lib/fluent/plugin/prometheus/placeholder_expander.rb
128
+ - lib/fluent/plugin/prometheus_metrics.rb
129
+ - misc/fluentd_sample.conf
130
+ - misc/nginx_proxy.conf
131
+ - misc/prometheus.yaml
132
+ - misc/prometheus_alerts.yaml
133
+ - spec/fluent/plugin/filter_prometheus_spec.rb
134
+ - spec/fluent/plugin/in_prometheus_monitor_spec.rb
135
+ - spec/fluent/plugin/in_prometheus_spec.rb
136
+ - spec/fluent/plugin/in_prometheus_tail_monitor_spec.rb
137
+ - spec/fluent/plugin/out_prometheus_spec.rb
138
+ - spec/fluent/plugin/prometheus/placeholder_expander_spec.rb
139
+ - spec/fluent/plugin/prometheus_metrics_spec.rb
140
+ - spec/fluent/plugin/shared.rb
141
+ - spec/spec_helper.rb
142
+ homepage: https://github.com/jishminor/fluent-plugin-prometheus
143
+ licenses:
144
+ - Apache-2.0
145
+ metadata: {}
146
+ post_install_message:
147
+ rdoc_options: []
148
+ require_paths:
149
+ - lib
150
+ required_ruby_version: !ruby/object:Gem::Requirement
151
+ requirements:
152
+ - - ">="
153
+ - !ruby/object:Gem::Version
154
+ version: '0'
155
+ required_rubygems_version: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - ">="
158
+ - !ruby/object:Gem::Version
159
+ version: '0'
160
+ requirements: []
161
+ rubygems_version: 3.0.3
162
+ signing_key:
163
+ specification_version: 4
164
+ summary: A fluent plugin that collects metrics and exposes for Prometheus.
165
+ test_files:
166
+ - spec/fluent/plugin/filter_prometheus_spec.rb
167
+ - spec/fluent/plugin/in_prometheus_monitor_spec.rb
168
+ - spec/fluent/plugin/in_prometheus_spec.rb
169
+ - spec/fluent/plugin/in_prometheus_tail_monitor_spec.rb
170
+ - spec/fluent/plugin/out_prometheus_spec.rb
171
+ - spec/fluent/plugin/prometheus/placeholder_expander_spec.rb
172
+ - spec/fluent/plugin/prometheus_metrics_spec.rb
173
+ - spec/fluent/plugin/shared.rb
174
+ - spec/spec_helper.rb