TICKTOO Systems | Schöne Dinge. Für das Internet und darüber hinaus.

Software Raid Monitoring via Nagios-SNMP

Sebastian Kraus — 11.07.2012

Da der von Ubuntu bereitgestellte SNMP-Server per Default kein Software-Raid (mdadm) unterstützt und abfragen kann, habe ich etwas nachgeholfen.

Folgendes PHP-Script liest den Status von /proc/mdstat aus und meldet ausgefallene Festplatten in einem Nagios-kompatiblen Format:

#!/usr/bin/php
<?PHP
	$tmp = implode("", file("/proc/mdstat"));
	$pattern = "/md(.*?) : (.*?) (.*?) .*?
.*?\[.*?\] \[(.*?)\]/ius";
	preg_match_all($pattern, $tmp, $pt1);
	$degraded = 0;
	foreach($pt1[1] as $index=>$mdId)	{
		$u = $pt1[4][$index];
		$faulty	= 0;
		for($i = 0; $i < strlen($u); $i++)	{
			if(substr($u, $i, 1) != "U")	{
				$faulty = 1;
				$degraded = "MD".$mdId;
			}
		}
		$md[$mdId] = array(
			'device'=> "md".$mdId,
			'status'=> $pt1[2][$index],
			'level'=> $pt1[3][$index],
			'disks'=> $pt1[4][$index],
			'faulty'=> $faulty
		);
	}
	if($degraded == "")	{
		echo("OK: ");
		foreach($md as $mdinfo)	{
			echo($mdinfo['device'].": ".$mdinfo['status']);
			echo(" [".$mdinfo['disks']."]; ");
		}
	} else {
		echo("CRITICAL: ");
		foreach($md as $mdinfo)	{
			echo($mdinfo['device'].": ".$mdinfo['status']);
			echo(" [".$mdinfo['disks']."]; ");
		}
	}
	echo("
");
	die();
 ?>

Wird das Script ausgeführt, erhält man, bei einem funktionierendem RAID, folgende Ausgabe:

# ./checkraid.php
OK: md2: active [UUUUUUU]; md0: active [UUUUUUU]; md1: active [UUUUUUU];

Ein defektes Raid erwirkt die Ausgabe:

# ./checkraid.php
CRITICAL: md2: active [UUUUU_U]; md0: active [UUUUU_U]; md1: active [UUUUU_U];

In die SNMP-Konfiguration (/etc/snmp/snmpd.conf) lässt es sich folgendermaßen einbinden:

exec raid-status /bin/sh -c "/srv/snmp-raid-detect/checkraid.php"

 

Sharing is Caring Facebook | Twitter | Google | LinkedIn