hogelog / metrics_monitor

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

MetricsMonitor

MetricsMonitor is dynamic monitoring tool for ruby application.

Features

  • Monitor multi process ruby application
  • Monitor basic metrics by builtin collector
  • Monitor custom metrics
  • Save monitoring result to single html file

Installation

Add this line to your application's Gemfile:

gem "metrics_monitor", require: "metrics_monitor/setup"

If you want to customize, add this line to your application's Gemfile:

gem "metrics_monitor"

and configure like this:

require_relative "metrics_monitor"

MetricsMonitor::Collector::ObjectStatCollector.configure do |options|
  options[:interval] = 5_000
  options[:memsize_threshold] = 5000
end

MetricsMonitor.configure do |config|
  config.collectors << MetricsMonitor::Collector::ObjectStatCollector
  config.exclude_main_process = true
end

Configuration

MetricsMonitor config

  • collectors: Array of collector class
  • exclude_main_process: Exclude main process from monitoring (when using multi process application)

Collector config

  • enabled: Enable or disable collector when starting
  • interval: Interval of collecting metrics (ms)
  • other options: Depends on collector

Multi process application

MetricsMonitor can monitor multi process application.

When using multi process application, you should start MetricsMonitor in each processes.

If you use unicorn, you can start MetricsMonitor like this:

after_fork do |_server, worker|
  MetricsMonitor.monitor.watch(worker.nr)
end

You could set exclude_main_process to true in MetricsMonitor config to exclude main process from monitoring.

Collectors

BasicCollector

Basic metrics collector like cpu, memory and etc.

GcStatCollector

Garbage collection statistics collector.

ObjectStatCollector

Object statistics collector.

ObjectTraceCollector

Object tracing data collector.

Custom collector

You can create custom collector by referring to lib/metrics_monitor/collector.

Below is an example of a custom collector.

class RandomCollector < MetricsMonitor::Collector::CollectorBase
  def self.default_options
    { enabled: true, interval: 5_000 }
  end

  def meta_data
    {
      title: "Random",
      monitors: [
        { key: :random, title: "Random values", type: :chart, mode: :line },
      ],
      data: {
        random: { mode: "append" },
      },
    }
  end

  def data
    {
      random: rand,
    }
  end
end

This collector generates random values and displays them in a chart.

Contributing

Bug reports and pull requests are welcome on GitHub at https://github.com/hogelog/metrics_monitor.

License

The gem is available as open source under the terms of the MIT License.

About

License:MIT License


Languages

Language:Ruby 57.1%Language:TypeScript 40.7%Language:HTML 1.0%Language:JavaScript 0.4%Language:SCSS 0.4%Language:Shell 0.4%