SNMP und Tote Threads

Hiho zusammen,

ich habe mehrere Mikrotik Router die ausserhalb meiner Wohnung stehen und per SNMP abgefragt werden wollen, ich hab durch viel recherchieren und in diesem Forum nach Lösungsansätzen gesucht, leider bin ich noch nicht auf das ultimative Script gestoßen.

Das Problem ist das die Router nur über einen OpenVPN Tunnel abgefragt werden können, und die SNMP Abfragen durch die Verzögerung im Internet ( Ping Timeouts oder Lange Latenzlaufzeiten ) leider immer wieder das IPS zerschießen indem Sie Tote PHP Threads erzeugen.
Ich hab mich dann gestern an mein erstes selbstgebautes Script rangewagt und mir überlegt … okay dann wird die SNMP Abfrage garnicht erst durchgeführt wenn der Ping nicht sauber läuft, stattdessen sollst du mir einen statischen Wert in die Integervariable schreiben.
… ich weiß sehr Amateurhaft aber es hat nach mehreren Stunden rumprobieren dann eigentlich auch funktioniert und ich bin dann wieder mal Spät ins Bett gegangen :slight_smile:
Am nächsten Morgen wollte ich dann mal gucken ob alles geklappt hat und siehe da das Webfront wahr total Tot, und alle 10 PHP Threads waren Rot.

Was könnte man dem Script noch hinzufügen damit die Threads alle brav am Leben bleiben :

<?

$host = "10.255.255.250"; // IP Adresse des Ziels im VPN
$community = "4steps-pub"; // SNMP Community
$ping = Sys_Ping("10.255.255.250", 100); // Sysping auf das Ziel ( Unter 100 ms = True / 1 )

IPS_Sleep(200); // Das Script soll schlafen gehen für 200 ms

if ($ping == 1){ // Wennn der Ping okay ist 1 = True dann SNMP Abfrage starten
	$data = snmpget("$host","$community","1.3.6.1.4.1.14988.1.1.1.2.1.3.0.21.109.234.193.84.6"); // SNMP Abfrage
	$data = intval(str_replace("INTEGER: ", "", $data)); // INTEGER: wegschneiden
	SetValueInteger(20422 /*Integervariable*/  ,$data); // Schreibe SNMP Daten in die Integervariable
	} else
	{
   SetValueInteger(20422 /*[Integervariable]*/  ,-200); // Wenn Ping = 0 / False => schreibe -200 in die Variable
	}

?>

Bitte ganz lieb um Hilfe :slight_smile:

Ich glaube eine Lösung war ein externes snmpget Tool zu verwenden und per IPS_Execute auszuführen.

paresy

Okay :wink: das hab ich auch schon entdeckt aber anfangs net zum laufen bekommen.
Habe heute noch ein wenig rumprobiert.
Hier das Script das ich nun verwende und siehe da auch keine Toten Threads mehr.

 <?
// Host-Config
$host           = "10.0.4.1";
$community      = "public";

// ssnmpq Binary
$binary = "C:\IPStools\ssnmpq\ssnmpq.exe";

//SNMP Query Funktion
function snmp($oid)
{
    global $host, $community, $binary;
    $oid = ltrim($oid,".");
    $value = IPS_Execute($binary, "/h:$host /c:$community /o:$oid /v", false, true);
    $value = trim($value);
    return $value;
}

$cpu = (int) snmp (".1.3.6.1.2.1.25.2.3.1.6.2");
SetValueInteger(58688 /*[Arbeitsspeicher Auslastung]*/ ,$cpu/1024);
?>