prometheus_exporter 0.6.0 → 0.7.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/ci.yml +10 -4
- data/.gitignore +2 -0
- data/.rubocop.yml +5 -0
- data/Appraisals +10 -0
- data/CHANGELOG +9 -1
- data/README.md +27 -1
- data/gemfiles/.bundle/config +2 -0
- data/gemfiles/ar_60.gemfile +5 -0
- data/gemfiles/ar_61.gemfile +7 -0
- data/lib/prometheus_exporter/client.rb +1 -1
- data/lib/prometheus_exporter/instrumentation/active_record.rb +16 -7
- data/lib/prometheus_exporter/middleware.rb +17 -10
- data/lib/prometheus_exporter/server/web_collector.rb +2 -5
- data/lib/prometheus_exporter/version.rb +1 -1
- data/prometheus_exporter.gemspec +7 -3
- metadata +56 -10
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2f949348bbafc06b8f7a3dd3927693de8fef54090d85a7889afbfbf7dcb167b6
|
4
|
+
data.tar.gz: adeca8000ebb59c7225c1453135900aeab5c1760902edd5b4fecf9fa4b879a57
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7d3829ad57f03a19f6081c3444f9b13906aedd4fa1c5b99237d454096e0d993c27c2df0993482c421b6034a58a55c9603620bcdf7698248e4ac23a5063d63718
|
7
|
+
data.tar.gz: fb915716acbbb4f24a152c8ebf9eb35bdc97185a7144eb986e50aafad07a36d5cc83cbbbf7c16e8b399207e9c66d90973d2e6f9ddcdc8a17cab797840d13ed8b
|
data/.github/workflows/ci.yml
CHANGED
@@ -12,7 +12,7 @@ jobs:
|
|
12
12
|
name: Ruby ${{ matrix.ruby }}
|
13
13
|
strategy:
|
14
14
|
matrix:
|
15
|
-
ruby: ["2.7", "2.6", "2.5"
|
15
|
+
ruby: ["2.7", "2.6", "2.5"]
|
16
16
|
steps:
|
17
17
|
- uses: actions/checkout@master
|
18
18
|
with:
|
@@ -23,14 +23,20 @@ jobs:
|
|
23
23
|
- uses: actions/cache@v2
|
24
24
|
with:
|
25
25
|
path: vendor/bundle
|
26
|
-
key: ${{ runner.os }}-${{ matrix.ruby }}-gems-${{ hashFiles('**/Gemfile.lock') }}
|
26
|
+
key: ${{ runner.os }}-${{ matrix.ruby }}-gems-v2-${{ hashFiles('**/Gemfile.lock') }}
|
27
27
|
restore-keys: |
|
28
|
-
${{ runner.os }}-${{ matrix.ruby }}-gems-
|
28
|
+
${{ runner.os }}-${{ matrix.ruby }}-gems-v2-
|
29
29
|
- name: Setup gems
|
30
30
|
run: |
|
31
|
+
gem install bundler
|
32
|
+
# for Ruby <= 2.6 , details https://github.com/rubygems/rubygems/issues/3284
|
33
|
+
gem update --system 3.0.8 && gem update --system
|
31
34
|
bundle config path vendor/bundle
|
32
35
|
bundle install --jobs 4
|
36
|
+
bundle exec appraisal install
|
33
37
|
- name: Rubocop
|
34
38
|
run: bundle exec rubocop
|
39
|
+
- name: install gems
|
40
|
+
run: bundle exec appraisal bundle
|
35
41
|
- name: Run tests
|
36
|
-
run: bundle exec rake
|
42
|
+
run: bundle exec appraisal rake
|
data/.gitignore
CHANGED
data/.rubocop.yml
CHANGED
data/Appraisals
ADDED
data/CHANGELOG
CHANGED
@@ -1,4 +1,12 @@
|
|
1
|
-
0.
|
1
|
+
0.7.0 - 29-12-2020
|
2
|
+
|
3
|
+
- Dev: Removed support from EOL rubies, only 2.5, 2.6, 2.7 and 3.0 are supported now.
|
4
|
+
- Dev: Better support for Ruby 3.0, explicitly depending on webrick
|
5
|
+
- Dev: Rails 6.1 instrumentation support
|
6
|
+
- FEATURE: clean pattern for overriding middleware labels was introduced (in README)
|
7
|
+
- Fix: Better support for forking
|
8
|
+
|
9
|
+
0.6.0 - 17-11-2020
|
2
10
|
|
3
11
|
- FEATURE: add support for basic-auth in the prometheus_exporter web server
|
4
12
|
|
data/README.md
CHANGED
@@ -33,7 +33,7 @@ To learn more see [Instrumenting Rails with Prometheus](https://samsaffron.com/a
|
|
33
33
|
|
34
34
|
## Requirements
|
35
35
|
|
36
|
-
Minimum Ruby of version 2.
|
36
|
+
Minimum Ruby of version 2.5.0 is required, Ruby 2.4.0 is EOL as of 2020-04-05
|
37
37
|
|
38
38
|
## Installation
|
39
39
|
|
@@ -218,6 +218,32 @@ class MyMiddleware < PrometheusExporter::Middleware
|
|
218
218
|
end
|
219
219
|
```
|
220
220
|
|
221
|
+
If you're not using Rails like framework, you can extend `PrometheusExporter::Middleware#default_labels` in a way to add more relevant labels.
|
222
|
+
For example you can mimic [prometheus-client](https://github.com/prometheus/client_ruby) labels with code like this:
|
223
|
+
```ruby
|
224
|
+
class MyMiddleware < PrometheusExporter::Middleware
|
225
|
+
def default_labels(env, result)
|
226
|
+
status = (result && result[0]) || -1
|
227
|
+
path = [env["SCRIPT_NAME"], env["PATH_INFO"]].join
|
228
|
+
{
|
229
|
+
path: strip_ids_from_path(path),
|
230
|
+
method: env["REQUEST_METHOD"],
|
231
|
+
status: status
|
232
|
+
}
|
233
|
+
end
|
234
|
+
|
235
|
+
def strip_ids_from_path(path)
|
236
|
+
path
|
237
|
+
.gsub(%r{/[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}(/|$)}, '/:uuid\\1')
|
238
|
+
.gsub(%r{/\d+(/|$)}, '/:id\\1')
|
239
|
+
end
|
240
|
+
end
|
241
|
+
```
|
242
|
+
That way you won't have all metrics labeled with `controller=other` and `action=other`, but have labels such as
|
243
|
+
```
|
244
|
+
ruby_http_duration_seconds{path="/api/v1/teams/:id",method="GET",status="200",quantile="0.99"} 0.009880661998977303
|
245
|
+
```
|
246
|
+
|
221
247
|
¹) Only available when Redis is used.
|
222
248
|
²) Only available when Mysql or PostgreSQL are used.
|
223
249
|
³) Only available when [Instrumenting Request Queueing Time](#instrumenting-request-queueing-time) is set up.
|
@@ -67,21 +67,30 @@ module PrometheusExporter::Instrumentation
|
|
67
67
|
ObjectSpace.each_object(::ActiveRecord::ConnectionAdapters::ConnectionPool) do |pool|
|
68
68
|
next if pool.connections.nil?
|
69
69
|
|
70
|
-
labels_from_config = pool.spec.config
|
71
|
-
.select { |k, v| @config_labels.include? k }
|
72
|
-
.map { |k, v| [k.to_s.dup.prepend("dbconfig_"), v] }
|
73
|
-
|
74
|
-
labels = @metric_labels.merge(pool_name: pool.spec.name).merge(Hash[labels_from_config])
|
75
|
-
|
76
70
|
metric = {
|
77
71
|
pid: pid,
|
78
72
|
type: "active_record",
|
79
73
|
hostname: ::PrometheusExporter.hostname,
|
80
|
-
metric_labels: labels
|
74
|
+
metric_labels: labels(pool)
|
81
75
|
}
|
82
76
|
metric.merge!(pool.stat)
|
83
77
|
metrics << metric
|
84
78
|
end
|
85
79
|
end
|
80
|
+
|
81
|
+
private
|
82
|
+
|
83
|
+
def labels(pool)
|
84
|
+
if pool.respond_to?(:spec) # ActiveRecord <= 6.0
|
85
|
+
@metric_labels.merge(pool_name: pool.spec.name).merge(pool.spec.config
|
86
|
+
.select { |k, v| @config_labels.include? k }
|
87
|
+
.map { |k, v| [k.to_s.dup.prepend("dbconfig_"), v] }.to_h)
|
88
|
+
elsif pool.respond_to?(:db_config) # ActiveRecord >= 6.1.rc1
|
89
|
+
@metric_labels.merge(pool_name: pool.db_config.name).merge(
|
90
|
+
@config_labels.each_with_object({}) { |l, acc| acc["dbconfig_#{l}"] = pool.db_config.public_send(l) })
|
91
|
+
else
|
92
|
+
raise "Unsupported connection pool"
|
93
|
+
end
|
94
|
+
end
|
86
95
|
end
|
87
96
|
end
|
@@ -36,21 +36,12 @@ class PrometheusExporter::Middleware
|
|
36
36
|
|
37
37
|
result
|
38
38
|
ensure
|
39
|
-
status = (result && result[0]) || -1
|
40
|
-
params = env["action_dispatch.request.parameters"]
|
41
|
-
action, controller = nil
|
42
|
-
if params
|
43
|
-
action = params["action"]
|
44
|
-
controller = params["controller"]
|
45
|
-
end
|
46
39
|
|
47
40
|
obj = {
|
48
41
|
type: "web",
|
49
42
|
timings: info,
|
50
43
|
queue_time: queue_time,
|
51
|
-
|
52
|
-
controller: controller,
|
53
|
-
status: status
|
44
|
+
default_labels: default_labels(env, result)
|
54
45
|
}
|
55
46
|
labels = custom_labels(env)
|
56
47
|
if labels
|
@@ -60,6 +51,22 @@ class PrometheusExporter::Middleware
|
|
60
51
|
@client.send_json(obj)
|
61
52
|
end
|
62
53
|
|
54
|
+
def default_labels(env, result)
|
55
|
+
status = (result && result[0]) || -1
|
56
|
+
params = env["action_dispatch.request.parameters"]
|
57
|
+
action = controller = nil
|
58
|
+
if params
|
59
|
+
action = params["action"]
|
60
|
+
controller = params["controller"]
|
61
|
+
end
|
62
|
+
|
63
|
+
{
|
64
|
+
action: action || "other",
|
65
|
+
controller: controller || "other",
|
66
|
+
status: status
|
67
|
+
}
|
68
|
+
end
|
69
|
+
|
63
70
|
# allows subclasses to add custom labels based on env
|
64
71
|
def custom_labels(env)
|
65
72
|
nil
|
@@ -56,14 +56,11 @@ module PrometheusExporter::Server
|
|
56
56
|
end
|
57
57
|
|
58
58
|
def observe(obj)
|
59
|
-
default_labels =
|
60
|
-
controller: obj['controller'] || 'other',
|
61
|
-
action: obj['action'] || 'other'
|
62
|
-
}
|
59
|
+
default_labels = obj['default_labels']
|
63
60
|
custom_labels = obj['custom_labels']
|
64
61
|
labels = custom_labels.nil? ? default_labels : default_labels.merge(custom_labels)
|
65
62
|
|
66
|
-
@http_requests_total.observe(1, labels
|
63
|
+
@http_requests_total.observe(1, labels)
|
67
64
|
|
68
65
|
if timings = obj["timings"]
|
69
66
|
@http_duration_seconds.observe(timings["total_duration"], labels)
|
data/prometheus_exporter.gemspec
CHANGED
@@ -24,19 +24,23 @@ Gem::Specification.new do |spec|
|
|
24
24
|
spec.executables = ["prometheus_exporter"]
|
25
25
|
spec.require_paths = ["lib"]
|
26
26
|
|
27
|
+
spec.add_dependency "webrick"
|
28
|
+
|
27
29
|
spec.add_development_dependency "rubocop", ">= 0.69"
|
28
|
-
spec.add_development_dependency "bundler", "
|
30
|
+
spec.add_development_dependency "bundler", ">= 2.2.2"
|
29
31
|
spec.add_development_dependency "rake", "~> 13.0"
|
30
32
|
spec.add_development_dependency "minitest", "~> 5.0"
|
31
33
|
spec.add_development_dependency "guard", "~> 2.0"
|
32
|
-
spec.add_development_dependency "mini_racer", "~> 0.1"
|
34
|
+
spec.add_development_dependency "mini_racer", "~> 0.3.1"
|
33
35
|
spec.add_development_dependency "guard-minitest", "~> 2.0"
|
34
36
|
spec.add_development_dependency "oj", "~> 3.0"
|
35
37
|
spec.add_development_dependency "rack-test", "~> 0.8.3"
|
36
38
|
spec.add_development_dependency "minitest-stub-const", "~> 0.6"
|
37
39
|
spec.add_development_dependency "rubocop-discourse", ">2"
|
40
|
+
spec.add_development_dependency "appraisal", "~> 2.3"
|
41
|
+
spec.add_development_dependency "activerecord", "~> 6.0.0"
|
38
42
|
if !RUBY_ENGINE == 'jruby'
|
39
43
|
spec.add_development_dependency "raindrops", "~> 0.19"
|
40
44
|
end
|
41
|
-
spec.required_ruby_version = '>= 2.
|
45
|
+
spec.required_ruby_version = '>= 2.5.0'
|
42
46
|
end
|
metadata
CHANGED
@@ -1,15 +1,29 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: prometheus_exporter
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.7.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sam Saffron
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-
|
11
|
+
date: 2020-12-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: webrick
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
13
27
|
- !ruby/object:Gem::Dependency
|
14
28
|
name: rubocop
|
15
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -28,16 +42,16 @@ dependencies:
|
|
28
42
|
name: bundler
|
29
43
|
requirement: !ruby/object:Gem::Requirement
|
30
44
|
requirements:
|
31
|
-
- - "
|
45
|
+
- - ">="
|
32
46
|
- !ruby/object:Gem::Version
|
33
|
-
version:
|
47
|
+
version: 2.2.2
|
34
48
|
type: :development
|
35
49
|
prerelease: false
|
36
50
|
version_requirements: !ruby/object:Gem::Requirement
|
37
51
|
requirements:
|
38
|
-
- - "
|
52
|
+
- - ">="
|
39
53
|
- !ruby/object:Gem::Version
|
40
|
-
version:
|
54
|
+
version: 2.2.2
|
41
55
|
- !ruby/object:Gem::Dependency
|
42
56
|
name: rake
|
43
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -86,14 +100,14 @@ dependencies:
|
|
86
100
|
requirements:
|
87
101
|
- - "~>"
|
88
102
|
- !ruby/object:Gem::Version
|
89
|
-
version:
|
103
|
+
version: 0.3.1
|
90
104
|
type: :development
|
91
105
|
prerelease: false
|
92
106
|
version_requirements: !ruby/object:Gem::Requirement
|
93
107
|
requirements:
|
94
108
|
- - "~>"
|
95
109
|
- !ruby/object:Gem::Version
|
96
|
-
version:
|
110
|
+
version: 0.3.1
|
97
111
|
- !ruby/object:Gem::Dependency
|
98
112
|
name: guard-minitest
|
99
113
|
requirement: !ruby/object:Gem::Requirement
|
@@ -164,6 +178,34 @@ dependencies:
|
|
164
178
|
- - ">"
|
165
179
|
- !ruby/object:Gem::Version
|
166
180
|
version: '2'
|
181
|
+
- !ruby/object:Gem::Dependency
|
182
|
+
name: appraisal
|
183
|
+
requirement: !ruby/object:Gem::Requirement
|
184
|
+
requirements:
|
185
|
+
- - "~>"
|
186
|
+
- !ruby/object:Gem::Version
|
187
|
+
version: '2.3'
|
188
|
+
type: :development
|
189
|
+
prerelease: false
|
190
|
+
version_requirements: !ruby/object:Gem::Requirement
|
191
|
+
requirements:
|
192
|
+
- - "~>"
|
193
|
+
- !ruby/object:Gem::Version
|
194
|
+
version: '2.3'
|
195
|
+
- !ruby/object:Gem::Dependency
|
196
|
+
name: activerecord
|
197
|
+
requirement: !ruby/object:Gem::Requirement
|
198
|
+
requirements:
|
199
|
+
- - "~>"
|
200
|
+
- !ruby/object:Gem::Version
|
201
|
+
version: 6.0.0
|
202
|
+
type: :development
|
203
|
+
prerelease: false
|
204
|
+
version_requirements: !ruby/object:Gem::Requirement
|
205
|
+
requirements:
|
206
|
+
- - "~>"
|
207
|
+
- !ruby/object:Gem::Version
|
208
|
+
version: 6.0.0
|
167
209
|
description: Prometheus metric collector and exporter for Ruby
|
168
210
|
email:
|
169
211
|
- sam.saffron@gmail.com
|
@@ -175,6 +217,7 @@ files:
|
|
175
217
|
- ".github/workflows/ci.yml"
|
176
218
|
- ".gitignore"
|
177
219
|
- ".rubocop.yml"
|
220
|
+
- Appraisals
|
178
221
|
- CHANGELOG
|
179
222
|
- CODE_OF_CONDUCT.md
|
180
223
|
- Gemfile
|
@@ -185,6 +228,9 @@ files:
|
|
185
228
|
- bench/bench.rb
|
186
229
|
- bin/prometheus_exporter
|
187
230
|
- examples/custom_collector.rb
|
231
|
+
- gemfiles/.bundle/config
|
232
|
+
- gemfiles/ar_60.gemfile
|
233
|
+
- gemfiles/ar_61.gemfile
|
188
234
|
- lib/prometheus_exporter.rb
|
189
235
|
- lib/prometheus_exporter/client.rb
|
190
236
|
- lib/prometheus_exporter/instrumentation.rb
|
@@ -236,14 +282,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
236
282
|
requirements:
|
237
283
|
- - ">="
|
238
284
|
- !ruby/object:Gem::Version
|
239
|
-
version: 2.
|
285
|
+
version: 2.5.0
|
240
286
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
241
287
|
requirements:
|
242
288
|
- - ">="
|
243
289
|
- !ruby/object:Gem::Version
|
244
290
|
version: '0'
|
245
291
|
requirements: []
|
246
|
-
rubygems_version: 3.
|
292
|
+
rubygems_version: 3.2.2
|
247
293
|
signing_key:
|
248
294
|
specification_version: 4
|
249
295
|
summary: Prometheus Exporter
|