fluent-plugin-prometheus 2.1.0 → 2.2.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/.github/workflows/linux.yml +2 -3
- data/ChangeLog +4 -0
- data/README.md +2 -1
- data/fluent-plugin-prometheus.gemspec +1 -1
- data/lib/fluent/plugin/in_prometheus.rb +19 -3
- data/lib/fluent/plugin/in_prometheus_output_monitor.rb +1 -1
- data/spec/fluent/plugin/in_prometheus_spec.rb +56 -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: c42edc59b51fa5a911f51e5c174f71dc573c99068379d3ee8ba7d2d710dbcbb5
|
4
|
+
data.tar.gz: 32206e06e3c6a6a9b19f6b93583af0c416ae76dc707a1a2dbefe0b54975a936b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 178009b03c28bf7dde6207cbf7f99c1bcdd8e787669630646f937eed5249b8d8fc17443ec08777620caafbc2498ceb13d753db45aea0a86d9b309a396078bf44
|
7
|
+
data.tar.gz: 3051330dbb989c965054f6171f9db9c00775d5642d7d4210da909c2501cca7c66a68b5e319385e81d579a0cdf389d7362873e95b6d5f4bc3fe84ed1004d70071
|
data/.github/workflows/linux.yml
CHANGED
@@ -11,13 +11,13 @@ jobs:
|
|
11
11
|
strategy:
|
12
12
|
fail-fast: false
|
13
13
|
matrix:
|
14
|
-
ruby: [ '3.2', '3.1', '3.0', '2.7' ]
|
14
|
+
ruby: [ '3.3', '3.2', '3.1', '3.0', '2.7' ]
|
15
15
|
os:
|
16
16
|
- ubuntu-latest
|
17
17
|
experimental: [false]
|
18
18
|
name: Ruby ${{ matrix.ruby }} unit testing on ${{ matrix.os }}
|
19
19
|
steps:
|
20
|
-
- uses: actions/checkout@
|
20
|
+
- uses: actions/checkout@v4
|
21
21
|
- uses: ruby/setup-ruby@v1
|
22
22
|
with:
|
23
23
|
ruby-version: ${{ matrix.ruby }}
|
@@ -25,6 +25,5 @@ jobs:
|
|
25
25
|
env:
|
26
26
|
CI: true
|
27
27
|
run: |
|
28
|
-
gem install bundler rake
|
29
28
|
bundle install --jobs 4 --retry 3
|
30
29
|
bundle exec rake spec
|
data/ChangeLog
CHANGED
data/README.md
CHANGED
@@ -63,6 +63,7 @@ More configuration parameters:
|
|
63
63
|
- `port`: listen port (default: 24231)
|
64
64
|
- `metrics_path`: metrics HTTP endpoint (default: /metrics)
|
65
65
|
- `aggregated_metrics_path`: metrics HTTP endpoint (default: /aggregated_metrics)
|
66
|
+
- `content_encoding`: encoding format for the exposed metrics (default: identity). Supported formats are {identity, gzip}
|
66
67
|
|
67
68
|
When using multiple workers, each worker binds to port + `fluent_worker_id`.
|
68
69
|
To scrape metrics from all workers at once, you can access http://localhost:24231/aggregated_metrics.
|
@@ -492,7 +493,7 @@ In this case, `message_foo_counter` has `tag`, `hostname`, `key` and `data_type`
|
|
492
493
|
Checkout repository and setup.
|
493
494
|
|
494
495
|
```
|
495
|
-
$ git clone git://github.com/fluent/fluent-plugin-prometheus
|
496
|
+
$ git clone git://github.com/fluent/fluent-plugin-prometheus.git
|
496
497
|
$ cd fluent-plugin-prometheus
|
497
498
|
$ bundle install --path vendor/bundle
|
498
499
|
```
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Gem::Specification.new do |spec|
|
2
2
|
spec.name = "fluent-plugin-prometheus"
|
3
|
-
spec.version = "2.
|
3
|
+
spec.version = "2.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.}
|
@@ -3,6 +3,7 @@ require 'fluent/plugin/prometheus'
|
|
3
3
|
require 'fluent/plugin/prometheus_metrics'
|
4
4
|
require 'net/http'
|
5
5
|
require 'openssl'
|
6
|
+
require 'zlib'
|
6
7
|
|
7
8
|
module Fluent::Plugin
|
8
9
|
class PrometheusInput < Fluent::Plugin::Input
|
@@ -32,6 +33,9 @@ module Fluent::Plugin
|
|
32
33
|
config_param :extra_conf, :hash, default: nil, symbolize_keys: true, deprecated: 'See http helper config'
|
33
34
|
end
|
34
35
|
|
36
|
+
desc 'Content encoding of the exposed metrics, Currently supported encoding is identity, gzip. Ref: https://prometheus.io/docs/instrumenting/exposition_formats/#basic-info'
|
37
|
+
config_param :content_encoding, :enum, list: [:identity, :gzip], default: :identity
|
38
|
+
|
35
39
|
def initialize
|
36
40
|
super
|
37
41
|
@registry = ::Prometheus::Client.registry
|
@@ -184,7 +188,7 @@ module Fluent::Plugin
|
|
184
188
|
end
|
185
189
|
|
186
190
|
def all_metrics
|
187
|
-
|
191
|
+
response(::Prometheus::Client::Formats::Text.marshal(@registry))
|
188
192
|
rescue => e
|
189
193
|
[500, { 'Content-Type' => 'text/plain' }, e.to_s]
|
190
194
|
end
|
@@ -197,8 +201,7 @@ module Fluent::Plugin
|
|
197
201
|
full_result.add_metrics(resp.body)
|
198
202
|
end
|
199
203
|
end
|
200
|
-
|
201
|
-
[200, { 'Content-Type' => ::Prometheus::Client::Formats::Text::CONTENT_TYPE }, full_result.get_metrics]
|
204
|
+
response(full_result.get_metrics)
|
202
205
|
rescue => e
|
203
206
|
[500, { 'Content-Type' => 'text/plain' }, e.to_s]
|
204
207
|
end
|
@@ -226,5 +229,18 @@ module Fluent::Plugin
|
|
226
229
|
yield(http)
|
227
230
|
end
|
228
231
|
end
|
232
|
+
|
233
|
+
def response(metrics)
|
234
|
+
body = nil
|
235
|
+
case @content_encoding
|
236
|
+
when :gzip
|
237
|
+
gzip = Zlib::GzipWriter.new(StringIO.new)
|
238
|
+
gzip << metrics
|
239
|
+
body = gzip.close.string
|
240
|
+
when :identity
|
241
|
+
body = metrics
|
242
|
+
end
|
243
|
+
[200, { 'Content-Type' => ::Prometheus::Client::Formats::Text::CONTENT_TYPE, 'Content-Encoding' => @content_encoding.to_s }, body]
|
244
|
+
end
|
229
245
|
end
|
230
246
|
end
|
@@ -77,7 +77,7 @@ module Fluent::Plugin
|
|
77
77
|
:fluentd_output_status_buffer_queue_length,
|
78
78
|
'Current length of queue buffers.'),
|
79
79
|
buffer_queue_byte_size: get_gauge(
|
80
|
-
:
|
80
|
+
:fluentd_output_status_buffer_queue_byte_size,
|
81
81
|
'Current total size of queue buffers.'),
|
82
82
|
buffer_available_buffer_space_ratios: get_gauge(
|
83
83
|
:fluentd_output_status_buffer_available_space_ratio,
|
@@ -3,6 +3,7 @@ require 'fluent/plugin/in_prometheus'
|
|
3
3
|
require 'fluent/test/driver/input'
|
4
4
|
|
5
5
|
require 'net/http'
|
6
|
+
require 'zlib'
|
6
7
|
|
7
8
|
describe Fluent::Plugin::PrometheusInput do
|
8
9
|
CONFIG = %[
|
@@ -45,6 +46,24 @@ describe Fluent::Plugin::PrometheusInput do
|
|
45
46
|
expect(driver.instance.metrics_path).to eq('/_test')
|
46
47
|
end
|
47
48
|
end
|
49
|
+
|
50
|
+
describe 'content_encoding_identity' do
|
51
|
+
let(:config) { CONFIG + %[
|
52
|
+
content_encoding identity
|
53
|
+
] }
|
54
|
+
it 'should be configurable' do
|
55
|
+
expect(driver.instance.content_encoding).to eq(:identity)
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
describe 'content_encoding_gzip' do
|
60
|
+
let(:config) { CONFIG + %[
|
61
|
+
content_encoding gzip
|
62
|
+
] }
|
63
|
+
it 'should be configurable' do
|
64
|
+
expect(driver.instance.content_encoding).to eq(:gzip)
|
65
|
+
end
|
66
|
+
end
|
48
67
|
end
|
49
68
|
|
50
69
|
describe '#start' do
|
@@ -197,6 +216,43 @@ describe Fluent::Plugin::PrometheusInput do
|
|
197
216
|
end
|
198
217
|
end
|
199
218
|
end
|
219
|
+
|
220
|
+
context 'response content_encoding identity' do
|
221
|
+
let(:config) { LOCAL_CONFIG + %[
|
222
|
+
content_encoding identity
|
223
|
+
] }
|
224
|
+
it 'exposes metric' do
|
225
|
+
driver.run(timeout: 1) do
|
226
|
+
registry = driver.instance.instance_variable_get(:@registry)
|
227
|
+
registry.counter(:test,docstring: "Testing metrics") unless registry.exist?(:test)
|
228
|
+
Net::HTTP.start("127.0.0.1", port) do |http|
|
229
|
+
req = Net::HTTP::Get.new("/metrics")
|
230
|
+
req['accept-encoding'] = nil
|
231
|
+
res = http.request(req)
|
232
|
+
expect(res.body).to include("test Testing metrics")
|
233
|
+
end
|
234
|
+
end
|
235
|
+
end
|
236
|
+
end
|
237
|
+
|
238
|
+
context 'response content_encoding gzip' do
|
239
|
+
let(:config) { LOCAL_CONFIG + %[
|
240
|
+
content_encoding gzip
|
241
|
+
] }
|
242
|
+
it 'exposes metric' do
|
243
|
+
driver.run(timeout: 1) do
|
244
|
+
registry = driver.instance.instance_variable_get(:@registry)
|
245
|
+
registry.counter(:test,docstring: "Testing metrics") unless registry.exist?(:test)
|
246
|
+
Net::HTTP.start("127.0.0.1", port) do |http|
|
247
|
+
req = Net::HTTP::Get.new("/metrics")
|
248
|
+
req['accept-encoding'] = nil
|
249
|
+
res = http.request(req)
|
250
|
+
gzip = Zlib::GzipReader.new(StringIO.new(res.body.to_s))
|
251
|
+
expect(gzip.read).to include("test Testing metrics")
|
252
|
+
end
|
253
|
+
end
|
254
|
+
end
|
255
|
+
end
|
200
256
|
end
|
201
257
|
|
202
258
|
describe '#run_multi_workers' 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: 2.
|
4
|
+
version: 2.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:
|
11
|
+
date: 2024-08-02 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: fluentd
|