gds_metrics 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ae59f4c6dcfbb57dc0ad51ee689ea926b8c58dc78684df7fc749fac81192e1d0
4
- data.tar.gz: c3207917a94edd3fc16b59c7b8c0184f685fcf01e03de63ca6956f0210a5a27b
3
+ metadata.gz: 8fb3bcd923d980e4161d41cb573069239b3e6fdd711f3378ff1b1547e02669a7
4
+ data.tar.gz: 5e4500ebed2c9e26214d9d0784e82b66a18a58b9ea479b3436b3f5f8bff250d7
5
5
  SHA512:
6
- metadata.gz: aabeeedaaf9d71aef66b729d8088bfff7d1516fa542efb6d0c2a749ece6e6a2e4ce267d7124642ea0ffb6f0cfcaf1377b4b7359e9833fbb2938e7a74f04d97ec
7
- data.tar.gz: 55bb3cd96daa713840223d2c109787b73a6f94e12a52b299eafeb132b2a773c14dda90e6222256b7d3b8d11eaa17fadf6c37c4ab7b24c8f6a9bf188ae3f08dfe
6
+ metadata.gz: 7cebb8edb91fb588e5f8d4951087286699cc520818ff6ba49e5fd8da2bce4b968c56c872933a6027360695eab0d8a3fe6cb304aaf47f026dfa947ade1fd2384e
7
+ data.tar.gz: 4563e8671144d93a830115c0e16e4f35993793d8b5a9d30b1f71678767c3af6da3528d5a9a755e36ab8e209c561c651e34e6bafd1f552bd04f49c23a2f2c8c50
data/README.md CHANGED
@@ -1,5 +1,65 @@
1
1
  ## GDS Metrics
2
2
 
