Merge branch 'sh-redis-exporter-fix' into 'master'

Make redis-exporter work with external Redis instances

See merge request https://gitlab.com/gitlab-org/omnibus-gitlab/-/merge_requests/7326

Merged-by: Balasankar 'Balu' C <balasankar@gitlab.com>
Approved-by: Jason Plum <jplum@gitlab.com>
Approved-by: Balasankar 'Balu' C <balasankar@gitlab.com>
Co-authored-by: Stan Hu <stanhu@gmail.com>
This commit is contained in:
Balasankar 'Balu' C 2024-02-07 19:13:39 +00:00
commit dd6cff1597
5 changed files with 66 additions and 4 deletions

View File

@ -118,13 +118,16 @@ module Prometheus
user_config = Gitlab['redis_exporter']
listen_address = user_config['listen_address'] || default_config['listen_address']
disable_client_name = Gitlab['gitlab_rails']['redis_enable_client'] == false
default_config['flags'] = {
'web.listen-address' => listen_address,
'redis.addr' => "unix://#{Gitlab['node']['gitlab']['gitlab_rails']['redis_socket']}"
'web.listen-address' => listen_address
}
default_config['flags']['set-client-name'] = 'false' if disable_client_name
default_config['flags'].merge!(user_config['flags']) if user_config.key?('flags')
# redis.addr is set in the recipe
Gitlab['redis_exporter']['flags'] = default_config['flags']
end

View File

@ -43,13 +43,17 @@ env_dir redis_exporter_static_etc_dir do
end
runtime_flags = PrometheusHelper.new(node).flags('redis_exporter')
redis_helper = NewRedisHelper::RedisExporter.new(node)
redis_url = redis_helper.formatted_redis_url
runit_service 'redis-exporter' do
options({
log_directory: logging_settings[:log_directory],
log_user: logging_settings[:runit_owner],
log_group: logging_settings[:runit_group],
flags: runtime_flags,
env_dir: redis_exporter_static_etc_dir
env_dir: redis_exporter_static_etc_dir,
redis_url: redis_url,
}.merge(params))
log_options logging_settings[:options]
end

View File

@ -5,4 +5,4 @@ umask 077
exec chpst -P -e <%= @options[:env_dir] %> \
-U <%= node['redis']['username'] %>:<%= node['gitlab']['user']['group'] %> \
-u <%= node['redis']['username'] %>:<%= node['gitlab']['user']['group'] %> \
/opt/gitlab/embedded/bin/redis_exporter <%= @options[:flags] %>
/opt/gitlab/embedded/bin/redis_exporter <%= @options[:flags] %> --redis.addr=<%= @options[:redis_url] %>

View File

@ -0,0 +1,27 @@
# frozen_string_literal: true
module NewRedisHelper
class RedisExporter < NewRedisHelper::Base
def redis_params
{
url: redis_url
}
end
def formatted_redis_url
url = redis_url
url.scheme == 'unix' ? "unix://#{url.path}" : url.to_s
end
private
def node_access_keys
%w[gitlab gitlab_rails]
end
def support_sentinel_groupname?
false
end
end
end

View File

@ -67,6 +67,34 @@ RSpec.describe 'monitoring::redis-exporter' do
end
end
context 'when redis-exporter is enabled for an external Redis' do
let(:config_template) { chef_run.template('/opt/gitlab/sv/redis-exporter/log/config') }
before do
stub_gitlab_rb(
redis_exporter: { enable: true },
gitlab_rails: {
redis_host: '1.2.3.4',
redis_port: 6378,
redis_ssl: true,
redis_password: 'some-password',
redis_enable_client: false
}
)
end
it_behaves_like 'enabled runit service', 'redis-exporter', 'root', 'root'
it 'sets flags' do
expect(chef_run).to render_file('/opt/gitlab/sv/redis-exporter/run')
.with_content(/web.listen-address=localhost:9121/)
expect(chef_run).to render_file('/opt/gitlab/sv/redis-exporter/run')
.with_content(%r{redis.addr=rediss://:some-password@1.2.3.4:6378/})
expect(chef_run).to render_file('/opt/gitlab/sv/redis-exporter/run')
.with_content(/--set-client-name=false/)
end
end
context 'when log dir is changed' do
before do
stub_gitlab_rb(