- Hier bitte nur Fragen und Diskussionen zu diesem Skript und PRTG *
Mal wieder ein kleines Skript von meiner Seite.
Nachdem mich Raketenschnecke auf das Monitoringsystem PRTG aufmerksam gemacht hat, meinen recht herzlichen Dank hierzu :), habe ich in PRTG natürlich meine Überwachung für IP-Symcon eingebaut was
[ul]
[li]Proszessspeicher (IPS)[/li][li]Prozessorzeit (IPS)[/li][li]logging.db (IPS)[/li][li]Protokolldateigröße (IPS)[/li][li]settings (Aktualisierungsintervall)[/li][/ul]betrifft.
Um PRTG betreiben zu können sollten schon ein paar grundsätzliche Netzwerkkentnisse vorhanden sein, läßt sich aber intuitiv bedienen. Eine 30-Tage Trial in vollem Funktionsumfang die nach diesem Zeitraum zur Freeware wird aber nur noch 10 Sensoren abfrägt kann beim Hersteller bezogen werden. Diese Version kann dann noch unter bestimmten Voraussetzungen zur Starter-Version (20 Sensoren) upgegradet werden.
Um die Daten in IPS weiterverarbeiten zu können, sei es in Form von Highcharts-Graphen oder sonstigen Warnmeldungen (übernimmt ja eigentlich PRTG) bietet dieses eine HTTP-API an von der man verwertbare XML-Meldungen geliefert bekommt.
Hierzu habe ich ein kleines Skript gebastelt, das mit einer kleinen Dokumentation versehen, von jedem der mit PRTG arbeitet und schon ein wenig in IPS gebastelt hat, angepasst werden kann.
Aber nun Schluß der vielen Worte.
Einfach das Skript in IPS an dem gewünschten Ort erstellen, Zugangsdaten zum PRTG eintragen, entsprechende Variablen und Pofile anlegen, diese im Skript an der passenden Stelle eintragen und das Skript einmal starten.
Als Ergebnis bekommt ihr im Skripteditor im Ausgabefenster die entsprechend gefiliterten Gruppen-Sensoren. Die vorgestellten ID in die entsprechend angelegten Variablen im Skript eintragen, Kommentierung // entfernen und schon sollte es funktionieren. Vorausgesetzt PRTG ist ähnlich eingerichtet wie auf dem Screenshot zu sehen.
<?
//------------------------------------------------------------------------------
// Skript zum Auslesen der Sensorwerte aus PRTG (Monitoringsystem)
// Trialversion 30 Tage die anschließend zur Freeware mit 10 Sensoren wird
// kann unter der URL http://www.paessler.com/ geladen werden.
//
// Dieses Skript dient nur als Grundgerüst zum Auslesen von Sensoren aus PRTG.
// Sollten mehrer Variablen benötigt werden entsprechend erweitern.
//
// Anleitung:
// Parameter in Zeile 24 - 28 anpassen. Am besten eigenen Benutzer in PRTG anlegen.
// Benötigte Variablen und Profile der abzufragenden Sensoren anlegen
//
// Ausführen-Button in diesem Skripteditor drücken damit die Ausgabe der Sensoren
// und dessen Array-Nummer bekannt wird.
//
// In Zeile 53-57 die gewünscht Array-Nummer der Variablen zuweisen.
//------------------------------------------------------------------------------
// Parameter für PRTG
$prtg_url = 'http://ip:port'; // PRTG-URL inkl. Port wenn nicht 80
$user = 'ips'; // PRTG-User
$password = 'ipsymcon'; // PRTG-Passwort
//$prtg_group = 'Local probe'; // Gruppenfilter auf Testweise auf 'Local probe'. Sollte in jedem PRTG vorhanden sein
$prtg_group = 'Dienste'; // Gruppenfilter der angezeigt werden soll.
$url = urldecode("$prtg_url/api/table.xml?content=sensors&columns=objid,group,device,sensor,status,message,lastvalue,priority,favorite&username=$user&password=$password");
$xmlraw = Sys_GetURLContent(($url));
$xml=@simplexml_load_string($xmlraw);
$prtg = array();
$itemIDnew = 0;
for($itemID=0; $itemID < count($xml->item); $itemID++) {
if($xml->item[$itemID]->group == $prtg_group) {
$prtg[$itemIDnew]['Gruppe'] = $xml->item[$itemID]->group."\r";
$prtg[$itemIDnew]['Device'] = utf8_decode($xml->item[$itemID]->device."\r");
$prtg[$itemIDnew]['Sensor'] = $xml->item[$itemID]->sensor."\r";
$prtg[$itemIDnew]['SensorStatus'] = $xml->item[$itemID]->status."\r";
$prtg[$itemIDnew]['LastValueFormatted'] = $xml->item[$itemID]->lastvalue."\r";
$prtg[$itemIDnew]['LastValueRaw'] = $xml->item[$itemID]->lastvalue_raw."\r";
$itemIDnew++;
}
}
// Hier bei $prtg[x] die entsprechende Array-Nummer des Sensors eintragen.
// und die Sensoren einkommentieren
//if($prtg[0]['LastValueRaw'] != 0) SetValue(10620 /*[Tools\PRTG Monitoring\IPS-Monitoring (PRTG)\Arbeitssatz]*/, $prtg[0]['LastValueRaw'] / 1024 / 1024);
//if($prtg[2]['LastValueRaw'] != 0) SetValue(29934 /*[Tools\PRTG Monitoring\IPS-Monitoring (PRTG)\Datenbank]*/, $prtg[2]['LastValueRaw'] / 1024 / 1024);
//if($prtg[3]['LastValueRaw'] != 0) SetValue(35802 /*[Tools\PRTG Monitoring\IPS-Monitoring (PRTG)\Protokoll]*/, $prtg[3]['LastValueRaw'] / 1024 / 1024);
//if($prtg[4]['LastValueRaw'] != 0) SetValue(15051 /*[Tools\PRTG Monitoring\IPS-Monitoring (PRTG)\Letzter Schreibzyklus Settings]*/, (int)$prtg[4]['LastValueRaw']);
//if($prtg[1]['LastValueRaw'] != 0) SetValue(46893 /*[Tools\PRTG Monitoring\IPS-Monitoring (PRTG)\Prozessorzeit]*/, (int)$prtg[1]['LastValueRaw']);
if($_IPS['SENDER'] == "Execute") {
IPS_SetHidden($_IPS['SELF'], true);
IPS_SetScriptTimer($_IPS['SELF'], 60);
echo "ID Sensorname
";
echo "---------------------
";
for($id=0; $id < count($prtg); $id++) {
echo $id." ".$prtg[$id]['Sensor'];
}
echo "-------------------------------------------------
";
echo "Anzahl Sensoren ohne Filter: ".count($xml->item)."
";
echo "-------------------------------------------------
";
echo "Komplettes Array der Sensorendaten für Debugzwecke
";
echo "-------------------------------------------------
";
print_r($prtg);
}
?>
Viel Spaß damit!