3
- **This is under development.**
3
+ Instrument your web app to export [Prometheus](https://prometheus.io/) metrics.
4
4
 
5
- Instrument your web app to export Prometheus metrics.
5
+ ### Overview
6
+
7
+ This gem can be added to your web app to capture metrics about how it's
8
+ performing. These metrics are served from an endpoint of your app and can be
9
+ scraped by Prometheus and turned into Grafana dashboards.
10
+
11
+ ### Setup for Rails
12
+
13
+ 1. Add the [latest version of the gem](https://rubygems.org/gems/gds_metrics) to
14
+ your Gemfile:
15
+
16
+ ```ruby
17
+ gem 'gds_metrics', '~> x.x.x'
18
+ ```
19
+
20
+ 2. Install the gem: `bundle install`
21
+ 3. Set an environment variable: `export PROMETHEUS_METRICS_PATH=/metrics`
22
+ 4. Restart your rails server: `bundle exec rails server`
23
+ 5. Visit any page of your app, e.g. [the index page](http://localhost:3000/)
24
+ 6. Visit the metrics endpoint: [localhost:3000/metrics](http://localhost:3000/metrics)
25
+
26
+ You should see a page containing metrics like `http_req_duration_seconds`.
27
+
28
+ The gem is now set up correctly.
29
+
30
+ ### Non-Rails apps
31
+
32
+ If you're not using Rails, before running your server, you'll also need to add
33
+ `GDS::Metrics::Middleware` as a
34
+ [Rack middleware](https://www.amberbit.com/blog/2011/07/13/introduction-to-rack-middleware/).
35
+ Refer to your framework's documentation for how to do this, e.g.
36
+ [Sinatra](http://sinatrarb.com/intro#Rack%20Middleware),
37
+ [Grape](https://github.com/ruby-grape/grape#using-custom-middleware).
38
+
39
+ ### Running on the PaaS
40
+
41
+ If your app runs on the [GOV.UK PaaS](https://www.cloud.service.gov.uk/), you'll
42
+ need to set the environment variable with:
43
+
44
+ ```bash
45
+ $ cf set-env your-app-name PROMETHEUS_METRICS_PATH /metrics
46
+ ```
47
+
48
+ This command makes the metrics endpoint available in production, whereas the
49
+ setup steps above only applied temporarily to the server on your local machine.
50
+
51
+ In production, this endpoint is automatically protected with authentication.
52
+ Citizens will not be able to see your metrics.
53
+
54
+ ### Adding custom metrics
55
+
56
+ This step is optional.
57
+
58
+ By default, common metrics will be recorded, but you can record your own
59
+ metrics, too. You might want to capture how many users are signed up for your
60
+ service or how many emails it's sent.
61
+
62
+ The gem is built on top of the `prometheus_ruby_client`, so you can use the
63
+ [interface it provides](https://github.com/prometheus/client_ruby#metrics) for
64
+ this. There's more documentation on types of metric
65
+ [here](https://prometheus.io/docs/concepts/metric_types/).
@@ -8,7 +8,7 @@ module GDS
8
8
  use GDS::Metrics::Gzip
9
9
  use GDS::Metrics::Auth
10
10
 
11
- use Prometheus::Client::Rack::Collector
11
+ use Prometheus::Client::Rack::Collector, registry: Proxy.new
12
12
  use Prometheus::Client::Rack::Exporter
13
13
 
14
14
  run app
@@ -1,9 +1,28 @@
1
1
  module GDS
2
2
  module Metrics
3
3
  module Mmap
4
- def self.setup
5
- directory = Config.instance.mmap_directory
6
- Prometheus::Client.configuration.multiprocess_files_dir = directory
4
+ class << self
5
+ def setup
6
+ directory = Config.instance.mmap_directory
7
+ Prometheus::Client.configuration.multiprocess_files_dir = directory
8
+ end
9
+
10
+ def clean
11
+ directory = Config.instance.mmap_directory
12
+
13
+ Dir.glob("#{directory}/*").each do |path|
14
+ next unless database_file?(path)
15
+ FileUtils.rm(path)
16
+ end
17
+ end
18
+
19
+ private
20
+
21
+ def database_file?(path)
22
+ path.end_with?(".db") && METRIC_TYPES.any? { |t| path.include?(t) }
23
+ end
24
+
25
+ METRIC_TYPES = %w(counter histogram summary).freeze
7
26
  end
8
27
  end
9
28
  end
@@ -0,0 +1,35 @@
1
+ module GDS
2
+ module Metrics
3
+ class Proxy
4
+ def initialize(registry = Prometheus::Client.registry)
5
+ @registry = registry
6
+ end
7
+
8
+ def counter(metric_name, *args)
9
+ @registry.counter(rename(metric_name), *args)
10
+ end
11
+
12
+ def histogram(metric_name, *args)
13
+ @registry.histogram(rename(metric_name), *args)
14
+ end
15
+
16
+ def summary(*)
17
+ NullSummary.new
18
+ end
19
+
20
+ private
21
+
22
+ def rename(metric_name)
23
+ {
24
+ http_requests_total: :http_server_requests_total,
25
+ http_exceptions_total: :http_server_exceptions_total,
26
+ http_req_duration_seconds: :http_server_request_duration_seconds,
27
+ }.fetch(metric_name, metric_name)
28
+ end
29
+
30
+ class NullSummary
31
+ def observe(*); end
32
+ end
33
+ end
34
+ end
35
+ end
@@ -1,5 +1,5 @@
1
1
  module GDS
2
2
  module Metrics
3
- VERSION = "0.0.1".freeze
3
+ VERSION = "0.0.2".freeze
4
4
  end
5
5
  end
data/lib/gds_metrics.rb CHANGED
@@ -7,6 +7,7 @@ require "prometheus/client/rack/exporter"
7
7
  require "gds_metrics/version"
8
8
  require "gds_metrics/mmap"
9
9
  require "gds_metrics/middleware"
10
+ require "gds_metrics/proxy"
10
11
  require "gds_metrics/config"
11
12
  require "gds_metrics/auth"
12
13
  require "gds_metrics/gzip"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gds_metrics
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Government Digital Service
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-02-13 00:00:00.000000000 Z
11
+ date: 2018-02-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: prometheus-client-mmap
@@ -121,6 +121,7 @@ files:
121
121
  - lib/gds_metrics/gzip.rb
122
122
  - lib/gds_metrics/middleware.rb
123
123
  - lib/gds_metrics/mmap.rb
124
+ - lib/gds_metrics/proxy.rb
124
125
  - lib/gds_metrics/railtie.rb
125
126
  - lib/gds_metrics/version.rb
126
127
  homepage: https://github.com/alphagov/gds_metrics_ruby