From 0aab81440f4fcf86d4b7fa3d030bd0277cf2b183 Mon Sep 17 00:00:00 2001 From: evazion Date: Sat, 11 Sep 2021 10:09:58 -0500 Subject: [PATCH] puma: add Prometheus metrics exporter. To test it, run `bin/rails server` then do `curl http://localhost:9393`. https://github.com/harmjanblok/puma-metrics --- Gemfile | 1 + Gemfile.lock | 5 +++++ config/puma.rb | 8 ++++++++ 3 files changed, 14 insertions(+) diff --git a/Gemfile b/Gemfile index 3ce5dafd9..e8fb33384 100644 --- a/Gemfile +++ b/Gemfile @@ -53,6 +53,7 @@ gem 'bcrypt_pbkdf' # https://github.com/net-ssh/net-ssh/issues/565 gem 'terminal-table' gem 'newrelic_rpm', require: false gem 'clockwork' +gem 'puma-metrics' group :production, :staging do gem 'unicorn', :platforms => :ruby diff --git a/Gemfile.lock b/Gemfile.lock index 8be564ad3..a8f18f09b 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -316,6 +316,7 @@ GEM parser (3.0.2.0) ast (~> 2.4.1) pg (1.2.3) + prometheus-client (2.1.0) pry (0.13.1) coderay (~> 1.1) method_source (~> 1.0) @@ -327,6 +328,9 @@ GEM public_suffix (4.0.6) puma (5.4.0) nio4r (~> 2.0) + puma-metrics (1.2.3) + prometheus-client (>= 0.10) + puma (>= 3.0) pundit (2.1.1) activesupport (>= 3.0.0) racc (1.5.2) @@ -557,6 +561,7 @@ DEPENDENCIES pry-byebug pry-rails puma + puma-metrics pundit rack-mini-profiler rails (~> 6.0) diff --git a/config/puma.rb b/config/puma.rb index 1c012b193..d5659076c 100644 --- a/config/puma.rb +++ b/config/puma.rb @@ -12,6 +12,7 @@ # * PUMA_WORKER_TIMEOUT # * PUMA_PIDFILE # * PUMA_CONTROL_URL +# * PUMA_METRICS_URL # # Use `bin/pumactl` to control a running Puma instance. # @@ -84,6 +85,13 @@ end # Allow puma to be restarted by `rails restart` command. plugin :tmp_restart +# Enable Prometheus metrics. +# https://github.com/harmjanblok/puma-metrics +plugin :metrics + +# Export Prometheus metrics by default on http://localhost:9393 +metrics_url ENV.fetch("PUMA_METRICS_URL", "tcp://localhost:9393") + # Start the Puma control rack application on +url+. This application can # be communicated with to control the main server. Additionally, you can # provide an authentication token, so all requests to the control server