Class: PrometheusExporter::Instrumentation::Process
- Inherits:
-
Object
- Object
- PrometheusExporter::Instrumentation::Process
- Defined in:
- lib/prometheus_exporter/instrumentation/process.rb
Class Method Summary collapse
Instance Method Summary collapse
- #collect ⇒ Object
- #collect_gc_stats(metric) ⇒ Object
- #collect_process_stats(metric) ⇒ Object
- #collect_v8_stats(metric) ⇒ Object
-
#initialize(type) ⇒ Process
constructor
A new instance of Process.
- #pid ⇒ Object
- #rss ⇒ Object
Constructor Details
#initialize(type) ⇒ Process
Returns a new instance of Process.
21 22 23 |
# File 'lib/prometheus_exporter/instrumentation/process.rb', line 21 def initialize(type) @type = type end |
Class Method Details
.start(client: nil, type: "ruby", frequency: 30) ⇒ Object
4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
# File 'lib/prometheus_exporter/instrumentation/process.rb', line 4 def self.start(client: nil, type: "ruby", frequency: 30) process_collector = new(type) client ||= PrometheusExporter::Client.default Thread.new do while true begin metric = process_collector.collect client.send_json metric rescue => e STDERR.puts("Prometheus Exporter Failed To Collect Process Stats #{e}") ensure sleep frequency end end end end |
Instance Method Details
#collect ⇒ Object
25 26 27 28 29 30 31 32 33 |
# File 'lib/prometheus_exporter/instrumentation/process.rb', line 25 def collect metric = {} metric[:type] = "process" metric[:process_type] = @type collect_gc_stats(metric) collect_v8_stats(metric) collect_process_stats(metric) metric end |
#collect_gc_stats(metric) ⇒ Object
50 51 52 53 54 55 56 57 |
# File 'lib/prometheus_exporter/instrumentation/process.rb', line 50 def collect_gc_stats(metric) stat = GC.stat metric[:heap_live_slots] = stat[:heap_live_slots] metric[:heap_free_slots] = stat[:heap_free_slots] metric[:major_gc_ops_total] = stat[:major_gc_count] metric[:minor_gc_ops_total] = stat[:minor_gc_count] metric[:allocated_objects_total] = stat[:total_allocated_objects] end |
#collect_process_stats(metric) ⇒ Object
44 45 46 47 48 |
# File 'lib/prometheus_exporter/instrumentation/process.rb', line 44 def collect_process_stats(metric) metric[:pid] = pid metric[:rss] = rss end |
#collect_v8_stats(metric) ⇒ Object
59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 |
# File 'lib/prometheus_exporter/instrumentation/process.rb', line 59 def collect_v8_stats(metric) return if !defined? MiniRacer metric[:v8_heap_count] = metric[:v8_heap_size] = 0 metric[:v8_heap_size] = metric[:v8_physical_size] = 0 metric[:v8_used_heap_size] = 0 ObjectSpace.each_object(MiniRacer::Context) do |context| stats = context.heap_stats if stats metric[:v8_heap_count] += 1 metric[:v8_heap_size] += stats[:total_heap_size].to_i metric[:v8_used_heap_size] += stats[:used_heap_size].to_i metric[:v8_physical_size] += stats[:total_physical_size].to_i end end end |
#pid ⇒ Object
35 36 37 |
# File 'lib/prometheus_exporter/instrumentation/process.rb', line 35 def pid @pid = ::Process.pid end |
#rss ⇒ Object
39 40 41 42 |
# File 'lib/prometheus_exporter/instrumentation/process.rb', line 39 def rss @pagesize ||= `getconf PAGESIZE`.to_i rescue 4096 File.read("/proc/#{pid}/statm").split(' ')[1].to_i * @pagesize rescue 0 end |