С Nagios у меня есть активный и резервный сервер, который я пытаюсь отслеживать. Когда актив находится в сети, он ответит на этот OID. Резервный сервер не будет отвечать на этот OID, однако я все же хочу часто его опрашивать. Таким образом, если серверы меняют свое состояние, проверки SNMP будут продолжать работать.
Я настраиваю оба сервера в Nagios для плановых проверок. Моя цель - проверить резервный сервер, и если он истекает, то проверить активный (определяемый переменной $peer), чтобы убедиться, что резервный сервер правильно является резервным. Затем выйдите с помощью ОК. Если резервный И активный не отвечают, выйдите из Критического.
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();