diff --git a/config/initializers/prometheus_exporter.rb b/config/initializers/prometheus_exporter.rb index fdfee59dc8..16b408977d 100644 --- a/config/initializers/prometheus_exporter.rb +++ b/config/initializers/prometheus_exporter.rb @@ -5,16 +5,12 @@ if ENV['MASTODON_PROMETHEUS_EXPORTER_ENABLED'] == 'true' require 'prometheus_exporter/middleware' if ENV['MASTODON_PROMETHEUS_EXPORTER_LOCAL'] == 'true' - require 'prometheus_exporter/server' - require 'prometheus_exporter/client' + require 'mastodon/prometheus_exporter/local_server' # bind is the address, on which the webserver will listen # port is the port that will provide the /metrics route - server = PrometheusExporter::Server::WebServer.new bind: ENV.fetch('MASTODON_PROMETHEUS_EXPORTER_HOST', 'localhost'), port: ENV.fetch('MASTODON_PROMETHEUS_EXPORTER_PORT', '9394').to_i - server.start - - # wire up a default local client - PrometheusExporter::Client.default = PrometheusExporter::LocalClient.new(collector: server.collector) + Mastodon::PrometheusExporter::LocalServer.bind = ENV.fetch('MASTODON_PROMETHEUS_EXPORTER_HOST', 'localhost') + Mastodon::PrometheusExporter::LocalServer.port = ENV.fetch('MASTODON_PROMETHEUS_EXPORTER_PORT', '9394').to_i end if ENV['MASTODON_PROMETHEUS_EXPORTER_WEB_DETAILED_METRICS'] == 'true' diff --git a/config/initializers/sidekiq.rb b/config/initializers/sidekiq.rb index b2ebdbf078..3c2f12780c 100644 --- a/config/initializers/sidekiq.rb +++ b/config/initializers/sidekiq.rb @@ -26,6 +26,12 @@ Sidekiq.configure_server do |config| require 'prometheus_exporter' require 'prometheus_exporter/instrumentation' + if ENV['MASTODON_PROMETHEUS_EXPORTER_LOCAL'] == 'true' + config.on :startup do + Mastodon::PrometheusExporter::LocalServer.setup! + end + end + config.on :startup do # Ruby process metrics (memory, GC, etc) PrometheusExporter::Instrumentation::Process.start type: 'sidekiq' diff --git a/config/puma.rb b/config/puma.rb index 4fe8f802b9..16c481a2ae 100644 --- a/config/puma.rb +++ b/config/puma.rb @@ -21,6 +21,12 @@ if ENV['MASTODON_PROMETHEUS_EXPORTER_ENABLED'] == 'true' require 'prometheus_exporter' require 'prometheus_exporter/instrumentation' + if ENV['MASTODON_PROMETHEUS_EXPORTER_LOCAL'] == 'true' + before_fork do + Mastodon::PrometheusExporter::LocalServer.setup! + end + end + on_worker_boot do # Ruby process metrics (memory, GC, etc) PrometheusExporter::Instrumentation::Process.start(type: 'puma') diff --git a/lib/mastodon/prometheus_exporter/local_server.rb b/lib/mastodon/prometheus_exporter/local_server.rb new file mode 100644 index 0000000000..31954a473b --- /dev/null +++ b/lib/mastodon/prometheus_exporter/local_server.rb @@ -0,0 +1,18 @@ +# frozen_string_literal: true + +require 'prometheus_exporter/server' +require 'prometheus_exporter/client' + +module Mastodon::PrometheusExporter + module LocalServer + mattr_accessor :bind, :port + + def self.setup! + server = PrometheusExporter::Server::WebServer.new(bind:, port:) + server.start + + # wire up a default local client + PrometheusExporter::Client.default = PrometheusExporter::LocalClient.new(collector: server.collector) + end + end +end