Rdiff-backup Monitoring Plugin

Aus Thomas-Krenn-Wiki
Wechseln zu: Navigation, Suche

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.

check_rdiff warnt, wenn sich im Backup zu viele Daten geändert haben.

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:

$ 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

Der Patch fügt dem Plugin Performance Daten hinzu.

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);
 }


Foto Georg Schönberger.jpg

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.


Das könnte Sie auch interessieren

TCP Port 25 (smtp) Zugriff mit telnet überprüfen
Vi Editor Tipps und Tricks
Wake on LAN unter Linux