From e04431d29efaf17dda9dfbfbd0c5001693b25ee4 Mon Sep 17 00:00:00 2001 From: GitLab Bot Date: Thu, 16 Dec 2021 00:15:50 +0000 Subject: Add latest changes from gitlab-org/gitlab@master --- metrics_server/dependencies.rb | 1 + metrics_server/metrics_server.rb | 36 ++++++++++++++++++++++++++---------- 2 files changed, 27 insertions(+), 10 deletions(-) (limited to 'metrics_server') diff --git a/metrics_server/dependencies.rb b/metrics_server/dependencies.rb index 80e68b95ed1..a459efef1ad 100644 --- a/metrics_server/dependencies.rb +++ b/metrics_server/dependencies.rb @@ -22,5 +22,6 @@ require_relative '../lib/gitlab/metrics/exporter/base_exporter' require_relative '../lib/gitlab/metrics/exporter/sidekiq_exporter' require_relative '../lib/gitlab/health_checks/probes/collection' require_relative '../lib/gitlab/health_checks/probes/status' +require_relative '../lib/gitlab/process_management' # rubocop:enable Naming/FileName diff --git a/metrics_server/metrics_server.rb b/metrics_server/metrics_server.rb index 9dc3ba91536..56fc20dcc9d 100644 --- a/metrics_server/metrics_server.rb +++ b/metrics_server/metrics_server.rb @@ -6,17 +6,28 @@ require_relative 'dependencies' class MetricsServer # rubocop:disable Gitlab/NamespacedClass class << self - def spawn(target, gitlab_config: nil, wipe_metrics_dir: false) - cmd = "#{Rails.root}/bin/metrics-server" - env = { - 'METRICS_SERVER_TARGET' => target, - 'GITLAB_CONFIG' => gitlab_config, - 'WIPE_METRICS_DIR' => wipe_metrics_dir.to_s - } - - Process.spawn(env, cmd, err: $stderr, out: $stdout).tap do |pid| + def spawn(target, metrics_dir:, wipe_metrics_dir: false, trapped_signals: []) + raise "The only valid target is 'sidekiq' currently" unless target == 'sidekiq' + + pid = Process.fork + + if pid.nil? # nil means we're inside the fork + # Remove any custom signal handlers the parent process had registered, since we do + # not want to inherit them, and Ruby forks with a `clone` that has the `CLONE_SIGHAND` + # flag set. + Gitlab::ProcessManagement.modify_signals(trapped_signals, 'DEFAULT') + + server = MetricsServer.new(target, metrics_dir, wipe_metrics_dir) + # This rewrites /proc/cmdline, since otherwise tools like `top` will show the + # parent process `cmdline` which is really confusing. + $0 = server.name + + server.start + else Process.detach(pid) end + + pid end end @@ -34,10 +45,15 @@ class MetricsServer # rubocop:disable Gitlab/NamespacedClass FileUtils.mkdir_p(@metrics_dir, mode: 0700) ::Prometheus::CleanupMultiprocDirService.new.execute if @wipe_metrics_dir - settings = Settings.monitoring.sidekiq_exporter + settings = Settings.new(Settings.monitoring[name]) + exporter_class = "Gitlab::Metrics::Exporter::#{@target.camelize}Exporter".constantize server = exporter_class.instance(settings, synchronous: true) server.start end + + def name + "#{@target}_exporter" + end end -- cgit v1.2.1