diff options
Diffstat (limited to 'metrics_server/metrics_server.rb')
-rw-r--r-- | metrics_server/metrics_server.rb | 36 |
1 files changed, 26 insertions, 10 deletions
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 |