Initial pass at prometheus monitoring.

This is a step for #29118.

Add a single metric to count successful logins.

Summary types are not supported so remove Collector.  Either
we need to support the summary type or we need to create a
multiprocess-friendly Collector.

Add config to load prometheus and set up the Collector and the
Exporter.

Fix `Gemfile` as current prometheus-client gemspec is missing the
`mmap2` dependency.
This commit is contained in:
Kevin Lyda 2017-03-29 19:20:13 +01:00 committed by Pawel Chojnacki
parent f1cb099137
commit e4fb162186
4 changed files with 26 additions and 0 deletions

View file

@ -465,6 +465,7 @@ GEM
mimemagic (0.3.0)
mini_portile2 (2.1.0)
minitest (5.7.0)
mmap2 (2.2.6)
mousetrap-rails (1.4.6)
multi_json (1.12.1)
multi_xml (0.6.0)
@ -977,6 +978,7 @@ DEPENDENCIES
mail_room (~> 0.9.1)
method_source (~> 0.8)
minitest (~> 5.7.0)
mmap2 (~> 2.2.6)
mousetrap-rails (~> 1.4.6)
mysql2 (~> 0.3.16)
net-ssh (~> 3.0.1)

View file

@ -34,6 +34,7 @@ class SessionsController < Devise::SessionsController
end
# hide the signed-in notification
flash[:notice] = nil
PromService.instance.login.increment
log_audit_event(current_user, with: authentication_method)
log_user_activity(current_user)
end

View file

@ -0,0 +1,16 @@
require 'prometheus/client'
require 'singleton'
class PromService
include Singleton
attr_reader :login
def initialize
@prometheus = Prometheus::Client.registry
@login = Prometheus::Client::Counter.new(:login, 'Login counter')
@prometheus.register(@login)
end
end

View file

@ -13,6 +13,13 @@ if defined?(Unicorn)
# Max memory size (RSS) per worker
use Unicorn::WorkerKiller::Oom, min, max
end
# TODO(lyda): Needs to be set externally.
ENV['prometheus_multiproc_dir'] = '/tmp'
require 'prometheus/client/rack/exporter'
use Prometheus::Client::Rack::Exporter, path: '/admin/metrics'
end
require ::File.expand_path('../config/environment', __FILE__)