Monitoring beanstalkd with monit

A new project I’ve just deployed onto live uses the fast and lightweight beanstalkd work queue.  As part of putting it into live I wanted to get at least some basic monitoring on the beanstalkd daemon.  All my servers run monit for keeping an eye on processes I care about, so that seemed a good place to start.

I had a bit of a look around the interwebs but couldn’t find any examples, so I set about putting something together myself. As it turns out beanstalkd has a nice simple text protocol, detailed in protocol.txt which is included in the source, and monit has the ability to send and expect arbitrary strings to a given port.  For starters I’ve set it up to issue a stats command and check for the expected response which is:

OK <bytes>\r\n

Adding this to my monit config file for beanstalkd gives me:

check process beanstalkd with pidfile /var/run/beanstalkd.pid
 start "/etc/init.d/beanstalkd start"
 stop "/etc/init.d/beanstalkd stop"
 if failed port 11300
   send "stats\r\n"
   expect "OK [0-9]{1,}\r\n"
 then alert

This is a pretty simple check but at least will enable monit to alert if beanstalkd isn’t listening or is returning garbage.

I think in the long term I’d like nagios to alert on  the current-jobs-delayed and possibly the current-waiting variables reported by the stats-tube command for a given tube, but that is for another day!

Another thought is possibly to have a cacti graph of the total-jobs field, it looks like a always increasing counter, so should be pretty trivial to hook up to cacti.

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>