Nagios notify-by-campfire Plugin

Since one of the core communication methods for my company amongst engineers is 37Signals Campfire and Nagios is one of our main monitoring tools for all of our applications and services, I thought it would be a good idea to combine the two. So with a few simple additions to the Nagios configuration and a Ruby Campfire script, you can get this up and running.

On the Campfire side, I will leave the exercise of adding a Campfire user up to you. You may need to go through your Campfire administrator for that.

On the Nagios side, the first thing that needs to happen is that you need to add the following commands to your command.cfg file in your Nagios configuration. Make sure that you specify the proper location of your notify-by-campfire.rb file.

# 'notify-host-by-campfire' command definition
define command{
    command_name    notify-host-by-campfire
    command_line    /usr/bin/printf "%b" "***** Nagios *****\n\nNotification Type: $NOTIFICATIONTYPE$\nHost: $HOSTNAME$\nState: $HOSTSTATE$\nAddress: $HOSTADDRESS$\nInfo: $HOSTOUTPUT$\n\nDate/Time: $LONGDATETIME$\n" | /usr/local/bin/ruby /usr/local/bin/notify-by-campfire.rb -s "** $NOTIFICATIONTYPE$ Host Alert: $HOSTNAME$ is $HOSTSTATE$ **"
    }  

# 'notify-service-by-campfire' command definition
define command{
    command_name    notify-service-by-campfire
    command_line    /usr/bin/printf "%b" "***** Nagios *****\n\nNotification Type: $NOTIFICATIONTYPE$\n\nService: $SERVICEDESC$\nHost: $HOSTALIAS$\nAddress: $HOSTADDRESS$\nState: $SERVICESTATE$\n\nDate/Time: $LONGDATETIME$\n\nAdditional Info:\n\n$SERVICEOUTPUT$" | /usr/local/bin/ruby /usr/local/bin/notify-by-campfire.rb -s "** $NOTIFICATIONTYPE$ Service Alert: $HOSTALIAS$/$SERVICEDESC$ is $SERVICESTATE$ **"
    }

Add this contact template definition for the Campfire contact to your contacts.cfg. Don’t forget to add it to a contactgroup.

define contact{
        name                            campfire-contact
        service_notification_period     24x7
        host_notification_period        24x7
        service_notification_options    w,u,c,r,f,s
        host_notification_options       d,u,r,f,s
        service_notification_commands   notify-service-by-campfire
        host_notification_commands      notify-host-by-campfire
        register                        0
        }

The Ruby code for notify-by-campfire.rb is here. Just install it wherever you’d like and as I said above, make sure its specified properly in your commands.cfg.

Note: I am aware that I could have made this script much shorter, but my goal is to make this extensible should I want to provide more information or change the format. Feel free to modify for your own usage.

Update (2010-05-17): To make it a little easier to read in the context of a smaller Campfire window, I have amended the notify-host-by-campfire and notify-service-by-campfire entries to be shorter:

# 'notify-host-by-campfire' command definition
define command{
    command_name    notify-host-by-campfire
    command_line    /usr/bin/printf "%b" "Date/Time: $LONGDATETIME$\n\nHost: $HOSTNAME$\nType/State: $NOTIFICATIONTYPE$/$HOSTSTATE$\n\nInfo: $HOSTOUTPUT$\n\nDate/Time: $LONGDATETIME$\n" | /usr/local/bin/ruby /usr/local/bin/notify-by-campfire.rb -s "** $NOTIFICATIONTYPE$ Host Alert: $HOSTNAME$ ($HOSTADDRESS$) is $HOSTSTATE$ **"
    }

# 'notify-service-by-campfire' command definition
define command{
    command_name    notify-service-by-campfire
    command_line    /usr/bin/printf "%b" "Date/Time: $LONGDATETIME$\nType/State: $NOTIFICATIONTYPE$/$SERVICESTATE$\n\n$SERVICEOUTPUT$" | /usr/local/bin/ruby /usr/local/bin/notify-by-campfire.rb -s "** $NOTIFICATIONTYPE$ Service Alert: $HOSTALIAS$/$SERVICEDESC$ ($HOSTADDRESS$) is $SERVICESTATE$ **"
    }