diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2021-12-16 00:15:50 +0000 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2021-12-16 00:15:50 +0000 |
commit | e04431d29efaf17dda9dfbfbd0c5001693b25ee4 (patch) | |
tree | f114abad1f4882ef6c9c702e8de3a84334809031 /metrics_server | |
parent | 1c898dc5c10bbedf94386d917259153d73608495 (diff) | |
download | gitlab-ce-e04431d29efaf17dda9dfbfbd0c5001693b25ee4.tar.gz |
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'metrics_server')
-rw-r--r-- | metrics_server/dependencies.rb | 1 | ||||
-rw-r--r-- | metrics_server/metrics_server.rb | 36 |
2 files changed, 27 insertions, 10 deletions
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 |