undefined local variable or method `prometheus_multiproc_dir'
In an installation from source and without prometheus installed or configured the "Admin Area > Metrics and profiling" page gives a 500 error and in production.log
you get
Processing by Admin::ApplicationSettingsController#metrics_and_profiling as HTML
Rendered layout layouts/admin.html.haml (Duration: 73.1ms | Allocations: 37739)
Completed 500 Internal Server Error in 407ms (ActiveRecord: 147.0ms | Elasticsearch: 0.0ms | Allocations: 64249)
ActionView::Template::Error (undefined local variable or method `prometheus_multiproc_dir' for #<ActionView::Base:0x000000000918e8>):
13: - unless Gitlab::Metrics.metrics_folder_present?
14: .form-text.text-muted
15: %strong.cred= _("WARNING:")
16: = _("Environment variable %{code_start}%{environment_variable}%{code_end} does not exist or is not pointing to a valid directory.").html_safe % { environment_variable: prometheus_multiproc_dir, code_start: '<code>'.html_safe, code_end: '</code>'.html_safe }
17: = link_to sprite_icon('question-o'), help_page_path('administration/monitoring/prometheus/gitlab_metrics', anchor: 'metrics-shared-directory')
18: .form-group
19: = f.label :metrics_method_call_threshold, _('Method call threshold (ms)'), class: 'label-bold'
app/views/admin/application_settings/_prometheus.html.haml:16
app/views/admin/application_settings/_prometheus.html.haml:1
app/views/admin/application_settings/metrics_and_profiling.html.haml:16
app/controllers/application_controller.rb:133:in `render'
app/controllers/application_controller.rb:490:in `set_current_admin'
lib/gitlab/session.rb:11:in `with_session'
app/controllers/application_controller.rb:481:in `set_session_storage'
lib/gitlab/i18n.rb:105:in `with_locale'
lib/gitlab/i18n.rb:111:in `with_user_locale'
app/controllers/application_controller.rb:475:in `set_locale'
app/controllers/application_controller.rb:469:in `set_current_context'
lib/gitlab/middleware/speedscope.rb:13:in `call'
lib/gitlab/request_profiler/middleware.rb:17:in `call'
lib/gitlab/database/load_balancing/rack_middleware.rb:23:in `call'
lib/gitlab/jira/middleware.rb:19:in `call'
lib/gitlab/middleware/go.rb:20:in `call'
lib/gitlab/etag_caching/middleware.rb:21:in `call'
lib/gitlab/middleware/multipart.rb:173:in `call'
lib/gitlab/middleware/read_only/controller.rb:50:in `call'
lib/gitlab/middleware/read_only.rb:18:in `call'
lib/gitlab/middleware/same_site_cookies.rb:27:in `call'
lib/gitlab/middleware/handle_malformed_strings.rb:21:in `call'
lib/gitlab/middleware/basic_health_check.rb:25:in `call'
lib/gitlab/middleware/handle_ip_spoof_attack_error.rb:25:in `call'
lib/gitlab/middleware/request_context.rb:21:in `call'
lib/gitlab/middleware/webhook_recursion_detection.rb:15:in `call'
config/initializers/fix_local_cache_middleware.rb:11:in `call'
lib/gitlab/middleware/compressed_json.rb:26:in `call'
lib/gitlab/middleware/rack_multipart_tempfile_factory.rb:19:in `call'
lib/gitlab/middleware/sidekiq_web_static.rb:20:in `call'
lib/gitlab/metrics/requests_rack_middleware.rb:75:in `call'
lib/gitlab/middleware/release_env.rb:13:in `call'
As the error message says this is caised by ENV['prometheus_multiproc_dir']
beeing undefined. Seems to me that this variable is only defined, when you hav a running metrics server; see spec/commands/metrics_server/metrics_server_spec.rb
:
context 'with a running server' do
...
env = {
'GITLAB_CONFIG' => config_file.path,
'METRICS_SERVER_TARGET' => 'sidekiq',
'WIPE_METRICS_DIR' => '1',
'prometheus_multiproc_dir' => metrics_dir
}
So I worked around this by adding
Environment=prometheus_multiproc_dir=/var/tmp/gitlab/prometheus_multiproc_dir
to /lib/systemd/system/gitlab-sidekiq.service
and /lib/systemd/system/gitlab-puma.service
.
Then restarted gitlab and the "Admin Area > Metrics and profiling" page works again.
Edited by Horst Prote