prometheus_exporter 2.0.6 → 2.0.7
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/CHANGELOG +6 -0
- data/README.md +3 -0
- data/lib/prometheus_exporter/server/metrics_container.rb +66 -0
- data/lib/prometheus_exporter/server/puma_collector.rb +4 -10
- data/lib/prometheus_exporter/server/sidekiq_process_collector.rb +4 -7
- data/lib/prometheus_exporter/server/sidekiq_queue_collector.rb +4 -5
- data/lib/prometheus_exporter/server/sidekiq_stats_collector.rb +4 -5
- data/lib/prometheus_exporter/server/type_collector.rb +2 -0
- data/lib/prometheus_exporter/server/web_server.rb +5 -0
- data/lib/prometheus_exporter/version.rb +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 25775f350202635101e313a78e969a076259861a993349069a2dad9af6090304
|
4
|
+
data.tar.gz: 403ea5cec32df2025140379fe44a4bb7a1850dfadb639c04de65f8d2f5589f79
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c03b38725cef3d3d37d9b11106980d0861892fa225d4e0ffdfcdc0178eda80902e7b89f29955b978bdc58fe496059a42a99504b29a8bc9acb4227c0661f62031
|
7
|
+
data.tar.gz: fd06bd579d2bcfdb702d40e3f2e13c33a2edfb909e938dc52b26160b5e65b5f96f1ffcd53b22e80c289f2cae013630e5017bd6e93f8b9a7cf5de3da983fae823
|
data/CHANGELOG
CHANGED
data/README.md
CHANGED
@@ -857,6 +857,9 @@ prometheus_exporter -p 8080 \
|
|
857
857
|
--prefix 'foo_'
|
858
858
|
```
|
859
859
|
|
860
|
+
You can use `-b` option to bind the `prometheus_exporter` web server to any IPv4 interface with `-b 0.0.0.0`,
|
861
|
+
any IPv6 interface with `-b ::`, or `-b ANY` to any IPv4/IPv6 interfaces available on your host system.
|
862
|
+
|
860
863
|
#### Enabling Basic Authentication
|
861
864
|
|
862
865
|
If you desire authentication on your `/metrics` route, you can enable basic authentication with the `--auth` option.
|
@@ -0,0 +1,66 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module PrometheusExporter::Server
|
4
|
+
class MetricsContainer
|
5
|
+
METRIC_MAX_AGE = 60
|
6
|
+
METRIC_EXPIRE_ATTR = "_expire_at"
|
7
|
+
|
8
|
+
attr_reader :data, :ttl
|
9
|
+
attr_accessor :filter
|
10
|
+
|
11
|
+
def initialize(ttl: METRIC_MAX_AGE, expire_attr: METRIC_EXPIRE_ATTR, filter: nil)
|
12
|
+
@data = []
|
13
|
+
@ttl = ttl
|
14
|
+
@expire_attr = expire_attr
|
15
|
+
@filter = filter
|
16
|
+
end
|
17
|
+
|
18
|
+
def <<(obj)
|
19
|
+
now = get_time
|
20
|
+
obj[@expire_attr] = now + @ttl
|
21
|
+
|
22
|
+
expire(time: now, new_metric: obj)
|
23
|
+
|
24
|
+
@data << obj
|
25
|
+
@data
|
26
|
+
end
|
27
|
+
|
28
|
+
def [](key)
|
29
|
+
@data.tap { expire }[key]
|
30
|
+
end
|
31
|
+
|
32
|
+
def size(&blk)
|
33
|
+
wrap_expire(:size, &blk)
|
34
|
+
end
|
35
|
+
alias_method :length, :size
|
36
|
+
|
37
|
+
def map(&blk)
|
38
|
+
wrap_expire(:map, &blk)
|
39
|
+
end
|
40
|
+
|
41
|
+
def each(&blk)
|
42
|
+
wrap_expire(:each, &blk)
|
43
|
+
end
|
44
|
+
|
45
|
+
def expire(time: nil, new_metric: nil)
|
46
|
+
time ||= get_time
|
47
|
+
|
48
|
+
@data.delete_if do |metric|
|
49
|
+
expired = metric[@expire_attr] < time
|
50
|
+
expired ||= filter.call(new_metric, metric) if @filter && new_metric
|
51
|
+
expired
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
private
|
56
|
+
|
57
|
+
def get_time
|
58
|
+
::Process.clock_gettime(::Process::CLOCK_MONOTONIC)
|
59
|
+
end
|
60
|
+
|
61
|
+
def wrap_expire(method_name, &blk)
|
62
|
+
expire
|
63
|
+
@data.public_send(method_name, &blk)
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
@@ -14,7 +14,10 @@ module PrometheusExporter::Server
|
|
14
14
|
}
|
15
15
|
|
16
16
|
def initialize
|
17
|
-
@puma_metrics =
|
17
|
+
@puma_metrics = MetricsContainer.new
|
18
|
+
@puma_metrics.filter = -> (new_metric, old_metric) do
|
19
|
+
new_metric["pid"] == old_metric["pid"] && new_metric["hostname"] == old_metric["hostname"]
|
20
|
+
end
|
18
21
|
end
|
19
22
|
|
20
23
|
def type
|
@@ -51,15 +54,6 @@ module PrometheusExporter::Server
|
|
51
54
|
end
|
52
55
|
|
53
56
|
def collect(obj)
|
54
|
-
now = ::Process.clock_gettime(::Process::CLOCK_MONOTONIC)
|
55
|
-
|
56
|
-
obj["created_at"] = now
|
57
|
-
|
58
|
-
@puma_metrics.delete_if do |current|
|
59
|
-
(obj["pid"] == current["pid"] && obj["hostname"] == current["hostname"]) ||
|
60
|
-
(current["created_at"] + MAX_PUMA_METRIC_AGE < now)
|
61
|
-
end
|
62
|
-
|
63
57
|
@puma_metrics << obj
|
64
58
|
end
|
65
59
|
end
|
@@ -12,7 +12,7 @@ module PrometheusExporter::Server
|
|
12
12
|
attr_reader :sidekiq_metrics, :gauges
|
13
13
|
|
14
14
|
def initialize
|
15
|
-
@sidekiq_metrics =
|
15
|
+
@sidekiq_metrics = MetricsContainer.new(ttl: MAX_SIDEKIQ_METRIC_AGE)
|
16
16
|
@gauges = {}
|
17
17
|
end
|
18
18
|
|
@@ -21,6 +21,8 @@ module PrometheusExporter::Server
|
|
21
21
|
end
|
22
22
|
|
23
23
|
def metrics
|
24
|
+
SIDEKIQ_PROCESS_GAUGES.each_key { |name| gauges[name]&.reset! }
|
25
|
+
|
24
26
|
sidekiq_metrics.map do |metric|
|
25
27
|
labels = metric.fetch('labels', {})
|
26
28
|
SIDEKIQ_PROCESS_GAUGES.map do |name, help|
|
@@ -35,12 +37,7 @@ module PrometheusExporter::Server
|
|
35
37
|
end
|
36
38
|
|
37
39
|
def collect(object)
|
38
|
-
|
39
|
-
process = object['process']
|
40
|
-
|
41
|
-
process["created_at"] = now
|
42
|
-
sidekiq_metrics.delete_if { |metric| metric['created_at'] + MAX_SIDEKIQ_METRIC_AGE < now }
|
43
|
-
sidekiq_metrics << process
|
40
|
+
@sidekiq_metrics << object["process"]
|
44
41
|
end
|
45
42
|
end
|
46
43
|
end
|
@@ -11,7 +11,7 @@ module PrometheusExporter::Server
|
|
11
11
|
attr_reader :sidekiq_metrics, :gauges
|
12
12
|
|
13
13
|
def initialize
|
14
|
-
@sidekiq_metrics =
|
14
|
+
@sidekiq_metrics = MetricsContainer.new
|
15
15
|
@gauges = {}
|
16
16
|
end
|
17
17
|
|
@@ -20,6 +20,8 @@ module PrometheusExporter::Server
|
|
20
20
|
end
|
21
21
|
|
22
22
|
def metrics
|
23
|
+
SIDEKIQ_QUEUE_GAUGES.each_key { |name| gauges[name]&.reset! }
|
24
|
+
|
23
25
|
sidekiq_metrics.map do |metric|
|
24
26
|
labels = metric.fetch("labels", {})
|
25
27
|
SIDEKIQ_QUEUE_GAUGES.map do |name, help|
|
@@ -34,12 +36,9 @@ module PrometheusExporter::Server
|
|
34
36
|
end
|
35
37
|
|
36
38
|
def collect(object)
|
37
|
-
now = ::Process.clock_gettime(::Process::CLOCK_MONOTONIC)
|
38
39
|
object['queues'].each do |queue|
|
39
|
-
queue["created_at"] = now
|
40
40
|
queue["labels"].merge!(object['custom_labels']) if object['custom_labels']
|
41
|
-
sidekiq_metrics
|
42
|
-
sidekiq_metrics << queue
|
41
|
+
@sidekiq_metrics << queue
|
43
42
|
end
|
44
43
|
end
|
45
44
|
end
|
@@ -18,7 +18,7 @@ module PrometheusExporter::Server
|
|
18
18
|
attr_reader :sidekiq_metrics, :gauges
|
19
19
|
|
20
20
|
def initialize
|
21
|
-
@sidekiq_metrics =
|
21
|
+
@sidekiq_metrics = MetricsContainer.new(ttl: MAX_SIDEKIQ_METRIC_AGE)
|
22
22
|
@gauges = {}
|
23
23
|
end
|
24
24
|
|
@@ -27,6 +27,8 @@ module PrometheusExporter::Server
|
|
27
27
|
end
|
28
28
|
|
29
29
|
def metrics
|
30
|
+
SIDEKIQ_STATS_GAUGES.each_key { |name| gauges[name]&.reset! }
|
31
|
+
|
30
32
|
sidekiq_metrics.map do |metric|
|
31
33
|
SIDEKIQ_STATS_GAUGES.map do |name, help|
|
32
34
|
if (value = metric['stats'][name])
|
@@ -40,10 +42,7 @@ module PrometheusExporter::Server
|
|
40
42
|
end
|
41
43
|
|
42
44
|
def collect(object)
|
43
|
-
|
44
|
-
object['created_at'] = now
|
45
|
-
sidekiq_metrics.delete_if { |metric| metric['created_at'] + MAX_SIDEKIQ_METRIC_AGE < now }
|
46
|
-
sidekiq_metrics << object
|
45
|
+
@sidekiq_metrics << object
|
47
46
|
end
|
48
47
|
end
|
49
48
|
end
|
@@ -44,6 +44,11 @@ module PrometheusExporter::Server
|
|
44
44
|
|
45
45
|
@logger.info "Using Basic Authentication via #{@auth}" if @verbose && @auth
|
46
46
|
|
47
|
+
if %w(ALL ANY).include?(@bind)
|
48
|
+
@logger.info "Listening on both 0.0.0.0/:: network interfaces"
|
49
|
+
@bind = nil
|
50
|
+
end
|
51
|
+
|
47
52
|
@server = WEBrick::HTTPServer.new(
|
48
53
|
Port: @port,
|
49
54
|
BindAddress: @bind,
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: prometheus_exporter
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.0.
|
4
|
+
version: 2.0.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sam Saffron
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2023-01-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: webrick
|
@@ -289,6 +289,7 @@ files:
|
|
289
289
|
- lib/prometheus_exporter/server/collector_base.rb
|
290
290
|
- lib/prometheus_exporter/server/delayed_job_collector.rb
|
291
291
|
- lib/prometheus_exporter/server/hutch_collector.rb
|
292
|
+
- lib/prometheus_exporter/server/metrics_container.rb
|
292
293
|
- lib/prometheus_exporter/server/process_collector.rb
|
293
294
|
- lib/prometheus_exporter/server/puma_collector.rb
|
294
295
|
- lib/prometheus_exporter/server/resque_collector.rb
|