Skip to content
代码片段 群组 项目
提交 93f3c1d9 编辑于 作者: Matthias Kaeppler's avatar Matthias Kaeppler
浏览文件

Configure gitlab-metrics-exporter logs

This is not in use yet, but we should already
pass in the correct settings.
上级 f8564eb7
No related branches found
No related tags found
无相关合并请求
...@@ -40,7 +40,8 @@ def start_for_sidekiq(**options) ...@@ -40,7 +40,8 @@ def start_for_sidekiq(**options)
def spawn(target, metrics_dir:, **options) def spawn(target, metrics_dir:, **options)
return spawn_ruby_server(target, metrics_dir: metrics_dir, **options) unless new_metrics_server? return spawn_ruby_server(target, metrics_dir: metrics_dir, **options) unless new_metrics_server?
settings = settings_for(target) name = settings_key(target)
settings = ::Settings.monitoring[name]
path = options[:path]&.then { |p| Pathname.new(p) } || Pathname.new('') path = options[:path]&.then { |p| Pathname.new(p) } || Pathname.new('')
cmd = path.join('gitlab-metrics-exporter').to_path cmd = path.join('gitlab-metrics-exporter').to_path
env = { env = {
...@@ -50,6 +51,13 @@ def spawn(target, metrics_dir:, **options) ...@@ -50,6 +51,13 @@ def spawn(target, metrics_dir:, **options)
'GME_SERVER_PORT' => settings['port'].to_s 'GME_SERVER_PORT' => settings['port'].to_s
} }
if settings['log_enabled']
env['GME_LOG_FILE'] = File.join(Rails.root, 'log', "#{name}.log")
env['GME_LOG_LEVEL'] = 'info'
else
env['GME_LOG_LEVEL'] = 'quiet'
end
Process.spawn(env, cmd, err: $stderr, out: $stdout, pgroup: true).tap do |pid| Process.spawn(env, cmd, err: $stderr, out: $stdout, pgroup: true).tap do |pid|
Process.detach(pid) Process.detach(pid)
end end
...@@ -104,14 +112,12 @@ def ensure_valid_target!(target) ...@@ -104,14 +112,12 @@ def ensure_valid_target!(target)
raise "Target must be one of [puma,sidekiq]" unless %w(puma sidekiq).include?(target) raise "Target must be one of [puma,sidekiq]" unless %w(puma sidekiq).include?(target)
end end
def settings_for(target) def settings_key(target)
settings_key = case target
case target when 'puma' then 'web_exporter'
when 'puma' then 'web_exporter' when 'sidekiq' then 'sidekiq_exporter'
when 'sidekiq' then 'sidekiq_exporter' else ensure_valid_target!(target)
else ensure_valid_target!(target) end
end
::Settings.monitoring[settings_key]
end end
end end
......
...@@ -97,18 +97,38 @@ ...@@ -97,18 +97,38 @@
end end
context 'for Golang server' do context 'for Golang server' do
let(:log_enabled) { false }
let(:settings) do
{
'web_exporter' => {
'enabled' => true,
'address' => 'localhost',
'port' => '8083',
'log_enabled' => log_enabled
},
'sidekiq_exporter' => {
'enabled' => true,
'address' => 'localhost',
'port' => '8082',
'log_enabled' => log_enabled
}
}
end
let(:expected_port) { target == 'puma' ? '8083' : '8082' } let(:expected_port) { target == 'puma' ? '8083' : '8082' }
let(:expected_env) do let(:expected_env) do
{ {
'GME_MMAP_METRICS_DIR' => metrics_dir, 'GME_MMAP_METRICS_DIR' => metrics_dir,
'GME_PROBES' => 'self,mmap', 'GME_PROBES' => 'self,mmap',
'GME_SERVER_HOST' => 'localhost', 'GME_SERVER_HOST' => 'localhost',
'GME_SERVER_PORT' => expected_port 'GME_SERVER_PORT' => expected_port,
'GME_LOG_LEVEL' => 'quiet'
} }
end end
before do before do
stub_env('GITLAB_GOLANG_METRICS_SERVER', '1') stub_env('GITLAB_GOLANG_METRICS_SERVER', '1')
allow(::Settings).to receive(:monitoring).and_return(settings)
end end
it 'spawns a new server process and returns its PID' do it 'spawns a new server process and returns its PID' do
...@@ -133,6 +153,24 @@ ...@@ -133,6 +153,24 @@
described_class.spawn(target, metrics_dir: metrics_dir, path: '/path/to/gme/') described_class.spawn(target, metrics_dir: metrics_dir, path: '/path/to/gme/')
end end
context 'when logs are enabled' do
let(:log_enabled) { true }
let(:expected_log_file) { target == 'puma' ? 'web_exporter.log' : 'sidekiq_exporter.log' }
it 'sets log related environment variables' do
expect(Process).to receive(:spawn).with(
expected_env.merge(
'GME_LOG_LEVEL' => 'info',
'GME_LOG_FILE' => File.join(Rails.root, 'log', expected_log_file)
),
'gitlab-metrics-exporter',
hash_including(pgroup: true)
).and_return(99)
described_class.spawn(target, metrics_dir: metrics_dir)
end
end
end end
end end
end end
......
0% 加载中 .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册