Why I prefer monit over god

monit and god are two powerful process monitoring tools. If you’re developing a rails application running on vps, you’ll need to monitor your active processes/tasks (web server, database and application server … ) so to be advised when an error occurs.

Both tools use a specific DSL for defining processes, the main difference being that god uses ruby as configuration language.
May think “Cool! I can write in my beloved ruby”, but in my opinion monit configuration files are much clearer. At first sight monit configuration files are easily readable while god files use specific labels whose structure is not immediately understandble. Here’s an example of the same task written in monit and god:

### MONIT ###

check process httpd
  with pidfile /etc/httpd/run/httpd.pid
  start program = "/etc/init.d/httpd start"
  stop program = "/etc/init.d/httpd stop
  if failed port 80 protocol http then restart
  if totalmem > 1024 MB for 2 cycles then restart
  if 5 restarts within 5 cycles then alert
  set alert foo@bar

### GOD ###

 God.watch do |w|
  w.name = "httpd"
  w.pid_file = "/var/run/httpd.pid"
  w.start = "/etc/init.d/httpd start"
  w.stop = "/etc/init.d/httpd stop"

  w.transition(:up, :start) do |on|
    on.condition(:process_running) do |c|
      c.running = false

  w.restart_if do |restart|
    restart.condition(:memory_usage) do |c|
      c.above = 1024.megabytes
      c.times = 2

  w.transition([:start, :restart], :up) do |on|
    on.condition(:tries) do |c|
      c.times = 5
      c.notify = 'foo@bar'

Another important feature that god lack is a web interface. Monit with few settings gives you a basic web interface, from which you can watch and control all your active processes.

Last but not least, monit’s website home page is really well done đŸ˜‰

Leave a Reply