diff --git a/files/gitlab-cookbooks/monitoring/libraries/prometheus.rb b/files/gitlab-cookbooks/monitoring/libraries/prometheus.rb index a4a002421365001d1e62dd27f464e21e6665a077_ZmlsZXMvZ2l0bGFiLWNvb2tib29rcy9tb25pdG9yaW5nL2xpYnJhcmllcy9wcm9tZXRoZXVzLnJi..9a137957310c9a98c285590cedeac302a627b5dd_ZmlsZXMvZ2l0bGFiLWNvb2tib29rcy9tb25pdG9yaW5nL2xpYnJhcmllcy9wcm9tZXRoZXVzLnJi 100644 --- a/files/gitlab-cookbooks/monitoring/libraries/prometheus.rb +++ b/files/gitlab-cookbooks/monitoring/libraries/prometheus.rb @@ -118,4 +118,6 @@ 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'] = { @@ -121,5 +123,4 @@ default_config['flags'] = { - 'web.listen-address' => listen_address, - 'redis.addr' => "unix://#{Gitlab['node']['gitlab']['gitlab_rails']['redis_socket']}" + 'web.listen-address' => listen_address } @@ -124,4 +125,5 @@ } + default_config['flags']['set-client-name'] = 'false' if disable_client_name default_config['flags'].merge!(user_config['flags']) if user_config.key?('flags') @@ -126,5 +128,6 @@ 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 diff --git a/files/gitlab-cookbooks/monitoring/recipes/redis-exporter.rb b/files/gitlab-cookbooks/monitoring/recipes/redis-exporter.rb index a4a002421365001d1e62dd27f464e21e6665a077_ZmlsZXMvZ2l0bGFiLWNvb2tib29rcy9tb25pdG9yaW5nL3JlY2lwZXMvcmVkaXMtZXhwb3J0ZXIucmI=..9a137957310c9a98c285590cedeac302a627b5dd_ZmlsZXMvZ2l0bGFiLWNvb2tib29rcy9tb25pdG9yaW5nL3JlY2lwZXMvcmVkaXMtZXhwb3J0ZXIucmI= 100644 --- a/files/gitlab-cookbooks/monitoring/recipes/redis-exporter.rb +++ b/files/gitlab-cookbooks/monitoring/recipes/redis-exporter.rb @@ -43,9 +43,12 @@ 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, @@ -46,10 +49,11 @@ 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 diff --git a/files/gitlab-cookbooks/monitoring/templates/sv-redis-exporter-run.erb b/files/gitlab-cookbooks/monitoring/templates/sv-redis-exporter-run.erb index a4a002421365001d1e62dd27f464e21e6665a077_ZmlsZXMvZ2l0bGFiLWNvb2tib29rcy9tb25pdG9yaW5nL3RlbXBsYXRlcy9zdi1yZWRpcy1leHBvcnRlci1ydW4uZXJi..9a137957310c9a98c285590cedeac302a627b5dd_ZmlsZXMvZ2l0bGFiLWNvb2tib29rcy9tb25pdG9yaW5nL3RlbXBsYXRlcy9zdi1yZWRpcy1leHBvcnRlci1ydW4uZXJi 100644 --- a/files/gitlab-cookbooks/monitoring/templates/sv-redis-exporter-run.erb +++ b/files/gitlab-cookbooks/monitoring/templates/sv-redis-exporter-run.erb @@ -5,4 +5,4 @@ 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] %> diff --git a/files/gitlab-cookbooks/package/libraries/helpers/new_redis_helper/redis_exporter.rb b/files/gitlab-cookbooks/package/libraries/helpers/new_redis_helper/redis_exporter.rb new file mode 100644 index 0000000000000000000000000000000000000000..9a137957310c9a98c285590cedeac302a627b5dd_ZmlsZXMvZ2l0bGFiLWNvb2tib29rcy9wYWNrYWdlL2xpYnJhcmllcy9oZWxwZXJzL25ld19yZWRpc19oZWxwZXIvcmVkaXNfZXhwb3J0ZXIucmI= --- /dev/null +++ b/files/gitlab-cookbooks/package/libraries/helpers/new_redis_helper/redis_exporter.rb @@ -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 diff --git a/spec/chef/cookbooks/monitoring/recipes/redis_exporter_spec.rb b/spec/chef/cookbooks/monitoring/recipes/redis_exporter_spec.rb index a4a002421365001d1e62dd27f464e21e6665a077_c3BlYy9jaGVmL2Nvb2tib29rcy9tb25pdG9yaW5nL3JlY2lwZXMvcmVkaXNfZXhwb3J0ZXJfc3BlYy5yYg==..9a137957310c9a98c285590cedeac302a627b5dd_c3BlYy9jaGVmL2Nvb2tib29rcy9tb25pdG9yaW5nL3JlY2lwZXMvcmVkaXNfZXhwb3J0ZXJfc3BlYy5yYg== 100644 --- a/spec/chef/cookbooks/monitoring/recipes/redis_exporter_spec.rb +++ b/spec/chef/cookbooks/monitoring/recipes/redis_exporter_spec.rb @@ -67,6 +67,34 @@ 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(