使用 Nagios,我有一个要监控的活动和备用服务器设置。当活动在线时,它会响应这个 OID。备用服务器不会回答这个 OID,但是我仍然想经常轮询它。这样,如果服务器翻转/翻转它们的状态,SNMP 检查将继续工作。
我在 Nagios 中配置两台服务器以进行例行检查。我的目标是检查备用,如果超时,然后检查活动(由变量 $peer 定义)以验证备用是正确的备用。然后按 OK 退出。如果standby AND active 没有回复,则退出Critical。
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();