date: 2010-01-05 16:39:56+00:00

Nagios + SMS notifications with Gammu and Siemens MC35i

categories: - High-Availability - Howto

What you need :

  • a working Nagios
  • a GSM modem (this has been tested with a Siemens MC35i) or a cellphone with modem capabilities supported by Linux (I don't have that)
  • Gammu

Set up the modem :

Connect the GSM modem to the Nagios machine through the serial port and make sure it receives signal from the carrier (LED blinking slowly means everything is OK, if not it blinks fast)

Install and configure Gammu :

# apt-get install gammu

The modem should be accessible through /dev/ttyS0

# vim /etc/gammurc

[gammu] port = /dev/ttyS0 connection = at19200 startinfo = no name = Siemens synchronizetime = no use_locking = no

Test the modem

<code># gammu --identify
Manufacturer         : Siemens
Model                : unknown (MC35i)
Firmware             : REVISION 02.00
IMEI                 : 3515590XXXXXX
Product code         : MC35i
SIM IMSI             : 2061021XXXXXX</code>

# gammu --networkinfo Network state : home network Network : 206 10 (Mobistar, Belgium), LAC 6B08, CID 19EC Name in phone : "B mobistar"

<code># gammu --monitor 1
Press Ctrl+C to break...
Entering monitor mode...

Enabling info about incoming SMS    : No error.
Enabling info about incoming CB     : No error.
Enabling info about calls           : No error.
Enabling info about USSD            : No error.
SIM phonebook        :  59 used,  41 free
Dialled numbers      :   7 used,   3 free
Received numbers     :   0 used,  10 free
Missed numbers       :   0 used,  10 free
Own numbers          :   1 used,   2 free
Phone phonebook      :   0 used, 250 free
Leaving monitor mode...</code>

Everything looks fine !

Before we continue, let's check permissions on /dev/ttyS0

# ls -l /dev/ttyS0 crw-rw---- 1 root dialout 4, 64 jan 5 16:14 /dev/ttyS0

Nagios is usually running as user "nagios", so any notification command would be executed as "nagios". We can see user nagios wouldn't have permissions to access devices connected to /dev/ttyS0.

We'll apply the SUID bit (set-UID) on the command in charge of sending SMS notifications, this will execute gammu on behalf of user root.

# chmod 4755 /usr/bin/gammu

We could put nagios in the dialout group as well. I didn't as Nagios is running on an isolated box in the LAN. If someone is able to mess up with gammu executed as SUID on that box, that would mean I'm already in a lot of troubles anyway :-)

Before we continue, we'll try to send a SMS to the belgian cell number 0475123456

# echo "test" | gammu --sendsms TEXT 0475123456 If you want break, press Ctrl+C... Sending SMS 1/1....waiting for network answer..OK, message reference=181

It worked.

Now, an example of Nagios config for SMS notifications :

<code>define command{
        command_name    host-notify-by-sms
        command_line    /usr/bin/printf "%b" "NAGIOS / Host: "$HOSTNAME$" / State: $HOSTSTATE$ / Info:$HOSTOUTPUT$ / Date:$SHORTDATETIME$" | /usr/bin/gammu --sendsms TEXT $CONTACTPAGER$
        }

define command{
        command_name    notify-by-sms
        command_line    /usr/bin/printf "%b" "NAGIOS / Host: "$HOSTALIAS$" / State: $SERVICESTATE$ / Info:$SERVICEOUTPUT$ / Date:$SHORTDATETIME$" | /usr/bin/gammu --sendsms TEXT $CONTACTPAGER$
        }</code>






<code>define contact{
        contact_name                    email
        alias                           email
        service_notification_period     24x7
        host_notification_period        24x7
        service_notification_options    c,r
        host_notification_options       d,r
        service_notification_commands   notify-by-email
        host_notification_commands      host-notify-by-email
        email                           nagios@example.org
 }

define contact{
        contact_name                    sms
        alias                           sms
        service_notification_period     smshours
        host_notification_period        smshours
        service_notification_options    c,r
        host_notification_options       d,r
        service_notification_commands   notify-by-sms
        host_notification_commands      host-notify-by-sms
        pager                           0475123456
 }

define contactgroup{
        contactgroup_name       admins
        alias                   Nagios Administrators
        members                 email, sms
 }</code>






<code>define timeperiod{
        timeperiod_name smshours
        alias           SMS Hours
        sunday          00:00-24:00
        monday          00:00-07:00,18:00-24:00
        tuesday         00:00-07:00,18:00-24:00
        wednesday       00:00-07:00,18:00-24:00
        thursday        00:00-07:00,18:00-24:00
        friday          00:00-07:00,18:00-24:00
        saturday        00:00-24:00
}</code>