2019-12-21 20:55:43 +05:30
|
|
|
# frozen_string_literal: true
|
|
|
|
|
|
|
|
require 'webrick'
|
|
|
|
require 'prometheus/client/rack/exporter'
|
|
|
|
|
|
|
|
module Gitlab
|
|
|
|
module Metrics
|
|
|
|
module Exporter
|
|
|
|
class SidekiqExporter < BaseExporter
|
|
|
|
def settings
|
|
|
|
Settings.monitoring.sidekiq_exporter
|
|
|
|
end
|
|
|
|
|
|
|
|
def log_filename
|
2020-11-24 15:15:51 +05:30
|
|
|
if settings['log_enabled']
|
|
|
|
File.join(Rails.root, 'log', 'sidekiq_exporter.log')
|
|
|
|
else
|
|
|
|
File::NULL
|
|
|
|
end
|
2019-12-21 20:55:43 +05:30
|
|
|
end
|
|
|
|
|
|
|
|
private
|
|
|
|
|
|
|
|
# Sidekiq Exporter does not work properly in sidekiq-cluster
|
|
|
|
# mode. It tries to start the service on the same port for
|
|
|
|
# each of the cluster workers, this results in failure
|
|
|
|
# due to duplicate binding.
|
|
|
|
#
|
|
|
|
# For now we ignore this error, as metrics are still "kind of"
|
|
|
|
# valid as they are rendered from shared directory.
|
|
|
|
#
|
|
|
|
# Issue: https://gitlab.com/gitlab-org/gitlab/issues/5714
|
|
|
|
def start_working
|
|
|
|
super
|
|
|
|
rescue Errno::EADDRINUSE => e
|
|
|
|
Sidekiq.logger.error(
|
|
|
|
class: self.class.to_s,
|
|
|
|
message: 'Cannot start sidekiq_exporter',
|
2020-05-24 23:13:21 +05:30
|
|
|
'exception.message' => e.message
|
2019-12-21 20:55:43 +05:30
|
|
|
)
|
|
|
|
|
|
|
|
false
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|