====== Alert using SMS ======
===== Requirements =====
* either an account with SMS service provider [[http://www.meteorsis.com/|Meteros Information Systems]], or a GSM modem
* [[http://www.gnokii.org/|Gnokii]] if GSM modem is used
* SMS Dispatcher server and client scripts below
===== Installing the SMS Dispatcher Server =====
Server Features:\\
* fault tolerance by using a locally connected GSM modem as backup.
* local buffering using a MySQL database.
* scheduling
First, setup the database **smsd**:
CREATE DATABASE smsd;
GRANT ALL PRIVILEGES ON smsd.* to 'nagios'@'localhost' IDENTIFIED BY 'secretpw';
USE smsd;
CREATE TABLE `sms_queue` (
`id` int(11) unsigned NOT NULL auto_increment,
`queue_date` int(11) unsigned NOT NULL default '0',
`phone_no` varchar(20) NOT NULL default '',
`sent_date` int(11) unsigned default NULL,
`sent` enum('0','1') NOT NULL default '0',
`tries` tinyint(4) unsigned default '0',
`send_via` enum('G','L') default NULL,
`sms_text` varchar(160) NOT NULL default '',
`not_before` int(11) unsigned default NULL,
`not_after` int(11) unsigned default NULL,
`done` enum('0','1') default '0',
`error` varchar(255) default NULL,
`last_update` int(11) unsigned default NULL,
PRIMARY KEY (`id`),
KEY `active_jobs_idx` (`not_after`,`not_before`,`done`),
KEY `expired_jobs_idx` (`not_after`,`done`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
CREATE TABLE `sms_done_queue` (
`id` int(11) unsigned NOT NULL default '0',
`queue_date` int(11) unsigned NOT NULL default '0',
`phone_no` varchar(20) NOT NULL default '',
`sent_date` int(11) unsigned default NULL,
`sent` enum('0','1') NOT NULL default '0',
`tries` tinyint(4) unsigned default '0',
`send_via` enum('G','L') default NULL,
`sms_text` varchar(160) NOT NULL default '',
`not_before` int(11) unsigned default NULL,
`not_after` int(11) unsigned default NULL,
`done` enum('0','1') default '0',
`error` varchar(255) default NULL,
`last_update` int(11) unsigned default NULL,
PRIMARY KEY (`id`),
KEY `sent_idx` (`sent_date`,`sent`),
KEY `jobs_idx` (`queue_date`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
Put the [[SMS Dispatcher Server script]] in ''/usr/sbin'', its [[sample smsd configuration|configuration file]] in /etc, and start it by this [[init script]].
chown root:root smsd.pl
chmod 755 smsd.pl
cp smsd.pl /usr/sbin/
chown root:nagios smsd.conf
chmod 650 smsd.conf
cp smsd.conf /etc/
chown root:root smsd-init
chmod 755 smsd-init
cp smsd-init /etc/init.d/smsd
chkconfig --add smsd
chkconfig smsd on
===== Client script =====
A simple client script [[ssms.pl]] is used to insert jobs to the server.
Install it to ''/usr/local/bin/'':
chmod 755 ssms.pl
chown root:root ssms.pl
cp ssms.pl /usr/local/bin/
===== Configuration =====
Define the command to send SMS alert:
# host notify (set expire to default notification_interval = 7200 seconds)
define command{
command_name host-notify-by-smsd
command_line /usr/bin/perl /usr/local/bin/ssms.pl -t $NOTIFICATIONTYPE$ -a HOST -g $HOSTGROUPNAME$ -H $HOSTNAME$ -d $HOSTSTATEID$ -n $CONTACTPAGER$ -e 7200
}
# service notify (set expire to default notification_interval = 7200 seconds)
define command{
command_name service-notify-by-smsd
command_line /usr/bin/perl /usr/local/bin/ssms.pl -t $NOTIFICATIONTYPE$ -a SVC -g $HOSTGROUPNAME$ -H $HOSTNAME$ -s "$SERVICEDESC$" -d $SERVICESTATEID$ -o "$SERVICEOUTPUT$" -n $CONTACTPAGER$ -e 7200
}
Define a contact to use SMS alert:
define contact{
...
service_notification_commands service-notify-by-smsd
host_notification_commands host-notify-by-smsd
pager 85291234567
...
}
**Note** - The mobile phone number must be prefix with country code.
===== Check SMS service credit =====
Put the [[check_sms_credit.pl]] script into the ''/usr/lib/nagios/plugins/'' folder.
Check command definition:
# check SMS Service credits
define command{
command_name check_sms_credit
command_line $USER1$/check_sms_credit.pl -u $ARG1$ -p $ARG2$ -w $ARG3$ -c $ARG4$
}
Example service check definition:
define service{
...
service_description SMS Credits
normal_check_interval 60
check_command check_sms_credit!username!password!30!10
...
}