Rdiff-backup Monitoring Plugin
rdiff-backup erstellt einfache und effiziente Backups unter Linux. Mit einem Monitoring-Plugin, z.B. für Icinga, das dieser Artikel vorstellt, haben Sie die Änderungen im rdiff-backup-data Verzeichnis stets im Blick. Es warnt, wenn das Backup seit längerer Zeit nicht mehr gelaufen ist oder sich plötzlich zu viele Daten im Mirror änderten.
Folgende Funktionen bietet das Plugin:
- Ob das Backup zu einer bestimmten Uhrzeit noch immer läuft (und z.B. hängen geblieben ist).
- Wenn das Source-Verzeichnis plötzlich kleiner als ein bestimmter Wert geworden ist (z.B. irrtümlich Daten im Source entfernt wurden).
- Ob der Mirror um mehr als einen geg. Wert angewachsen ist (z.B. irrtümlich Daten gesichert wurden, die nicht ins Backup sollten).
Plugin installieren
Das Plugin check_rdiff steht auf nagios-exchange zum Download zur Verfügung:
- check check_rdiff Details (exchange.nagios.org)
$ sudo cp check_rdiff /usr/lib/nagios/plugins/check_rdiff $ sudo chown root:root /usr/lib/nagios/plugins/check_rdiff
Plugin konfigurieren
check_rdiff wird mit root-Rechten ausgeführt, am besten wird für den nagios User daher eine sudo Konfiguration eingerichtet:
$ sudo vi /etc/sudoers.d/rdiff nagios ALL=(root)NOPASSWD:/usr/lib/nagios/plugins/check_rdiff $ sudo chmod 440 /etc/sudoers.d/rdiff
Als nagios User testen Sie, ob die Konfiguration funktioniert:
$ sudo su nagios --shell=/bin/bash nagios@trusty:/home/tktest$ sudo /usr/lib/nagios/plugins/check_rdiff Usage: rdiff_check2.pl [OPTIONS] [...]
Beim Aufruf des Plugins mit sudo darf keine Passwort-Abfrage erscheinen!
Für die Kommando-Definition wird ebenfalls eine Konfiguration erstellt:
$ sudo vi /etc/nagios-plugins/config/rdiff.cfg # check rdiff-backup define command{ command_name check_rdiff command_line sudo $USER1$/check_rdiff -r $ARG1$ -w $ARG2$ -c $ARG3$ -l $ARG4$ -s $ARG5$ -p $ARG6$ }
Dieses Kommando kann daraufhin in einer Service-Definition zum Einsatz kommen:
define service{ use generic-service host_name localhost service_description rdiff-backup check_command check_rdiff!/home/tktest/etc-backup!8!10!100!50!24 }
Das Check-Kommando:
- Liefert eine Warnung, wenn das Backup nach 08:00 noch läuft
- Liefert ein Critical, wenn das Backup nach 10:00 noch läuft
- Diese Zeiten-Einstellungen setzen voraus, dass ein normales Backup um 08:00 bereits beendet sein soll!
- Eine Warnung, wenn sich mehr als 100MB im Mirror geändert haben (TotalDestinationSizeChange)
- Ein Critical, wenn Source kleiner als 50MB geworden ist (SourceFileSize)
Auf der Kommandozeile führen Sie das Plugin wie folgt aus:
$ sudo /usr/lib/nagios/plugins/check_rdiff -r etc-backup/ -w 8 -c 10 -l 100 -s 50 -p 24 OK: Last backup finished Mon Mar 9 21:58:31 2015. Size change 0 MB
Auswertungen
Das Plugin wertet folgende Felder der session.statistics aus, diese werden in Analyse von rdiff-backup Statistiken erklärt:
- SourceFileSize -> Source Verzeichnis ist kleiner als vorgegebener Grenzwert
- TotalDestinationSizeChange -> Mirror Verzeichnis (inkl. rdiff-backup-data) um mehr als geg. Wert angewachsen
Performance Daten
Das urspüngliche Plugin gibt zur Zeit keine Performance-Daten aus. Ein Patch zeigt, wenn das Backup erfolgreich war, Performance-Daten über
- SourceFileSize
- TotalDestinationSizeChange
- New, Deleted und Changed Files
an. Sollte das Backup fehlgeschlagen sein, werden keine Performance-Daten ausgegeben.
--- check_rdiff.orig 2015-03-11 09:23:08.531400084 +0100
+++ check_rdiff 2015-03-11 09:42:22.247409429 +0100
@@ -61,6 +61,9 @@
my $pid_2;
my $size_now;
my $size_change;
+my $new_files;
+my $deleted_files;
+my $changed_files;
my $script;
my $err = 0;
#r=repository
@@ -162,28 +165,32 @@
print "ERROR: Could not open stat file\n";
exit(3);
}
-
- <FILE>;<FILE>;<FILE>;<FILE>;
- $size_now = <FILE>;
- ($size_now) = $size_now =~ /SourceFileSize (.*) \(.*\)$/;
-
- if($size_now <= $s_thresh)
+ while(my $line = <FILE>){
+ $size_now = $1 if $line =~ /SourceFileSize (.*) \(.*\)$/;
+ $new_files = $1 if $line =~ /NewFiles (.*)$/;
+ $deleted_files = $1 if $line =~ /DeletedFiles (.*)$/;
+ $changed_files = $1 if $line =~ /ChangedFiles (.*)$/;
+ $size_change = $1 if $line =~ /TotalDestinationSizeChange (.*) \(.*\)$/;
+ }
+ close FILE;
+ $size_now /= 1048576;
+ $size_change /= 1048576;
+ if($size_now*1048576 <= $s_thresh)
{
$s_thresh /= 1048576;
- print "CRITICAL: Source repository size dropped under $s_thresh megabyte(s)\n";
- exit(2);
+ print "CRITICAL: Source repository size dropped under $s_thresh megabyte(s)";
+ printf("|source_size=%.3fM; size_change=%.3fM; new_files=%d; deleted_files=%d; changed_files=%d;",$size_now, $size_change, $new_files, $deleted_files, $changed_files);
+ exit(2);
}
-
- <FILE>;<FILE>;<FILE>;<FILE>;<FILE>;<FILE>;<FILE>;<FILE>;<FILE>;<FILE>;<FILE>;
- ($size_change) = <FILE> =~ /TotalDestinationSizeChange (.*) \(.*\)$/;
- if($size_change >= $l_thresh)
+ if($size_change*1048576 >= $l_thresh)
{
- $size_change /= 1048576;
- printf("WARNING: Transferred more than threshold(%dMB)\n", $size_change);
+ printf("WARNING: Transferred more than threshold (%dMB)", $size_change);
+ printf("|source_size=%.3fM; size_change=%.3fM; new_files=%d; deleted_files=%d; changed_files=%d;",$size_now, $size_change, $new_files, $deleted_files, $changed_files);
exit(1);
}
$elapsed = localtime(stat($stats_fn)->mtime);
- printf("OK: Last backup finished %s. Size change %d MB\n", $elapsed, $size_change / 1048576);
+ printf("OK: Last backup finished %s. Size change %d MB", $elapsed, $size_change);
+ printf("|source_size=%.3fM; size_change=%.3fM; new_files=%d; deleted_files=%d; changed_files=%d;",$size_now, $size_change, $new_files, $deleted_files, $changed_files);
exit(0);
}
Autor: Georg Schönberger Georg Schönberger, Abteilung DevOps bei der XORTEX eBusiness GmbH, absolvierte an der FH OÖ am Campus Hagenberg sein Studium zum Bachelor Computer- und Mediensicherheit, Studium Master Sichere Informationssysteme. Seit 2015 ist Georg bei XORTEX beschäftigt und arbeitet sehr lösungsorientiert und hat keine Angst vor schwierigen Aufgaben. Zu seinen Hobbys zählt neben Linux auch Tennis, Klettern und Reisen.
|