# Simple::Metrics
A simple JRuby wrapper around Coda's excellent Metrics package
## Installation
Add this line to your application's Gemfile:
gem 'simple-metrics'
And then execute:
$ bundle
Or install it yourself as:
$ gem install simple-metrics
## Healthchecks
Monitor the health of your application in a granular way.
In a Sinatra/Padrino app, register healthchecks as an extension like so:
register Simple::Metrics::Healthchecks
To register a new healthcheck:
class NurseRatched
extend Simple::Metrics::Healthchecks
attr_accessor :temp
new_healthcheck("temperature") do
if @temp = 98
Simple::Metrics::HEALTHY
elsif @temp > 101
Simple::Metrics::UNHEALTHY.new("Fever!")
else
Simple::Metrics::WARNING
end
end
end
Run all healthchecks:
NurseRatched.run_all_healthchecks
Your healthchecks will be run in a separate thread every 5 seconds. This is a great way to monitor the health of your db connections, thread pools and connections to queues.
If you are running the servlet in a warbler .war file (see example below), you can monitor the overall health of your application with nagios or other monitoring tools.
## Timers
From: Timers:
A timer measures both the rate that a particular piece of code is called and the distribution of its duration.
class Samovar
include Simple::Metrics
def buh
timer("tea time") do
"Brewing..."
end
end
end
## Meters
From: Meters:
"A meter measures the rate of events over time (e.g., “requests per second”). In addition to the mean rate, meters also track 1-, 5-, and 15-minute moving averages."
class Rdio
extend Simple::Metrics::Meter
define_meter :bump_meter
def bump_dat
bump_meter.mark
end
end
## Send metrics directly to graphite
In a Sinatra app:
register Simple::Metrics::Graphite
enable_graphite_reporter("graphite.example.com", 2003, "services.#{RACK_ENV}")
## Exposing metrics from within your app
In order to view/collect the health and metrics of your application from the web, you'll need to add the servlet endpoints.
For this example, I'm using Warbler to package
the application as a .war
In config/web.xml, add the following servlet mappings:
metrics.MetricsServlet
com.yammer.metrics.reporting.MetricsServlet
metrics.MetricsServlet
/metrics
metrics.HealthCheckServlet
com.yammer.metrics.reporting.HealthCheckServlet
metrics.HealthCheckServlet
/healthcheck
metrics.ThreadDumpServlet
com.yammer.metrics.reporting.ThreadDumpServlet
/threads
metrics.PingServlet
com.yammer.metrics.reporting.PingServlet
metrics.PingServlet
/ping
Now you can visit your application and get a thread dump, health check or collect metrics using collectd:
> curl localhost:9292/threads
main id=1 state=WAITING
- waiting on <0x073772c5> (a java.lang.Object)
- locked <0x073772c5> (a java.lang.Object)
at java.lang.Object.wait(Native Method)
## API documentation
API Docs