Interner Serverfehler des Azure-Funktionsproxys 500 von SocketException
Ich habe eine Azure-Funktion, die Proxys verwendet und an eine andere Azure-Funktion als Backend weiterleitet. Es gibt einen / api / ping-Endpunkt, der ein GET akzeptiert. Wenn ich ein HTTP-GET an Ping sende, wird gelegentlich ein 500 Internal Server Error angezeigt, bei dem ein Fehler aufgetreten ist, bei dem nur die Anforderung auf dem Proxy angezeigt wird, die Anforderung jedoch nicht auf der Backend-Code-Ausführungsfunktion.
Ich habe den Header "Proxy-Trace-Enabled" für "true" zum Header hinzugefügt, um die Ergebnisse zu verfolgen. Ich habe die Ergebnisse in meinem Ordner D: \ home \ LogFiles \ Application \ Proxies \ DetailedTrace. Dort enthält das Protokoll für eine fehlgeschlagene Anforderung ein "Backend" -Json-Objekt mit den folgenden Angaben
{
"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"
]
}
}
Ich glaube, dies ist Azure Functions 1.0 in DotNet, aber es wurde vor langer Zeit erstellt. Warum gibt mir mein einfacher Azure Function-Proxy interne Serverfehler, die nicht zur Ausführung an meinen Backend-Code weitergeleitet werden?
Als Referenz zum Verfolgen der Anforderungen
Antworten
Es gibt TCP-Verbindungsschwellenwerte für Azure Function App Service-Pläne, die mit den Socket-Verbindungen korrelieren. Die Dokumentation war in einem Blog, den ich hier verlinken werde. Es gab eine ähnliche Frage zu TCP / Port-Erschöpfung, bei der eine ähnliche Korrelation zwischen Problemen verwendet wurde . Obwohl die gemeldete Ausnahme unterschiedlich ist, verschwinden die Fehler in meinen Tests beim Skalieren des App-Dienstes, auf dem er aktiviert ist.
Beispiel: Ich habe 2 Azure-Funktionen, FunctionA und FunctionB. FunctionA ist ein Proxy und ohne Backend-Ausführung in App Service Plan P1. Funktion B ist eine nicht korrelierte Funktion, wird jedoch auf demselben App Service Plan P1 ausgeführt.
FunctionA unter dem App Service Plan P1 weist beim Aufruf Probleme mit internen 500 Server-Fehlern auf. In App Insights als fehlerhaft gemeldet und in den Backend-Protokollen als Socket-Ausnahme verfolgt.
Ich habe die Azure-Funktion FunctionA im App Service Plan P3 neu erstellt. FunctionA hat keine 500 internen Serverfehler erhalten. Es ist jedoch nicht der Umfang eines P3-Zahlungsplans erforderlich. Also habe ich es zurück zum P1 verschoben. Serverfehler sind erneut aufgetreten.
FunctionB befand sich im selben App Service Plan wie FunctionA (P1). Die Azure-Überwachungsmetriken summierten sich auf 4.200 SocketOutboundAll pro Minute. Ich habe FunctionB von P1 nach P3 verschoben (gelöscht und neu erstellt). Ich habe FunctionA auf P1 beibehalten. Die Fehler von SocketOutboundAll wurden aus FunctionA auf P1 entfernt. Funktionen im P3 App Service Plan melden ebenfalls keine Ausnahmen.