summaryrefslogtreecommitdiff
path: root/metrics_server
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2021-12-16 00:15:50 +0000
committerGitLab Bot <gitlab-bot@gitlab.com>2021-12-16 00:15:50 +0000
commite04431d29efaf17dda9dfbfbd0c5001693b25ee4 (patch)
treef114abad1f4882ef6c9c702e8de3a84334809031 /metrics_server
parent1c898dc5c10bbedf94386d917259153d73608495 (diff)
downloadgitlab-ce-e04431d29efaf17dda9dfbfbd0c5001693b25ee4.tar.gz
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'metrics_server')
-rw-r--r--metrics_server/dependencies.rb1
-rw-r--r--metrics_server/metrics_server.rb36
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