1

我有一个 Azure 函数,它使用代理并转发到另一个 azure 函数作为后端。有一个接受 GET 的 /api/ping 端点。当我向 ping 发送 HTTP-GET 时,我偶尔会收到 500 内部服务器错误,它在我仅在代理上看到请求但在后端代码执行功能上看不到请求的地方出现故障。

我将“true”的标题“Proxy-Trace-Enabled”添加到标题中以跟踪结果。我的 D:\home\LogFiles\Application\Proxies\DetailedTrace 文件夹中有结果。在那里,失败请求的日志包含一个“后端”json对象,其中包含以下内容

{
    "source": "forward-request",
    "timestamp": "2020-08-20T15:42:20.8272145Z",
    "elapsed": "00:00:00.0061051",
    "data": {
      "messages": [
        "Only one usage of each socket address (protocol/network address/port) is normally permitted Only one usage of each socket address (protocol/network address/port) is normally permitted",
        "Only one usage of each socket address (protocol/network address/port) is normally permitted",
        "Only one usage of each socket address (protocol/network address/port) is normally permitted"
      ]
    }
  }

我相信这是 DotNet 上的 Azure Functions 1.0,但它是很久以前创建的。为什么我的简单 Azure Function 代理会向我提供未转发到后端代码执行的内部服务器错误?

有关如何跟踪请求的参考

4

1 回答 1

0

Azure Function App Service Plans 有与套接字连接相关的 TCP 连接阈值。该文档位于我将在此处链接的博客中。 TCP/Port Exhaustion 上有一个类似的问题,它在问题之间使用了类似的相关性。虽然报告的异常不同,但在扩展它所在的应用程序服务时,我的测试中的错误消失了。

示例:我有 2 个 Azure 函数,FunctionA 和 FunctionB。FunctionA 是一个代理,在应用服务计划 P1 上没有后端执行。FunctionB 是非相关函数,但在相同的应用服务计划 P1 上执行。

应用服务计划 P1 下的 FunctionA 在调用时出现内部 500 服务器错误问题。在 App Insights 中报告为故障,并在后端日志中作为套接字异常进行跟踪。

我在应用服务计划 P3 上重新创建了 Azure 函数 FunctionA。FunctionA 未收到 500 内部服务器错误。但是,它不需要 P3 付款计划的规模。所以我把它移回了P1。服务器错误再次发生。

FunctionB 与 FunctionA (P1) 使用相同的应用服务计划。Azure 监控指标总计每分钟 4,200 个 SocketOutboundAll。我将(删除并重新创建)FunctionB 从 P1 移动到 P3。我在 P1 上保留了 FunctionA。SocketOutboundAll 的错误已从 P1 上的 FunctionA 中消除。P3 App Service Plan 上的功能也没有报告任何异常。

于 2020-09-08T17:17:31.517 回答