Automatic Downtimes in Nagios Without Using Time Periods

Monitoring systems are a great thing, and we rely heavily on Nagios here at PalominoDB.  We also rely heavily on xtrabackup for (mostly) non-locking, "warm" backups of MySQL.  In order to get a consistent backup with a proper binlog position on a slave, xtrabackup stops replication for a short period of time.  If the monitoring system catches this, the pager will go off, and usually in the middle of the night.

Nagios can have specific windows when it is on or off for a particular host or service, but you have to remember that when you change the time the backup runs.  I prefer to call a script from cron, just before I call the backup script, so that I can easily see that they are related.

Note that this script works even if you have Nagios password protected with .htaccess, because wget allows for a username and password.  This script is not perfect - there is not a lot of error checking, and log files are hard-coded.  But it does what it needs to.

The script is called like this:

./scheduleDowntimeByService service length host

Sample cron entries (note that the service name depends on what you are checking and the service names themselves):

00 5 * * 0 /home/palominodb/bin/ MySQL+Replication+Lag 3600 hostname


00 5 * * 0 /home/palominodb/bin/ MySQL+Slave+IO+Thread 3600 hostname


00 5 * * 0 /home/palominodb/bin/ MySQL+Slave+SQL+Thread 3600 hostname

Here is the script itself:




use strict;

use POSIX;


my $service = shift @ARGV;

my $length = shift @ARGV;

my $host = shift @ARGV;


unless ($length ) {

        $length = 3600;




my $startTime = time();

my $endTime = $startTime + $length;


my $nagios_start = POSIX::strftime("%m-%d-%Y %H:%M:00", localtime($startTime));

my $nagios_end = POSIX::strftime("%m-%d-%Y %H:%M:00", localtime($endTime));


$nagios_start =~ s@:@%3A@g;

$nagios_start =~ s@-@%2D@g;

$nagios_start =~ s@ @%20@g;

$nagios_end =~ s@:@%3A@g;

$nagios_end =~ s@-@%2D@g;

$nagios_end =~ s@ @%20@g;


my $URL = '' .  $nagios_start . '&end_time=' . $nagios_end . '&cmd_typ=56&cmd_mod=2&host=' . $host . '&service=' . $service . '&com_data=Backups&btnSubmit=Commit';


my $cmd = "/usr/bin/wget --quiet --user=user --password=PASS -O /tmp/nagios_downtime.html '$URL'"


open ( L, ">>/tmp/nagios_downtime.log" );

print L print $cmd . "\n";

print L `$cmd`;

close L;


Excellent article. Keep writing such kind of info on your site.
Im really impressed by your blog.
Hey there, You've done a great job. I will definitely digg it and personally suggest to my friends. I'm confident they will be benefited from this web site.

Tue, 09/04/2012 - 11:39

I like the valuable information you provide on your articles.
I will bookmark your weblog and take a look at once more right here frequently.
I'm relatively certain I will learn plenty of new stuff proper right here! Good luck for the next!

Mon, 09/03/2012 - 03:36

For newest news you have to go to see world-wide-web and on web
I found this site as a finest site for newest updates.

Sat, 09/01/2012 - 20:36

Hello there I am so delighted I found your weblog, I really found you
by error, while I was researching on Bing for something else, Anyways I am here now
and would just like to say thanks a lot for a marvelous post and a all round thrilling blog
(I also love the theme/design), I don’t have time to read
it all at the minute but I have bookmarked it and also
included your RSS feeds, so when I have time I will be
back to read a lot more, Please do keep up the superb jo.

Sat, 09/01/2012 - 15:12


The content of this field is kept private and will not be shown publicly.
  • Web page addresses and e-mail addresses turn into links automatically.
  • Allowed HTML tags: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Lines and paragraphs break automatically.

More information about formatting options

By submitting this form, you accept the Mollom privacy policy.
Website by Digital Loom