Commit 95124bea authored by Matthias Käppler's avatar Matthias Käppler

Merge branch '344629-metrics-server-ruby-metrics-naming' into 'master'

RubySampler: allow specifying metrics prefix

See merge request gitlab-org/gitlab!78559
parents 54756729 ab243e50
...@@ -7,22 +7,20 @@ module Gitlab ...@@ -7,22 +7,20 @@ module Gitlab
DEFAULT_SAMPLING_INTERVAL_SECONDS = 60 DEFAULT_SAMPLING_INTERVAL_SECONDS = 60
GC_REPORT_BUCKETS = [0.01, 0.05, 0.1, 0.2, 0.3, 0.5, 1].freeze GC_REPORT_BUCKETS = [0.01, 0.05, 0.1, 0.2, 0.3, 0.5, 1].freeze
def initialize(...) def initialize(prefix: nil, **options)
@prefix = prefix
GC::Profiler.clear GC::Profiler.clear
metrics[:process_start_time_seconds].set(labels, Time.now.to_i) metrics[:process_start_time_seconds].set(labels, Time.now.to_i)
super(...) super(**options)
end end
def metrics def metrics
@metrics ||= init_metrics @metrics ||= init_metrics
end end
def with_prefix(prefix, name)
"ruby_#{prefix}_#{name}".to_sym
end
def to_doc_string(name) def to_doc_string(name)
name.to_s.humanize name.to_s.humanize
end end
...@@ -33,19 +31,19 @@ module Gitlab ...@@ -33,19 +31,19 @@ module Gitlab
def init_metrics def init_metrics
metrics = { metrics = {
file_descriptors: ::Gitlab::Metrics.gauge(with_prefix(:file, :descriptors), 'File descriptors used', labels), file_descriptors: ::Gitlab::Metrics.gauge(metric_name(:file, :descriptors), 'File descriptors used', labels),
process_cpu_seconds_total: ::Gitlab::Metrics.gauge(with_prefix(:process, :cpu_seconds_total), 'Process CPU seconds total'), process_cpu_seconds_total: ::Gitlab::Metrics.gauge(metric_name(:process, :cpu_seconds_total), 'Process CPU seconds total'),
process_max_fds: ::Gitlab::Metrics.gauge(with_prefix(:process, :max_fds), 'Process max fds'), process_max_fds: ::Gitlab::Metrics.gauge(metric_name(:process, :max_fds), 'Process max fds'),
process_resident_memory_bytes: ::Gitlab::Metrics.gauge(with_prefix(:process, :resident_memory_bytes), 'Memory used (RSS)', labels), process_resident_memory_bytes: ::Gitlab::Metrics.gauge(metric_name(:process, :resident_memory_bytes), 'Memory used (RSS)', labels),
process_unique_memory_bytes: ::Gitlab::Metrics.gauge(with_prefix(:process, :unique_memory_bytes), 'Memory used (USS)', labels), process_unique_memory_bytes: ::Gitlab::Metrics.gauge(metric_name(:process, :unique_memory_bytes), 'Memory used (USS)', labels),
process_proportional_memory_bytes: ::Gitlab::Metrics.gauge(with_prefix(:process, :proportional_memory_bytes), 'Memory used (PSS)', labels), process_proportional_memory_bytes: ::Gitlab::Metrics.gauge(metric_name(:process, :proportional_memory_bytes), 'Memory used (PSS)', labels),
process_start_time_seconds: ::Gitlab::Metrics.gauge(with_prefix(:process, :start_time_seconds), 'Process start time seconds'), process_start_time_seconds: ::Gitlab::Metrics.gauge(metric_name(:process, :start_time_seconds), 'Process start time seconds'),
sampler_duration: ::Gitlab::Metrics.counter(with_prefix(:sampler, :duration_seconds_total), 'Sampler time', labels), sampler_duration: ::Gitlab::Metrics.counter(metric_name(:sampler, :duration_seconds_total), 'Sampler time', labels),
gc_duration_seconds: ::Gitlab::Metrics.histogram(with_prefix(:gc, :duration_seconds), 'GC time', labels, GC_REPORT_BUCKETS) gc_duration_seconds: ::Gitlab::Metrics.histogram(metric_name(:gc, :duration_seconds), 'GC time', labels, GC_REPORT_BUCKETS)
} }
GC.stat.keys.each do |key| GC.stat.keys.each do |key|
metrics[key] = ::Gitlab::Metrics.gauge(with_prefix(:gc_stat, key), to_doc_string(key), labels) metrics[key] = ::Gitlab::Metrics.gauge(metric_name(:gc_stat, key), to_doc_string(key), labels)
end end
metrics metrics
...@@ -65,6 +63,12 @@ module Gitlab ...@@ -65,6 +63,12 @@ module Gitlab
private private
def metric_name(group, metric)
name = "ruby_#{group}_#{metric}"
name = "#{@prefix}_#{name}" if @prefix.present?
name.to_sym
end
def sample_gc def sample_gc
# Observe all GC samples # Observe all GC samples
sample_gc_reports.each do |report| sample_gc_reports.each do |report|
......
...@@ -50,7 +50,7 @@ class MetricsServer # rubocop:disable Gitlab/NamespacedClass ...@@ -50,7 +50,7 @@ class MetricsServer # rubocop:disable Gitlab/NamespacedClass
# a race where not all Prometheus db files will be visible to the exporter, resulting # a race where not all Prometheus db files will be visible to the exporter, resulting
# in missing metrics. # in missing metrics.
# Warming up ensures that these files exist prior to the exporter starting up. # Warming up ensures that these files exist prior to the exporter starting up.
Gitlab::Metrics::Samplers::RubySampler.initialize_instance(warmup: true).start Gitlab::Metrics::Samplers::RubySampler.initialize_instance(prefix: name, warmup: true).start
exporter_class = "Gitlab::Metrics::Exporter::#{@target.camelize}Exporter".constantize exporter_class = "Gitlab::Metrics::Exporter::#{@target.camelize}Exporter".constantize
settings = Settings.new(Settings.monitoring[name]) settings = Settings.new(Settings.monitoring[name])
......
...@@ -18,6 +18,20 @@ RSpec.describe Gitlab::Metrics::Samplers::RubySampler do ...@@ -18,6 +18,20 @@ RSpec.describe Gitlab::Metrics::Samplers::RubySampler do
expect(sampler.metrics[:process_start_time_seconds].get).to eq(Time.now.to_i) expect(sampler.metrics[:process_start_time_seconds].get).to eq(Time.now.to_i)
end end
end end
context 'when not setting a prefix' do
it 'does not prepend metrics with that prefix' do
expect(sampler.metrics[:process_start_time_seconds].name).to eq(:ruby_process_start_time_seconds)
end
end
context 'when using custom prefix' do
let(:sampler) { described_class.new(prefix: 'custom') }
it 'prepends metrics with that prefix' do
expect(sampler.metrics[:process_start_time_seconds].name).to eq(:custom_ruby_process_start_time_seconds)
end
end
end end
describe '#sample' do describe '#sample' do
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment