С Nagios имам активна и резервна настройка на сървъра, която се опитвам да наблюдавам. Когато активният е онлайн, той ще отговори на този OID. Режимът на готовност няма да отговори на този OID, но все пак искам да го проверявам често. По този начин, ако сървърите променят състоянието си, SNMP проверките ще продължат да работят.
Конфигурирам и двата сървъра в Nagios за рутинни проверки. Целта ми е да проверя режима на готовност и ако изтече времето, да проверя активния (дефиниран от променлива $peer), за да проверя, че режимът на готовност е правилно режимът на готовност. След това излезте с OK. Ако режимът на готовност И активен не отговаря, тогава излезте от критично.
PHP snmpwalk изпраща предупреждение, когато изтече времето и не може да достигне до хоста. Използвам персонализиран манипулатор на грешки, за да хвана предупреждението и да направя нещо по въпроса.
Изглежда обаче не мога да стартирам втория кръг на SNMP проверката. Той минава точно покрай и върху останалата част от скрипта ми, повтаряйки всички мои грешки по пътя. Очакваният резултат беше да изляза.
Как мога да правя вложени опити и улавяне с тази настройка?
// First, setup error handling.
function errorHandler($errno, $errstr, $errfile, $errline) {
throw new Exception($errstr, $errno);
}
set_error_handler('errorHandler');
if (!is_null($peer)) {
//Dummy SNMP check to see if we get a timeout error or not.
try {
echo "trying ".$host." \n";
snmpwalk($host,$community,$oid);
}
catch (Exception $e) {
// If we get here, it timed out. Now check to see if the peer server is up.
echo "timed out, trying ".$peer." \n";
try {
snmpwalk($peer,$community,$oid);
}
catch (Exception $e) {
// At this point, the peer server is up, so chances are we're the standby.
echo "standby is up, we are ok";
$output = "OK: It appears this is the standby server. \n";
fwrite(STDOUT, $output);
exit(0);
}
echo "Hmm, something else happened. \n";
}
}
// Restore default error handler.
restore_error_handler();