i am currently looking for an open-source monitoring solution like zabbix and icinga. While these both seem to be very powerful for monitoring generic states of hard- and software, I am missing information -- for me -- important functionality, or i could not figure out how it could work by just reading their documentation.

I would like to integrate some job-queue in such a monitoring tool. On the one hand, I need to know summary information of the queue like generic availability etc., which would be no problem to integrate with one of these tools. On the other hand i would like to have additional detailed information about whats going on in the queues.

I would like develop a plugin, which could return an arbitrary amount of detailed data -- like information about each job stored in the queue -- which i could fill in a custom view / template, which i could nicely integreate in one of these monitoring tools.

Is this possible with zabbix, icinga or any other open-source monitoring solution?


Have you considered Nagios? It allows one to write plugins (in any language) and generally easily integrate them into the monitoring framework. In fact, it might be possible that with all the users running Nagios out there, a plugin might be out there that does what you want.

To store more specific information about a job or specific contents in a queue, you might consider construction of some simple Web CGI scripting using the Nagios collection agent to obtain the required data from the server.

As Nagios runs under Apache, this could be a possible approach.

  • mmm ... i am not exactly sure, how this could work. do you know of an example plugin, which i could have a look at, that implements this approach? – harald Oct 21 '11 at 10:29

Since you've added the nagios tag, I give you an example with it and NRPE.

Firstly, write your own plugin in favourite language. Remember the return codes:

0 - OK

Here's shell script snippet to monitor the length of a list in Redis:


    echo "Usage: $0 <host> <port> <key> -w <warning> -c <critical>"

case "$1" in

if [ $# -eq 0 ]; then
    exit 3
if [ $# -ne "7" ]; then
    exit 4
if [ $4 !="-w" -o $6 !="-c" ]; then
    exit 5

LLEN=`echo "$3" | $REDIS_CLI -h $1 -p $2 llen`
if [ $LLEN -lt $5 ]; then
    echo "$3.llen:$2 OK - $LLEN | $3.llen:$2=$LLEN;$5;$7"
    exit 0
elif [ $LLEN -ge $5 -a $LLEN -lt $7 ]; then
    echo "$3.llen:$2 WARNING - $LLEN | $3.llen:$2=$LLEN;$5;$7"
    exit 1
elif [ $LLEN -ge "$7" ]; then
    echo "$3.llen:$2 CRITICAL - $LLEN | $3.llen:$2=$LLEN;$5;$7"
    exit 2

Secondly, define a command in /etc/nagios/nrpe.cfg, something like this:

command[check_queue]=/usr/lib64/nagios/plugins/check_queue.sh <host> <port> \
    <queue_name> -w <warning_threshold> -c <critical_threshold>

And thirdly, on the Nagios server, this plugin can be called with:

define service{
    use                     generic-service
    host_name               <remote_server>
    service_description     <queue_name>
    check_command           check_nrpe!check_queue
    contact_groups          admin-sms
  • mmm ... as far as i understand, die return code ist the exit code of the plugin? can i return an arbitrary amount of output for example using "print" in the plugin and writing it in some template? how would this be presented/stored in nagios? – harald Oct 21 '11 at 10:31
  • Sure, you can print detailed info. See my above example. Could you explain a little more about the "template"? – quanta Oct 21 '11 at 10:40

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.