prometheus_exporter 0.5.3 → 0.8.1
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 +42 -0
- data/.gitignore +2 -0
- data/.rubocop.yml +5 -0
- data/Appraisals +10 -0
- data/CHANGELOG +28 -0
- data/README.md +138 -16
- data/bin/prometheus_exporter +29 -2
- data/gemfiles/.bundle/config +2 -0
- data/gemfiles/ar_60.gemfile +5 -0
- data/gemfiles/ar_61.gemfile +7 -0
- data/lib/prometheus_exporter.rb +1 -0
- data/lib/prometheus_exporter/client.rb +39 -8
- data/lib/prometheus_exporter/instrumentation.rb +1 -0
- data/lib/prometheus_exporter/instrumentation/active_record.rb +19 -12
- data/lib/prometheus_exporter/instrumentation/delayed_job.rb +3 -2
- data/lib/prometheus_exporter/instrumentation/method_profiler.rb +2 -1
- data/lib/prometheus_exporter/instrumentation/process.rb +1 -1
- data/lib/prometheus_exporter/instrumentation/puma.rb +17 -5
- data/lib/prometheus_exporter/instrumentation/resque.rb +40 -0
- data/lib/prometheus_exporter/instrumentation/sidekiq.rb +44 -3
- data/lib/prometheus_exporter/instrumentation/sidekiq_queue.rb +13 -2
- data/lib/prometheus_exporter/instrumentation/unicorn.rb +1 -1
- data/lib/prometheus_exporter/middleware.rb +40 -17
- data/lib/prometheus_exporter/server.rb +1 -0
- data/lib/prometheus_exporter/server/active_record_collector.rb +2 -1
- data/lib/prometheus_exporter/server/collector.rb +1 -0
- data/lib/prometheus_exporter/server/delayed_job_collector.rb +9 -8
- data/lib/prometheus_exporter/server/puma_collector.rb +9 -1
- data/lib/prometheus_exporter/server/resque_collector.rb +54 -0
- data/lib/prometheus_exporter/server/runner.rb +13 -3
- data/lib/prometheus_exporter/server/sidekiq_collector.rb +2 -2
- data/lib/prometheus_exporter/server/web_collector.rb +2 -5
- data/lib/prometheus_exporter/server/web_server.rb +33 -23
- data/lib/prometheus_exporter/version.rb +1 -1
- data/prometheus_exporter.gemspec +7 -3
- metadata +59 -11
- data/.travis.yml +0 -12
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 47861f365c3db51e840d0c62e30120518dfc64fe208cc639ae6653903d14c578
|
4
|
+
data.tar.gz: 8e67b542b68012b0bd2cb64122eb2ba987a18eed1397449cab4363eea009ba44
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1f4ff589012b8f28f81ee3b63f7535c1eb138c232826da36f1b621dc6381398e7fa515aca6b6413423e965630d23b47ad9b505801d418e3c9a625c7d7a0c7030
|
7
|
+
data.tar.gz: d457d6d2c60c11960b6b241d5f2e0864994f11f808624845b9f28a42968dc3b9da07214321631d9f1644b2fdcad4b5ad443c843c53416ad6326afae68bd4d879
|
@@ -0,0 +1,42 @@
|
|
1
|
+
name: Test Exporter
|
2
|
+
|
3
|
+
on:
|
4
|
+
push:
|
5
|
+
pull_request:
|
6
|
+
schedule:
|
7
|
+
- cron: '0 0 * * 0' # weekly
|
8
|
+
|
9
|
+
jobs:
|
10
|
+
build:
|
11
|
+
runs-on: ubuntu-latest
|
12
|
+
name: Ruby ${{ matrix.ruby }}
|
13
|
+
strategy:
|
14
|
+
matrix:
|
15
|
+
ruby: ["3.0","2.7", "2.6"]
|
16
|
+
steps:
|
17
|
+
- uses: actions/checkout@master
|
18
|
+
with:
|
19
|
+
fetch-depth: 1
|
20
|
+
- uses: actions/setup-ruby@v1
|
21
|
+
with:
|
22
|
+
ruby-version: ${{ matrix.ruby }}
|
23
|
+
- uses: actions/cache@v2
|
24
|
+
with:
|
25
|
+
path: vendor/bundle
|
26
|
+
key: ${{ runner.os }}-${{ matrix.ruby }}-gems-v2-${{ hashFiles('**/Gemfile.lock') }}
|
27
|
+
restore-keys: |
|
28
|
+
${{ runner.os }}-${{ matrix.ruby }}-gems-v2-
|
29
|
+
- name: Setup gems
|
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
|
34
|
+
bundle config path vendor/bundle
|
35
|
+
bundle install --jobs 4
|
36
|
+
bundle exec appraisal install
|
37
|
+
- name: Rubocop
|
38
|
+
run: bundle exec rubocop
|
39
|
+
- name: install gems
|
40
|
+
run: bundle exec appraisal bundle
|
41
|
+
- name: Run tests
|
42
|
+
run: bundle exec appraisal rake
|
data/.gitignore
CHANGED
data/.rubocop.yml
CHANGED
data/Appraisals
ADDED
data/CHANGELOG
CHANGED
@@ -1,3 +1,31 @@
|
|
1
|
+
0.8.1 - 04-08-2021
|
2
|
+
|
3
|
+
- FEATURE: swap from hardcoded STDERR to logger pattern (see README for details)
|
4
|
+
|
5
|
+
0.8.0 - 05-07-2021
|
6
|
+
|
7
|
+
- FIX: handle ThreadError more gracefully in cases where process shuts down
|
8
|
+
- FEATURE: add job_name and queue_name labels to delayed job metrics
|
9
|
+
- FEATURE: always scope puma metrics on hostname in collector
|
10
|
+
- FEATURE: add customizable labels option to puma collector
|
11
|
+
- FEATURE: support for Resque
|
12
|
+
- DEV: Remove support for EOL ruby 2.5
|
13
|
+
- FIX: Add source location to MethodProfiler patches
|
14
|
+
- FEATURE: Improve Active Record instrumentation
|
15
|
+
- FEATURE: Support HTTP_X_AMZN_TRACE_ID when supplied
|
16
|
+
|
17
|
+
0.7.0 - 29-12-2020
|
18
|
+
|
19
|
+
- Dev: Removed support from EOL rubies, only 2.5, 2.6, 2.7 and 3.0 are supported now.
|
20
|
+
- Dev: Better support for Ruby 3.0, explicitly depending on webrick
|
21
|
+
- Dev: Rails 6.1 instrumentation support
|
22
|
+
- FEATURE: clean pattern for overriding middleware labels was introduced (in README)
|
23
|
+
- Fix: Better support for forking
|
24
|
+
|
25
|
+
0.6.0 - 17-11-2020
|
26
|
+
|
27
|
+
- FEATURE: add support for basic-auth in the prometheus_exporter web server
|
28
|
+
|
1
29
|
0.5.3 - 29-07-2020
|
2
30
|
|
3
31
|
- FEATURE: added #remove to all metric types so users can remove specific labels if needed
|
data/README.md
CHANGED
@@ -19,6 +19,7 @@ To learn more see [Instrumenting Rails with Prometheus](https://samsaffron.com/a
|
|
19
19
|
* [Hutch metrics](#hutch-message-processing-tracer)
|
20
20
|
* [Puma metrics](#puma-metrics)
|
21
21
|
* [Unicorn metrics](#unicorn-process-metrics)
|
22
|
+
* [Resque metrics](#resque-metrics)
|
22
23
|
* [Custom type collectors](#custom-type-collectors)
|
23
24
|
* [Multi process mode with custom collector](#multi-process-mode-with-custom-collector)
|
24
25
|
* [GraphQL support](#graphql-support)
|
@@ -27,13 +28,14 @@ To learn more see [Instrumenting Rails with Prometheus](https://samsaffron.com/a
|
|
27
28
|
* [Client default host](#client-default-host)
|
28
29
|
* [Transport concerns](#transport-concerns)
|
29
30
|
* [JSON generation and parsing](#json-generation-and-parsing)
|
31
|
+
* [Logging](#logging)
|
30
32
|
* [Contributing](#contributing)
|
31
33
|
* [License](#license)
|
32
34
|
* [Code of Conduct](#code-of-conduct)
|
33
35
|
|
34
36
|
## Requirements
|
35
37
|
|
36
|
-
Minimum Ruby of version 2.
|
38
|
+
Minimum Ruby of version 2.5.0 is required, Ruby 2.4.0 is EOL as of 2020-04-05
|
37
39
|
|
38
40
|
## Installation
|
39
41
|
|
@@ -200,12 +202,53 @@ $ bundle exec prometheus_exporter
|
|
200
202
|
| Summary | `http_sql_duration_seconds`² | Time spent in HTTP reqs in SQL in seconds |
|
201
203
|
| Summary | `http_queue_duration_seconds`³ | Time spent queueing the request in load balancer in seconds |
|
202
204
|
|
203
|
-
All metrics have a `controller` and an `action` label.
|
204
|
-
`http_requests_total` additionally has a (HTTP response) `status` label.
|
205
|
+
All metrics have a `controller` and an `action` label.
|
206
|
+
`http_requests_total` additionally has a (HTTP response) `status` label.
|
205
207
|
|
206
|
-
|
207
|
-
|
208
|
-
|
208
|
+
To add your own labels to the default metrics, create a subclass of `PrometheusExporter::Middleware`, override `custom_labels`, and use it in your initializer.
|
209
|
+
```ruby
|
210
|
+
class MyMiddleware < PrometheusExporter::Middleware
|
211
|
+
def custom_labels(env)
|
212
|
+
labels = {}
|
213
|
+
|
214
|
+
if env['HTTP_X_PLATFORM']
|
215
|
+
labels['platform'] = env['HTTP_X_PLATFORM']
|
216
|
+
end
|
217
|
+
|
218
|
+
labels
|
219
|
+
end
|
220
|
+
end
|
221
|
+
```
|
222
|
+
|
223
|
+
If you're not using Rails like framework, you can extend `PrometheusExporter::Middleware#default_labels` in a way to add more relevant labels.
|
224
|
+
For example you can mimic [prometheus-client](https://github.com/prometheus/client_ruby) labels with code like this:
|
225
|
+
```ruby
|
226
|
+
class MyMiddleware < PrometheusExporter::Middleware
|
227
|
+
def default_labels(env, result)
|
228
|
+
status = (result && result[0]) || -1
|
229
|
+
path = [env["SCRIPT_NAME"], env["PATH_INFO"]].join
|
230
|
+
{
|
231
|
+
path: strip_ids_from_path(path),
|
232
|
+
method: env["REQUEST_METHOD"],
|
233
|
+
status: status
|
234
|
+
}
|
235
|
+
end
|
236
|
+
|
237
|
+
def strip_ids_from_path(path)
|
238
|
+
path
|
239
|
+
.gsub(%r{/[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}(/|$)}, '/:uuid\\1')
|
240
|
+
.gsub(%r{/\d+(/|$)}, '/:id\\1')
|
241
|
+
end
|
242
|
+
end
|
243
|
+
```
|
244
|
+
That way you won't have all metrics labeled with `controller=other` and `action=other`, but have labels such as
|
245
|
+
```
|
246
|
+
ruby_http_duration_seconds{path="/api/v1/teams/:id",method="GET",status="200",quantile="0.99"} 0.009880661998977303
|
247
|
+
```
|
248
|
+
|
249
|
+
¹) Only available when Redis is used.
|
250
|
+
²) Only available when Mysql or PostgreSQL are used.
|
251
|
+
³) Only available when [Instrumenting Request Queueing Time](#instrumenting-request-queueing-time) is set up.
|
209
252
|
|
210
253
|
#### Activerecord Connection Pool Metrics
|
211
254
|
|
@@ -365,19 +408,19 @@ Sometimes the Sidekiq server shuts down before it can send metrics, that were ge
|
|
365
408
|
**PrometheusExporter::Instrumentation::Sidekiq**
|
366
409
|
| Type | Name | Description |
|
367
410
|
| --- | --- | --- |
|
368
|
-
|
|
411
|
+
| Summary | `sidekiq_job_duration_seconds` | Time spent in sidekiq jobs |
|
369
412
|
| Counter | `sidekiq_jobs_total` | Total number of sidekiq jobs executed |
|
370
413
|
| Counter | `sidekiq_restarted_jobs_total` | Total number of sidekiq jobs that we restarted because of a sidekiq shutdown |
|
371
414
|
| Counter | `sidekiq_failed_jobs_total` | Total number of failed sidekiq jobs |
|
372
415
|
|
373
|
-
All metrics have a `job_name` label.
|
416
|
+
All metrics have a `job_name` label and a `queue` label.
|
374
417
|
|
375
418
|
**PrometheusExporter::Instrumentation::Sidekiq.death_handler**
|
376
419
|
| Type | Name | Description |
|
377
420
|
| --- | --- | --- |
|
378
421
|
| Counter | `sidekiq_dead_jobs_total` | Total number of dead sidekiq jobs |
|
379
422
|
|
380
|
-
This metric
|
423
|
+
This metric has a `job_name` label and a `queue` label.
|
381
424
|
|
382
425
|
**PrometheusExporter::Instrumentation::SidekiqQueue**
|
383
426
|
| Type | Name | Description |
|
@@ -387,7 +430,7 @@ This metric also has a `job_name` label.
|
|
387
430
|
|
388
431
|
Both metrics will have a `queue` label with the name of the queue.
|
389
432
|
|
390
|
-
_See [Metrics collected by Process Instrumentation](#metrics-collected-by-process-instrumentation) for a list of metrics the Process instrumentation will produce._
|
433
|
+
_See [Metrics collected by Process Instrumentation](#metrics-collected-by-process-instrumentation) for a list of metrics the Process instrumentation will produce._
|
391
434
|
|
392
435
|
#### Shoryuken metrics
|
393
436
|
|
@@ -411,7 +454,7 @@ end
|
|
411
454
|
| Counter | `shoryuken_restarted_jobs_total` | Total number of shoryuken jobs that we restarted because of a shoryuken shutdown |
|
412
455
|
| Counter | `shoryuken_failed_jobs_total` | Total number of failed shoryuken jobs |
|
413
456
|
|
414
|
-
All metrics have labels for `job_name` and `queue_name`.
|
457
|
+
All metrics have labels for `job_name` and `queue_name`.
|
415
458
|
|
416
459
|
#### Delayed Job plugin
|
417
460
|
|
@@ -437,6 +480,8 @@ end
|
|
437
480
|
| Summary | `delayed_job_duration_seconds_summary` | Summary of the time it takes jobs to execute | `status` |
|
438
481
|
| Summary | `delayed_job_attempts_summary` | Summary of the amount of attempts it takes delayed jobs to succeed | - |
|
439
482
|
|
483
|
+
All metrics have labels for `job_name` and `queue_name`.
|
484
|
+
|
440
485
|
#### Hutch Message Processing Tracer
|
441
486
|
|
442
487
|
Capture [Hutch](https://github.com/gocardless/hutch) metrics (how many jobs ran? how many failed? how long did they take?)
|
@@ -456,7 +501,7 @@ end
|
|
456
501
|
| Counter | `hutch_jobs_total` | Total number of hutch jobs executed |
|
457
502
|
| Counter | `hutch_failed_jobs_total` | Total number failed hutch jobs executed |
|
458
503
|
|
459
|
-
All metrics have a `job_name` label.
|
504
|
+
All metrics have a `job_name` label.
|
460
505
|
|
461
506
|
#### Instrumenting Request Queueing Time
|
462
507
|
|
@@ -464,7 +509,7 @@ Request Queueing is defined as the time it takes for a request to reach your app
|
|
464
509
|
|
465
510
|
As this metric starts before `prometheus_exporter` can handle the request, you must add a specific HTTP header as early in your infrastructure as possible (we recommend your load balancer or reverse proxy).
|
466
511
|
|
467
|
-
|
512
|
+
The Amazon Application Load Balancer [request tracing header](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-request-tracing.html) is natively supported. If you are using another upstream entrypoint, you may configure your HTTP server / load balancer to add a header `X-Request-Start: t=<MSEC>` when passing the request upstream. For more information, please consult your software manual.
|
468
513
|
|
469
514
|
Hint: we aim to be API-compatible with the big APM solutions, so if you've got requests queueing time configured for them, it should be expected to also work with `prometheus_exporter`.
|
470
515
|
|
@@ -494,7 +539,29 @@ end
|
|
494
539
|
| Gauge | `puma_thread_pool_capacity_total` | Number of puma threads available at current scale |
|
495
540
|
| Gauge | `puma_max_threads_total` | Number of puma threads at available at max scale |
|
496
541
|
|
497
|
-
All metrics may have a `phase` label.
|
542
|
+
All metrics may have a `phase` label and all custom labels provided with the `labels` option.
|
543
|
+
|
544
|
+
### Resque metrics
|
545
|
+
|
546
|
+
The resque metrics are using the `Resque.info` method, which queries Redis internally. To start monitoring your resque
|
547
|
+
installation, you'll need to start the instrumentation:
|
548
|
+
|
549
|
+
```ruby
|
550
|
+
# e.g. config/initializers/resque.rb
|
551
|
+
require 'prometheus_exporter/instrumentation'
|
552
|
+
PrometheusExporter::Instrumentation::Resque.start
|
553
|
+
```
|
554
|
+
|
555
|
+
#### Metrics collected by Resque Instrumentation
|
556
|
+
|
557
|
+
| Type | Name | Description |
|
558
|
+
| --- | --- | --- |
|
559
|
+
| Gauge | `processed_jobs_total` | Total number of processed Resque jobs |
|
560
|
+
| Gauge | `failed_jobs_total` | Total number of failed Resque jobs |
|
561
|
+
| Gauge | `pending_jobs_total` | Total number of pending Resque jobs |
|
562
|
+
| Gauge | `queues_total` | Total number of Resque queues |
|
563
|
+
| Gauge | `workers_total` | Total number of Resque workers running |
|
564
|
+
| Gauge | `working_total` | Total number of Resque workers working |
|
498
565
|
|
499
566
|
### Unicorn process metrics
|
500
567
|
|
@@ -577,8 +644,8 @@ Then you can collect the metrics you need on demand:
|
|
577
644
|
|
578
645
|
```ruby
|
579
646
|
def metrics
|
580
|
-
|
581
|
-
|
647
|
+
user_count_gauge = PrometheusExporter::Metric::Gauge.new('user_count', 'number of users in the app')
|
648
|
+
user_count_gauge.observe User.count
|
582
649
|
[user_count_gauge]
|
583
650
|
end
|
584
651
|
```
|
@@ -692,6 +759,25 @@ ruby_web_requests{hostname="app-server-01"} 1
|
|
692
759
|
When running the process for `prometheus_exporter` using `bin/prometheus_exporter`, there are several configurations that
|
693
760
|
can be passed in:
|
694
761
|
|
762
|
+
```
|
763
|
+
Usage: prometheus_exporter [options]
|
764
|
+
-p, --port INTEGER Port exporter should listen on (default: 9394)
|
765
|
+
-b, --bind STRING IP address exporter should listen on (default: localhost)
|
766
|
+
-t, --timeout INTEGER Timeout in seconds for metrics endpoint (default: 2)
|
767
|
+
--prefix METRIC_PREFIX Prefix to apply to all metrics (default: ruby_)
|
768
|
+
--label METRIC_LABEL Label to apply to all metrics (default: {})
|
769
|
+
-c, --collector FILE (optional) Custom collector to run
|
770
|
+
-a, --type-collector FILE (optional) Custom type collectors to run in main collector
|
771
|
+
-v, --verbose
|
772
|
+
--auth FILE (optional) enable basic authentication using a htpasswd FILE
|
773
|
+
--realm REALM (optional) Use REALM for basic authentication (default: "Prometheus Exporter")
|
774
|
+
--unicorn-listen-address ADDRESS
|
775
|
+
(optional) Address where unicorn listens on (unix or TCP address)
|
776
|
+
--unicorn-master PID_FILE (optional) PID file of unicorn master process to monitor unicorn
|
777
|
+
```
|
778
|
+
|
779
|
+
#### Example
|
780
|
+
|
695
781
|
The following will run the process at
|
696
782
|
- Port `8080` (default `9394`)
|
697
783
|
- Bind to `0.0.0.0` (default `localhost`)
|
@@ -707,6 +793,29 @@ prometheus_exporter -p 8080 \
|
|
707
793
|
--prefix 'foo_'
|
708
794
|
```
|
709
795
|
|
796
|
+
#### Enabling Basic Authentication
|
797
|
+
|
798
|
+
If you desire authentication on your `/metrics` route, you can enable basic authentication with the `--auth` option.
|
799
|
+
|
800
|
+
```
|
801
|
+
$ prometheus_exporter --auth my-htpasswd-file
|
802
|
+
```
|
803
|
+
|
804
|
+
Additionally, the `--realm` option may be used to provide a customized realm for the challenge request.
|
805
|
+
|
806
|
+
Notes:
|
807
|
+
|
808
|
+
* You will need to create a `htpasswd` formatted file before hand which contains one or more user:password entries
|
809
|
+
* Only the basic `crypt` encryption is currently supported
|
810
|
+
|
811
|
+
A simple `htpasswd` file can be created with the Apache `htpasswd` utility; e.g:
|
812
|
+
|
813
|
+
```
|
814
|
+
$ htpasswd -cdb my-htpasswd-file my-user my-unencrypted-password
|
815
|
+
```
|
816
|
+
|
817
|
+
This will create a file named `my-htpasswd-file` which is suitable for use the `--auth` option.
|
818
|
+
|
710
819
|
### Client default labels
|
711
820
|
|
712
821
|
You can specify a default label for instrumentation metrics sent by a specific client. For example:
|
@@ -742,6 +851,19 @@ The `PrometheusExporter::Client` class has the method `#send-json`. This method,
|
|
742
851
|
|
743
852
|
When `PrometheusExporter::Server::Collector` parses your JSON, by default it will use the faster Oj deserializer if available. This happens cause it only expects a simple Hash out of the box. You can opt in for the default JSON deserializer with `json_serializer: :json`.
|
744
853
|
|
854
|
+
## Logging
|
855
|
+
|
856
|
+
`PrometheusExporter::Client.default` will export to `STDERR`. To change this, you can pass your own logger:
|
857
|
+
```ruby
|
858
|
+
PrometheusExporter::Client.new(logger: Rails.logger)
|
859
|
+
PrometheusExporter::Client.new(logger: Logger.new(STDOUT))
|
860
|
+
```
|
861
|
+
|
862
|
+
You can also pass a log level (default is [`Logger::WARN`](https://ruby-doc.org/stdlib-3.0.1/libdoc/logger/rdoc/Logger.html)):
|
863
|
+
```ruby
|
864
|
+
PrometheusExporter::Client.new(log_level: Logger::DEBUG)
|
865
|
+
```
|
866
|
+
|
745
867
|
## Contributing
|
746
868
|
|
747
869
|
Bug reports and pull requests are welcome on GitHub at https://github.com/discourse/prometheus_exporter. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct.
|
data/bin/prometheus_exporter
CHANGED
@@ -3,12 +3,15 @@
|
|
3
3
|
|
4
4
|
require 'optparse'
|
5
5
|
require 'json'
|
6
|
+
require 'logger'
|
6
7
|
|
7
8
|
require_relative "./../lib/prometheus_exporter"
|
8
9
|
require_relative "./../lib/prometheus_exporter/server"
|
9
10
|
|
10
11
|
def run
|
11
|
-
options = {
|
12
|
+
options = {
|
13
|
+
logger_path: STDERR
|
14
|
+
}
|
12
15
|
custom_collector_filename = nil
|
13
16
|
custom_type_collectors_filenames = []
|
14
17
|
|
@@ -47,6 +50,12 @@ def run
|
|
47
50
|
opt.on('-v', '--verbose') do |o|
|
48
51
|
options[:verbose] = true
|
49
52
|
end
|
53
|
+
opt.on('--auth FILE', String, "(optional) enable basic authentication using a htpasswd FILE") do |o|
|
54
|
+
options[:auth] = o
|
55
|
+
end
|
56
|
+
opt.on('--realm REALM', String, "(optional) Use REALM for basic authentication (default: \"#{PrometheusExporter::DEFAULT_REALM}\")") do |o|
|
57
|
+
options[:realm] = o
|
58
|
+
end
|
50
59
|
|
51
60
|
opt.on('--unicorn-listen-address ADDRESS', String, '(optional) Address where unicorn listens on (unix or TCP address)') do |o|
|
52
61
|
options[:unicorn_listen_address] = o
|
@@ -55,8 +64,26 @@ def run
|
|
55
64
|
opt.on('--unicorn-master PID_FILE', String, '(optional) PID file of unicorn master process to monitor unicorn') do |o|
|
56
65
|
options[:unicorn_pid_file] = o
|
57
66
|
end
|
67
|
+
|
68
|
+
opt.on('--logger-path PATH', String, '(optional) Path to file for logger output. Defaults to STDERR') do |o|
|
69
|
+
options[:logger_path] = o
|
70
|
+
end
|
58
71
|
end.parse!
|
59
72
|
|
73
|
+
logger = Logger.new(options[:logger_path])
|
74
|
+
logger.level = Logger::WARN
|
75
|
+
|
76
|
+
if options.has_key?(:realm) && !options.has_key?(:auth)
|
77
|
+
logger.warn "Providing REALM without AUTH has no effect"
|
78
|
+
end
|
79
|
+
|
80
|
+
if options.has_key?(:auth)
|
81
|
+
unless File.exist?(options[:auth]) && File.readable?(options[:auth])
|
82
|
+
logger.fatal "The AUTH file either doesn't exist or we don't have access to it"
|
83
|
+
exit 1
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
60
87
|
if custom_collector_filename
|
61
88
|
eval File.read(custom_collector_filename), nil, File.expand_path(custom_collector_filename)
|
62
89
|
found = false
|
@@ -71,7 +98,7 @@ def run
|
|
71
98
|
end
|
72
99
|
|
73
100
|
if !found
|
74
|
-
|
101
|
+
logger.fatal "Can not find a class inheriting off PrometheusExporter::Server::CollectorBase"
|
75
102
|
exit 1
|
76
103
|
end
|
77
104
|
end
|