0

使用 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();
4

1 回答 1

1

您的 catch 块包含注释,表明您认为您已成功连接到 $peer,但 catch 块只有在连接到 $peer 失败时才会运行。

将代码移到 catch 块之外,您将获得所需的行为。

于 2013-09-23T01:06:48.093 回答