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:
		
							parent
							
								
									f1cb099137
								
							
						
					
					
						commit
						e4fb162186
					
				|  | @ -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) | ||||
|  |  | |||
|  | @ -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 | ||||
|  |  | |||
|  | @ -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 | ||||
|  | @ -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__) | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue