I have a client who required a Nagios installation with alerting via SMS (*). They use Kapow as their SMS gateway.
There were two aspects required:
- The sending of alerts via the SMS gateway;
- The monitoring of available credits on the SMS gateway;
1. Send Alerts via SMS Gateway
The sendsms
script is:
#! /bin/bash
USERNAME=username
PASSWORD=password
SENDSMSADDRESS="https://www.kapow.co.uk/scripts/sendsms.php"
MAXMSGLENGTH=320
read -n $MAXMSGLENGTH -r MSG
MSG=`php -r "echo urlencode( \"$MSG\" );"`
wget -q -O - "$SENDSMSADDRESS?username=$USERNAME&password=$PASSWORD&mobile=$1&sms=$MSG"
I use a quick hack with PHP to URL encode the string. I didn’t know a shell command off hand but I’m open to suggestions. This can be tested with:
echo This is a test message | sendsms 353861234567
Edit /etc/nagios/misccommands.cfg
to include the following:
# 'host-notify-by-sms' command definition
define command{
command_name host-notify-by-sms
command_line /usr/bin/printf "%b" "Host '$HOSTALIAS$' is $HOSTSTATE$: $OUTPUT$" | /usr/local/bin/sendsms $CONTACTPAGER$
}
# 'notify-by-sms' command definition
define command{
command_name notify-by-sms
command_line /usr/bin/printf "%b" "$NOTIFICATIONTYPE$: $SERVICEDESC$@$HOSTNAME$: $SERVICESTATE$ ($OUTPUT$)" | /usr/local/bin/sendsms $CONTACTPAGER$
}
Ensure your /etc/nagios/contacts.cfg
is updated to include notification by SMS with your mobile number:
define contact{
contact_name barryo
alias Barry O'Donovan
service_notification_period barryoworkhours
host_notification_period barryoworkhours
service_notification_options w,u,c,r
host_notification_options d,u,r
service_notification_commands notify-by-email,notify-by-sms
host_notification_commands host-notify-by-email,host-notify-by-sms
email joe@bloggs.com
pager 353868765432
}
Sin é.
2. Monitor SMS Gateway Credits
The plugin code is:
#! /bin/bash
USERNAME=username
PASSWORD=password
CHECKCREDITSADDRES="https://www.kapow.co.uk/scripts/chk_credit.php"
CRIT=$1
WARN=$2
CREDITS=`wget -q -O - "$CHECKCREDITSADDRES?username=$USERNAME&password=$PASSWORD"`
if [[ -z $CREDITS || ! $CREDITS -ge 0 ]]; then
echo -e "$CREDITS\\n";
exit 3;
elif [[ $CREDITS -le $CRIT ]]; then
echo -e "$CREDITS SMS credits remaining\\n";
exit 2;
elif [[ $CREDITS -le $WARN ]]; then
echo -e "$CREDITS SMS credits remaining\\n";
exit 1;
else
echo -e "$CREDITS SMS credits remaining\\n";
exit 0;
fi
Create a plugin configuration file for Nagios, say /etc/nagios-plugins/config/sms_credits.cfg
:
# 'check_sms_credits' command definition
define command{
command_name check_sms_credits
command_line /usr/local/bin/check_sms_credit $ARG2$ $ARG1$
}
Where $ARG1$
is the warning threshold and $ARG2$
is the critical threshold.
I add the service to the Nagios monitoring box via /etc/nagios/config/sms_credit.cfg
:
#
# check sms credits on Kapow - barryo 20070519
#
define service{
use core-service
host_name noc
service_description SMS Credits
check_command check_sms_credits!50!100
}
And I believe that’s it.
*) The monitoring box is in a different country to the servers it monitors so a network failure will not prevent the alert getting out.