Class: Gitlab::Metrics::Samplers::RubySampler
- Inherits:
-
BaseSampler
- Object
- Daemon
- BaseSampler
- Gitlab::Metrics::Samplers::RubySampler
- Defined in:
- lib/gitlab/metrics/samplers/ruby_sampler.rb
Constant Summary collapse
- DEFAULT_SAMPLING_INTERVAL_SECONDS =
60
- GC_REPORT_BUCKETS =
[0.01, 0.05, 0.1, 0.2, 0.3, 0.5, 1].freeze
Instance Attribute Summary
Attributes inherited from BaseSampler
Attributes inherited from Daemon
Instance Method Summary collapse
- #init_metrics ⇒ Object
-
#initialize(prefix: nil, **options) ⇒ RubySampler
constructor
A new instance of RubySampler.
- #labels ⇒ Object
- #metrics ⇒ Object
- #sample ⇒ Object
- #to_doc_string(name) ⇒ Object
Methods inherited from BaseSampler
Methods inherited from Daemon
#enabled?, initialize_instance, instance, #start, #stop, #thread?, #thread_name
Constructor Details
#initialize(prefix: nil, **options) ⇒ RubySampler
Returns a new instance of RubySampler.
10 11 12 13 14 15 16 17 18 |
# File 'lib/gitlab/metrics/samplers/ruby_sampler.rb', line 10 def initialize(prefix: nil, **) @prefix = prefix GC::Profiler.clear metrics[:process_start_time_seconds].set(labels, Time.now.to_i) super(**) end |
Instance Method Details
#init_metrics ⇒ Object
32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
# File 'lib/gitlab/metrics/samplers/ruby_sampler.rb', line 32 def init_metrics metrics = { file_descriptors: ::Gitlab::Metrics.gauge(metric_name(:file, :descriptors), 'File descriptors used', labels), process_cpu_seconds_total: ::Gitlab::Metrics.gauge(metric_name(:process, :cpu_seconds_total), 'Process CPU seconds total'), process_max_fds: ::Gitlab::Metrics.gauge(metric_name(:process, :max_fds), 'Process max fds'), process_resident_memory_bytes: ::Gitlab::Metrics.gauge(metric_name(:process, :resident_memory_bytes), 'Memory used (RSS)', labels), process_resident_anon_memory_bytes: ::Gitlab::Metrics.gauge(metric_name(:process, :resident_anon_memory_bytes), 'Anonymous memory used (RSS)', labels), process_resident_file_memory_bytes: ::Gitlab::Metrics.gauge(metric_name(:process, :resident_file_memory_bytes), 'File backed memory used (RSS)', 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(metric_name(:process, :proportional_memory_bytes), 'Memory used (PSS)', labels), process_start_time_seconds: ::Gitlab::Metrics.gauge(metric_name(:process, :start_time_seconds), 'Process start time seconds'), sampler_duration: ::Gitlab::Metrics.counter(metric_name(:sampler, :duration_seconds_total), 'Sampler time', labels), gc_duration_seconds: ::Gitlab::Metrics.histogram(metric_name(:gc, :duration_seconds), 'GC time', labels, GC_REPORT_BUCKETS), heap_fragmentation: ::Gitlab::Metrics.gauge(metric_name(:gc_stat_ext, :heap_fragmentation), 'Ruby heap fragmentation', labels) } GC.stat.keys.each do |key| metrics[key] = ::Gitlab::Metrics.gauge(metric_name(:gc_stat, key), to_doc_string(key), labels) end metrics end |
#labels ⇒ Object
28 29 30 |
# File 'lib/gitlab/metrics/samplers/ruby_sampler.rb', line 28 def labels {} end |
#metrics ⇒ Object
20 21 22 |
# File 'lib/gitlab/metrics/samplers/ruby_sampler.rb', line 20 def metrics @metrics ||= init_metrics end |
#sample ⇒ Object
55 56 57 58 59 60 61 62 63 64 65 |
# File 'lib/gitlab/metrics/samplers/ruby_sampler.rb', line 55 def sample start_time = System.monotonic_time metrics[:file_descriptors].set(labels, System.file_descriptor_count) metrics[:process_cpu_seconds_total].set(labels, ::Gitlab::Metrics::System.cpu_time) metrics[:process_max_fds].set(labels, ::Gitlab::Metrics::System.max_open_file_descriptors) set_memory_usage_metrics sample_gc metrics[:sampler_duration].increment(labels, System.monotonic_time - start_time) end |
#to_doc_string(name) ⇒ Object
24 25 26 |
# File 'lib/gitlab/metrics/samplers/ruby_sampler.rb', line 24 def to_doc_string(name) name.to_s.humanize end |