summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPawel Chojnacki <pawel@chojnacki.ws>2017-11-23 00:26:50 +0100
committerPawel Chojnacki <pawel@chojnacki.ws>2017-11-23 23:32:55 +0100
commitcdcbeaccbec09fefe81b7b90badacf5308751ce9 (patch)
tree25c866a1052c9b0f7bd606618fd401359e82bed3
parentde2400f6404476e82d95f7cc6cd1fc26779c147b (diff)
downloadgitlab-ce-cdcbeaccbec09fefe81b7b90badacf5308751ce9.tar.gz
Move prometheus middle ware to prometheus initialized.
-rw-r--r--Gemfile2
-rw-r--r--Gemfile.lock4
-rw-r--r--app/views/admin/application_settings/_form.html.haml8
-rw-r--r--config/initializers/7_prometheus_metrics.rb6
-rw-r--r--config/initializers/8_metrics.rb5
-rw-r--r--db/migrate/20171122211913_add_prometheus_instrumentation_to_application_settings.rb16
-rw-r--r--lib/api/settings.rb3
-rw-r--r--lib/gitlab/metrics/method_call.rb10
8 files changed, 43 insertions, 11 deletions
diff --git a/Gemfile b/Gemfile
index af8b7287627..53820459a16 100644
--- a/Gemfile
+++ b/Gemfile
@@ -283,7 +283,7 @@ group :metrics do
gem 'influxdb', '~> 0.2', require: false
# Prometheus
- gem 'prometheus-client-mmap', '~> 0.7.0.beta33'
+ gem 'prometheus-client-mmap', '~> 0.7.0.beta36'
gem 'raindrops', '~> 0.18'
end
diff --git a/Gemfile.lock b/Gemfile.lock
index 3d18ee1ba44..69d20bdbbb3 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -625,7 +625,7 @@ GEM
parser
unparser
procto (0.0.3)
- prometheus-client-mmap (0.7.0.beta33)
+ prometheus-client-mmap (0.7.0.beta36)
mmap2 (~> 2.2, >= 2.2.9)
pry (0.10.4)
coderay (~> 1.1.0)
@@ -1111,7 +1111,7 @@ DEPENDENCIES
peek-sidekiq (~> 1.0.3)
pg (~> 0.18.2)
premailer-rails (~> 1.9.7)
- prometheus-client-mmap (~> 0.7.0.beta33)
+ prometheus-client-mmap (~> 0.7.0.beta36)
pry-byebug (~> 3.4.1)
pry-rails (~> 0.3.4)
rack-attack (~> 4.4.1)
diff --git a/app/views/admin/application_settings/_form.html.haml b/app/views/admin/application_settings/_form.html.haml
index 12658dddc06..0037d547855 100644
--- a/app/views/admin/application_settings/_form.html.haml
+++ b/app/views/admin/application_settings/_form.html.haml
@@ -361,6 +361,14 @@
%code prometheus_multiproc_dir
does not exist or is not pointing to a valid directory.
= link_to icon('question-circle'), help_page_path('administration/monitoring/prometheus/gitlab_metrics', anchor: 'metrics-shared-directory')
+ .form-group
+ .col-sm-offset-2.col-sm-10
+ .checkbox
+ = f.label :prometheus_metrics_method_instrumentation_enabled do
+ = f.check_box :prometheus_metrics_method_instrumentation_enabled
+ Track method execution time.
+ .help-block
+ Provides method execution metrics. Can adversely impact GitLab's responsiveness.
%fieldset
%legend Profiling - Performance Bar
diff --git a/config/initializers/7_prometheus_metrics.rb b/config/initializers/7_prometheus_metrics.rb
index e8f33593fe0..a9138db585f 100644
--- a/config/initializers/7_prometheus_metrics.rb
+++ b/config/initializers/7_prometheus_metrics.rb
@@ -13,7 +13,6 @@ Prometheus::Client.configure do |config|
config.pid_provider = -> do
wid = Prometheus::Client::Support::Unicorn.worker_id
- wid = Process.pid if wid.nil?
if wid.nil?
"process_pid_#{Process.pid}"
else
@@ -22,6 +21,11 @@ Prometheus::Client.configure do |config|
end
end
+Gitlab::Application.configure do |config|
+ # 0 should be Sentry to catch errors in this middleware
+ config.middleware.insert(1, Gitlab::Metrics::RequestsRackMiddleware)
+end
+
Sidekiq.configure_server do |config|
config.on(:startup) do
Gitlab::Metrics::SidekiqMetricsExporter.instance.start
diff --git a/config/initializers/8_metrics.rb b/config/initializers/8_metrics.rb
index 7ef594836d6..45b39b2a38d 100644
--- a/config/initializers/8_metrics.rb
+++ b/config/initializers/8_metrics.rb
@@ -118,11 +118,6 @@ def instrument_classes(instrumentation)
end
# rubocop:enable Metrics/AbcSize
-Gitlab::Application.configure do |config|
- # 0 should be Sentry to catch errors in this middleware
- config.middleware.insert(1, Gitlab::Metrics::RequestsRackMiddleware)
-end
-
if Gitlab::Metrics.enabled?
require 'pathname'
require 'influxdb'
diff --git a/db/migrate/20171122211913_add_prometheus_instrumentation_to_application_settings.rb b/db/migrate/20171122211913_add_prometheus_instrumentation_to_application_settings.rb
new file mode 100644
index 00000000000..9a07d1b281c
--- /dev/null
+++ b/db/migrate/20171122211913_add_prometheus_instrumentation_to_application_settings.rb
@@ -0,0 +1,16 @@
+class AddPrometheusInstrumentationToApplicationSettings < ActiveRecord::Migration
+ include Gitlab::Database::MigrationHelpers
+
+ DOWNTIME = false
+ disable_ddl_transaction!
+
+ def up
+ add_column_with_default(:application_settings, :prometheus_metrics_method_instrumentation_enabled, :boolean,
+ default: false, allow_null: false)
+ end
+
+ def down
+ remove_column(:application_settings, :prometheus_metrics_method_instrumentation_enabled)
+ end
+end
+
diff --git a/lib/api/settings.rb b/lib/api/settings.rb
index 851b226e9e5..a43f8d0497c 100644
--- a/lib/api/settings.rb
+++ b/lib/api/settings.rb
@@ -66,6 +66,9 @@ module API
optional :max_pages_size, type: Integer, desc: 'Maximum size of pages in MB'
optional :container_registry_token_expire_delay, type: Integer, desc: 'Authorization token duration (minutes)'
optional :prometheus_metrics_enabled, type: Boolean, desc: 'Enable Prometheus metrics'
+ given prometheus_metrics_enabled: ->(val) { val } do
+ requires :prometheus_metrics_method_instrumentation_enabled, type: Boolean, desc: 'Enable method call instrumentation'
+ end
optional :metrics_enabled, type: Boolean, desc: 'Enable the InfluxDB metrics'
given metrics_enabled: ->(val) { val } do
requires :metrics_host, type: String, desc: 'The InfluxDB host'
diff --git a/lib/gitlab/metrics/method_call.rb b/lib/gitlab/metrics/method_call.rb
index 90235095306..5177d953795 100644
--- a/lib/gitlab/metrics/method_call.rb
+++ b/lib/gitlab/metrics/method_call.rb
@@ -59,8 +59,10 @@ module Gitlab
@cpu_time += cpu_time
@call_count += 1
- self.class.call_real_duration_histogram.observe(@transaction.labels.merge(labels), real_time / 1000.0)
- self.class.call_cpu_duration_histogram.observe(@transaction.labels.merge(labels), cpu_time / 1000.0)
+ if prometheus_enabled?
+ self.class.call_real_duration_histogram.observe(@transaction.labels.merge(labels), real_time / 1000.0)
+ self.class.call_cpu_duration_histogram.observe(@transaction.labels.merge(labels), cpu_time / 1000.0)
+ end
retval
end
@@ -83,6 +85,10 @@ module Gitlab
def above_threshold?
real_time >= Metrics.method_call_threshold
end
+
+ def prometheus_enabled?
+ @prometheus_enabled ||= current_application_settings(:prometheus_metrics_method_instrumentation_enabled)
+ end
end
end
end