In a previous post, I described how I do Secure rsnapshot backups over
the WAN via
SSH. While my
layout of rsnapshot configuration files, data, and log files is a bit
esoteric, I monitor all this with a Nagios check plugin that runs on my
backup host. It Assumes that the output of
rsnapshot is written to a text log file, one
file per host, at a path that matches
/path_to_log_directory/log_HOSTNAME_YYYYMMDD-HHMMSS.log
where
HOSTNAME
is the name of the host, and YYYYMMDD-HHMMSS
is a datestamp
(actually, the script just finds the newest file matching
log_HOSTNAME_*.log
in that directory). In order to obtain correct
timing of the runs, which rsnapshot doesn’t offer, it assumes that you
trigger rsnapshot through a wrapper script, which runs it once per host
(inside a loop?) with per-host log files and some logging information
added, like:
for h in
do
LOGFILE="/mnt/backup/rsnapshot/logs/log_${h}_`date +%Y%m%d-%H%M%S`.txt"
echo "# Starting backup at `date` (`date +%s`)" >> "$LOGFILE"
/usr/bin/rsnapshot -c /etc/rsnapshot-$h.conf daily &>> "$LOGFILE"
echo "# Finished backup at `date` (`date +%s`)" >> "$LOGFILE"
done
The check_rsnapshot.pl
plugin uses utils.pm
from Nagios, as well as
Getopt::Long,
File::stat,
File::Basename,
File::Spec
and
Number::Bytes::Human.
This was one of my first Perl plugins, but seems to be rather
acceptable. It makes the following checks based on the rsnapshot log:
- Backup run in the last X seconds (warning and crit thresholds)
- Maximum time from start to finish (warning and crit thresholds)
- Minimum size of backup (warning and crit thresholds)
- Minimum number of files in backup (warning and crit thresholds)
In addition to check_file_age
checks on a number of files that are
included in backups and I know are modified before each backup run, this
seems to handle monitoring quite well for me. I certainly preferred
running Bacula and using my MySQL-based
check_bacula_job.php,
but as I’m now backing up 4 machines to my desktop, I no longer have a
need for Bacula (or tapes).
The script itself can be found at github.
Comments
comments powered by Disqus