diff --git a/changelogs/unreleased/3046-refactor-rails-monitoring.yml b/changelogs/unreleased/3046-refactor-rails-monitoring.yml new file mode 100644 index 0000000000000000000000000000000000000000..789b11f46d18636627f90f6c7665fb81cae92beb_Y2hhbmdlbG9ncy91bnJlbGVhc2VkLzMwNDYtcmVmYWN0b3ItcmFpbHMtbW9uaXRvcmluZy55bWw= --- /dev/null +++ b/changelogs/unreleased/3046-refactor-rails-monitoring.yml @@ -0,0 +1,5 @@ +--- +title: Refactor Prometheus rails scrape config +merge_request: 3046 +author: Ben Kochie <bjk@gitlab.com> +type: added diff --git a/files/gitlab-cookbooks/gitlab/libraries/prometheus.rb b/files/gitlab-cookbooks/gitlab/libraries/prometheus.rb index 622ee2ca3703e7445d14080cc017f9cf6dad4a2a_ZmlsZXMvZ2l0bGFiLWNvb2tib29rcy9naXRsYWIvbGlicmFyaWVzL3Byb21ldGhldXMucmI=..789b11f46d18636627f90f6c7665fb81cae92beb_ZmlsZXMvZ2l0bGFiLWNvb2tib29rcy9naXRsYWIvbGlicmFyaWVzL3Byb21ldGhldXMucmI= 100644 --- a/files/gitlab-cookbooks/gitlab/libraries/prometheus.rb +++ b/files/gitlab-cookbooks/gitlab/libraries/prometheus.rb @@ -247,7 +247,7 @@ gitlab_monitor_scrape_configs registry_scrape_config sidekiq_scrape_config - unicorn_scrape_configs + rails_scrape_configs workhorse_scrape_config exporter_scrape_config('node') exporter_scrape_config('postgres') @@ -376,15 +376,20 @@ Gitlab['prometheus']['scrape_configs'] = default_scrape_configs.compact.flatten end - def unicorn_scrape_configs - # Don't parse if unicorn is explicitly disabled - return unless Services.enabled?('unicorn') - - default_config = Gitlab['node']['gitlab']['unicorn'].to_hash - user_config = Gitlab['unicorn'] + def rails_scrape_configs + if Services.enabled?('unicorn') + default_config = Gitlab['node']['gitlab']['unicorn'].to_hash + user_config = Gitlab['unicorn'] + elsif Services.enabled?('puma') + default_config = Gitlab['node']['gitlab']['puma'].to_hash + user_config = Gitlab['puma'] + else + # Don't add scrape config if puma and unicorn explicitly disabled + return + end listen_address = user_config['listen'] || default_config['listen'] listen_port = user_config['port'] || default_config['port'] prometheus_target = [listen_address, listen_port].join(':') scrape_config = { @@ -385,10 +390,10 @@ listen_address = user_config['listen'] || default_config['listen'] listen_port = user_config['port'] || default_config['port'] prometheus_target = [listen_address, listen_port].join(':') scrape_config = { - 'job_name' => 'gitlab-unicorn', + 'job_name' => 'gitlab-rails', 'metrics_path' => '/-/metrics', 'static_configs' => [ 'targets' => [prometheus_target], diff --git a/spec/chef/recipes/prometheus_spec.rb b/spec/chef/recipes/prometheus_spec.rb index 622ee2ca3703e7445d14080cc017f9cf6dad4a2a_c3BlYy9jaGVmL3JlY2lwZXMvcHJvbWV0aGV1c19zcGVjLnJi..789b11f46d18636627f90f6c7665fb81cae92beb_c3BlYy9jaGVmL3JlY2lwZXMvcHJvbWV0aGV1c19zcGVjLnJi 100644 --- a/spec/chef/recipes/prometheus_spec.rb +++ b/spec/chef/recipes/prometheus_spec.rb @@ -34,7 +34,7 @@ static_configs: - targets: - localhost:9229 - - job_name: gitlab-unicorn + - job_name: gitlab-rails metrics_path: "/-/metrics" static_configs: - targets: @@ -256,6 +256,26 @@ end end + context 'with puma' do + context 'with user provided settings' do + before do + stub_gitlab_rb( + puma: { + enable: 'true' + }, + unicorn: { + enable: 'false' + } + ) + end + + it 'configures puma job' do + expect(chef_run).to render_file('/var/opt/gitlab/prometheus/prometheus.yml') + .with_content(%r{- job_name: gitlab-rails\s+metrics_path: "/-/metrics"\s+static_configs:\s+- targets:\s+- 127.0.0.1:8080}) + end + end + end + context 'with Prometheus version 1' do before { allow(PrometheusHelper).to receive(:is_version_1?).and_return(true) } context 'with user provided settings' do