Nagios is an open source software application that is used for monitoring systems and networks.
You can watch hosts, services and files. It’s very flexible, giving the ability to monitor a vast range of hardware and software. Probably not the most user-friendly thing to get started with, whilst it’s incredibly flexible, it’s all manually configured – no auto-discover here. There’s a remarkable range of plugins available, and once configured, a Nagios setup can run happily for years with no intervention beyond adding in new devices.
Correctly configured, Nagios is a godsend, keeping track of your whole infrastructure. There’s a webpage you can view for an instant update of the monitoring at any given moment (If you like to see a page of reassuring green indicators), and it can reliably ping you an alert via email and SMS text message when the need arises, escalating the alert to a wider group if not responded to.
Nagios is a proven, mature platform for infrastructure monitoring, and we use it ourselves.
This script should also work with Icinga (A fork of Nagios), and Shinken (A Nagios replacement aimed at better handling high availability and load balancing), but there’s no warranty on that.
Market leading coverage and specialist support, HTTP, SMPP and SMTP (Email) interfaces.
Easy Use APIs
HTTP, SMPP & SMTP
Premium Support
20+ Years Experience
Free Cloud SMS Software
Communicator Pro
Auto Responder
Auto SMS Processing
You can download the perl script from Nagios Exchange or Github
We provide a plugin script to send sms text messages via the World-Text.com HTTP API: notify_worldtext_sms.pl:
#!/usr/bin/perl # id = World Text Account ID # key = World Text secret API key # dstaddr = Destination mobile number (the number to send SMS to) # txt = the text message body use strict; use JSON; use LWP::Simple; use LWP::UserAgent; use URI::Escape; use Getopt::Long; use HTTP::Request::Common; my %args; GetOptions( 'help' => \$args{help}, 'id=i' => \$args{id}, 'key=s' => \$args{key}, 'dstaddr=s' => \$args{dstaddr}, 'txt=s' => \$args{txt}, 'sim' => \$args{sim} ); if(defined($args{help}) || !defined($args{id}) || !defined($args{key}) || !defined($args{dstaddr}) || !defined($args{txt}) ) { print "usage: notify_worldtext_sms.pl --id --key --dstaddr --txt --sim\n"; exit(0); } ## URL Encode the text message text my $text = uri_escape($args{txt}); ## Build the URL my $baseurl = "http://sms.world-text.com/v2.0"; my $getvars = "id=$args{id}&key=$args{key}&dstaddr=$args{dstaddr}&srcaddr=Nagios&txt=$text"; ## Has a simulation been requested if(defined($args{sim})) { $getvars = "$getvars&sim"; } ## Create the user agent and send the request my $ua = LWP::UserAgent->new(); my $rsp = $ua->request(PUT "$baseurl/sms/send?$getvars"); ## Process the response my $data = decode_json( $rsp->content ); if(${data}->{status} == 0) { print "Message sent succesfully to $args{dstaddr}\n"; } else { print "Message submission failure: " . ${data}->{desc} . "\n"; }
One note on the sim parameter in the perl script above. If this is included the World-Text API will accept the message and generate a simulated delivery receipt. This allows you to test notifications, and Nagios escalations etc extensively without incurring a charge every time.
We'd recommend testing with simulated first, then a final round of testing with live SMS sends to ensure you've got all the phone numbers correct!
If you forget and don't remove sim, NO text messages will be sent!
ACCOUNTID and APIKEY are obtained from within your World-Text.com account page. Replace with the values from there.
Define two commands notify-by-sms and host-notify-by-sms as follows:
define command { command_name notify-by-sms command_line $USER1$/notify_worldtext_sms.pl -i ACCOUNTID -k APIKEY -d $CONTACTPAGER$ -t "NOTIFICATIONTYPE$ $SERVICESTATE$ $SERVICEDESC$ Host($HOSTNAME$) Info($SERVICEOUTPUT$) Date($SHORTDATETIME$)" } define command { command_name host-notify-by-sms command_line $USER1$/notify_worldtext_sms.pl -i ACCOUNTID -k APIKEY -d $CONTACTPAGER$ -t "$NOTIFICATIONTYPE$ $HOSTSTATE$ Host($HOSTALIAS$) Info($HOSTOUTPUT$) Time($SHORTDATETIME$)" }
In your contacts add the field "pager" with the contact's mobile number in full international format e.g.
define contact{ contact_name engineer alias Support Engineer service_notification_period 24x7 host_notification_period 24x7 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 engineer@mydomain.com pager 447987xxxxxx }
You will, of course, need an active World-Text account to be able to send alerts from Nagios. If you don't yet have an account, you can open an account here. Obviously, alerting is an important, but (hopefully) occasional need, so we'd recommend an auto top-up of a small amount on the account so you don't accidentally run out of credits!