Easily generate munin plugins to monitor and provide email alerts for your site.
gem install ruminate
Refer to https://github.com/ClarityServices/rumx for information on setting up Rumx Beans and a Rumx mount for your application.
Create a file config/ruminate.yml that might look as follows:
rumx_mount: /rumx username: myusername password: mypassword host: localhost port: 3000 smtp_host: localhost ruby_shebang: /usr/bin/env ruby munin_plugin_dir: /etc/munin/plugins email: :techstaff: firstname.lastname@example.org email@example.com :my_test: firstname.lastname@example.org
Add Rumx beans for the parts of the app that you want to monitor. For instance, you might add the following lines to app/models/my_model.rb:
class MyModel @@timer = Rumx::Beans::TimerAndError.new Rumx::Bean.root.add_child(:Timer, @@timer) ... def my_expensive_and_error_prone_operation @@timer.measure do ... expensive, possible exception-raising stuff here end end end
Create a directory config/ruminate and put yaml files representing the monitoring that you want to perform. For instance, you might create the file config/ruminate/my_model.yml that looks as follows (All of the fields prefixed with graph_ and under plots are related to munin fields, see the munin documentation for what those mean. The others should be fairly self explanatory):
MyModel: - :name: times :query: Timer?reset=true :graph_title: MyModel Times :graph_args: --base 1000 -l 0 :graph_vlabel: msec :graph_info: This graph monitors the times for MyModels expensive operation. :plot: - :label: avg :info: Average time of request :draw: LINE :field: avg_time - :label: min :info: Min time of request :draw: LINE :field: min_time - :label: max :info: Max time of request :draw: LINE :field: max_time :alert: - :title: MyModel average times exceeded their threshold :filter: avg_time > 1000 :email: :techstaff - :name: counts :query: Timer :graph_title: MyModel Total and Error counts :graph_vlabel: count :graph_info: This graph shows the total counts and errors for MyModel. :plot: - :label: total :info: Total count of requests :draw: LINE :field: total_count - :label: errors :info: Total requests that created an exception :draw: LINE :field: error_count :alert: - :title: MyModel failures exceeded threshold :filter: error_count > 20 :email: :techstaff
When you deploy, perform the following:
rake ruminate:create_plugins sudo rake ruminate:create_links sudo /etc/init.d/munin-node restart
Use deep_merge for better templating?
Make sure the example above actually works.
Copyright (c) 2011-2012 Clarity Services. See LICENSE for details.