Dela via


Övervaka och diagnostisera bearbetning av begäranden vid omvänd proxy

Från och med 5.7-versionen av Service Fabric är omvända proxyhändelser tillgängliga för insamling. Händelserna är tillgängliga i två kanaler, en med endast felhändelser relaterade till begärandebearbetningsfel vid omvänd proxy och andra kanalen som innehåller utförliga händelser med poster för både lyckade och misslyckade begäranden.

Se Samla in omvända proxyhändelser för att aktivera insamling av händelser från dessa kanaler i lokala och Azure Service Fabric-kluster.

Felsöka med hjälp av diagnostikloggar

Här följer några exempel på hur du tolkar vanliga felloggar som kan uppstå:

  1. Omvänd proxy returnerar svarsstatuskod 504 (timeout).

    En orsak kan vara att tjänsten inte svarar inom tidsgränsen för begäran. Den första händelsen nedan loggar information om begäran som mottagits vid den omvända proxyn. Den andra händelsen anger att begäran misslyckades vid vidarebefordran till tjänsten på grund av "internt fel = ERROR_WINHTTP_TIMEOUT"

    Nyttolasten innehåller:

    • traceId: Detta GUID kan användas för att korrelera alla händelser som motsvarar en enskild begäran. I de två händelserna nedan är traceId = 2f87b722-e254-4ac2-a802-fd315c1a0271, vilket innebär att de tillhör samma begäran.

    • requestUrl: DEN URL (omvänd proxy-URL) som begäran skickades till.

    • verb: HTTP-verb.

    • remoteAddress: Adressen till klienten som skickar begäran.

    • resolvedServiceUrl: Tjänstslutpunkts-URL som den inkommande begäran har lösts till.

    • errorDetails: Ytterligare information om felet.

      {
      "Timestamp": "2017-07-20T15:57:59.9871163-07:00",
      "ProviderName": "Microsoft-ServiceFabric",
      "Id": 51477,
      "Message": "2f87b722-e254-4ac2-a802-fd315c1a0271 Request url = https://localhost:19081/LocationApp/LocationFEService?zipcode=98052, verb = GET, remote (client) address = ::1, resolved service url = Https://localhost:8491/LocationApp/?zipcode=98052, request processing start time =     15:58:00.074114 (745,608.196 MSec) ",
      "ProcessId": 57696,
      "Level": "Informational",
      "Keywords": "0x1000000000000021",
      "EventName": "ReverseProxy",
      "ActivityID": null,
      "RelatedActivityID": null,
      "Payload": {
      "traceId": "2f87b722-e254-4ac2-a802-fd315c1a0271",
      "requestUrl": "https://localhost:19081/LocationApp/LocationFEService?zipcode=98052",
      "verb": "GET",
      "remoteAddress": "::1",
      "resolvedServiceUrl": "Https://localhost:8491/LocationApp/?zipcode=98052",
      "requestStartTime": "2017-07-20T15:58:00.0741142-07:00"
      }
      }
      
      {
      "Timestamp": "2017-07-20T16:00:01.3173605-07:00",
      ...
      "Message": "2f87b722-e254-4ac2-a802-fd315c1a0271 Error while forwarding request to service: response status code = 504, description = Reverse proxy Timeout, phase = FinishSendRequest, internal error = ERROR_WINHTTP_TIMEOUT ",
      ...
      "Payload": {
      "traceId": "2f87b722-e254-4ac2-a802-fd315c1a0271",
      "statusCode": 504,
      "description": "Reverse Proxy Timeout",
      "sendRequestPhase": "FinishSendRequest",
      "errorDetails": "internal error = ERROR_WINHTTP_TIMEOUT"
      }
      }
      
  2. Omvänd proxy returnerar svarsstatuskod 404 (hittades inte).

    Här är en exempelhändelse där omvänd proxy returnerar 404 eftersom den inte kunde hitta den matchande tjänstslutpunkten. Nyttolasten poster av intresse här är:

    • processRequestPhase: Anger fasen under bearbetningen av begäran när felet inträffade, TryGetEndpoint , d.v.s. vid försök att hämta tjänstslutpunkten som ska vidarebefordras till.

    • errorDetails: Visar en lista över kriterierna för slutpunktssökning. Här kan du se att listenerName har angetts = FrontEndListener medan listan över replikslutpunkter endast innehåller en lyssnare med namnet OldListener.

      {
      ...
      "Message": "c1cca3b7-f85d-4fef-a162-88af23604343 Error while processing request, cannot forward to service: request url = https://localhost:19081/LocationApp/LocationFEService?ListenerName=FrontEndListener&zipcode=98052, verb = GET, remote (client) address = ::1, request processing start time = 16:43:02.686271 (3,448,220.353 MSec), error = FABRIC_E_ENDPOINT_NOT_FOUND, message = , phase = TryGetEndoint, SecureOnlyMode = false, gateway protocol = https, listenerName = FrontEndListener, replica endpoint = {\"Endpoints\":{\"\":\"Https:\/\/localhost:8491\/LocationApp\/\"}} ",
      "ProcessId": 57696,
      "Level": "Warning",
      "EventName": "ReverseProxy",
      "Payload": {
      "traceId": "c1cca3b7-f85d-4fef-a162-88af23604343",
      "requestUrl": "https://localhost:19081/LocationApp/LocationFEService?ListenerName=NewListener&zipcode=98052",
      ...
      "processRequestPhase": "TryGetEndoint",
      "errorDetails": "SecureOnlyMode = false, gateway protocol = https, listenerName = FrontEndListener, replica endpoint = {\"Endpoints\":{\"OldListener\":\"Https:\/\/localhost:8491\/LocationApp\/\"}}"
      }
      }
      

      Ett annat exempel där omvänd proxy kan returnera 404 Hittades inte är: ApplicationGateway\Http-konfigurationsparametern SecureOnlyMode är inställd på true med den omvända proxyn som lyssnar på HTTPS, men alla replikslutpunkter är osäkra (lyssnar på HTTP). Omvänd proxy returnerar 404 eftersom det inte går att hitta en slutpunkt som lyssnar på HTTPS för att vidarebefordra begäran. Genom att analysera parametrarna i händelsenyttolasten kan du begränsa problemet:

      "errorDetails": "SecureOnlyMode = true, gateway protocol = https, listenerName = NewListener, replica endpoint = {\"Endpoints\":{\"OldListener\":\"Http:\/\/localhost:8491\/LocationApp\/\", \"NewListener\":\"Http:\/\/localhost:8492\/LocationApp\/\"}}"
      
  3. Begäran till den omvända proxyn misslyckas med ett timeout-fel. Händelseloggarna innehåller en händelse med information om den mottagna begäran (visas inte här). Nästa händelse visar att tjänsten svarade med statuskoden 404 och att omvänd proxy initierar en ommatchning.

    {
      ...
      "Message": "7ac6212c-c8c4-4c98-9cf7-c187a94f141e Request to service returned: status code = 404, status description = , Reresolving ",
      "Payload": {
        "traceId": "7ac6212c-c8c4-4c98-9cf7-c187a94f141e",
        "statusCode": 404,
        "statusDescription": ""
      }
    }
    {
      ...
      "Message": "7ac6212c-c8c4-4c98-9cf7-c187a94f141e Re-resolved service url = Https://localhost:8491/LocationApp/?zipcode=98052 ",
      "Payload": {
        "traceId": "7ac6212c-c8c4-4c98-9cf7-c187a94f141e",
        "requestUrl": "Https://localhost:8491/LocationApp/?zipcode=98052"
      }
    }
    

    När du samlar in alla händelser visas ett tåg med händelser som visar varje matchnings- och vidarebefordringsförsök. Den sista händelsen i serien visar att bearbetningen av begäran har misslyckats med en tidsgräns, tillsammans med antalet lyckade försök att lösa.

    Anteckning

    Vi rekommenderar att du håller den utförliga kanalhändelsesamlingen inaktiverad som standard och aktiverar den för felsökning efter behov.

    {
      ...
      "Message": "7ac6212c-c8c4-4c98-9cf7-c187a94f141e Error while processing request: number of successful resolve attempts = 12, error = FABRIC_E_TIMEOUT, message = , phase = ResolveServicePartition,  ",
      "EventName": "ReverseProxy",
      ...
      "Payload": {
        "traceId": "7ac6212c-c8c4-4c98-9cf7-c187a94f141e",
        "resolveCount": 12,
        "errorval": -2147017729,
        "errorMessage": "",
        "processRequestPhase": "ResolveServicePartition",
        "errorDetails": ""
      }
    }
    

    Om insamling endast är aktiverat för kritiska/felhändelser visas en händelse med information om tidsgränsen och antalet försök att lösa problemet.

    Tjänster som avser att skicka en 404-statuskod tillbaka till användaren bör lägga till en "X-ServiceFabric"-rubrik i svaret. När rubriken har lagts till i svaret vidarebefordrar omvänd proxy statuskod tillbaka till klienten.

  4. Fall då klienten har kopplat från begäran.

    Följande händelse registreras när omvänd proxy vidarebefordrar svaret till klienten men klienten kopplar från:

    {
      ...
      "Message": "6e2571a3-14a8-4fc7-93bb-c202c23b50b8 Unable to send response to client: phase = SendResponseHeaders, error = -805306367, internal error = ERROR_SUCCESS ",
      "ProcessId": 57696,
      "Level": "Warning",
      ...
      "EventName": "ReverseProxy",
      "Payload": {
        "traceId": "6e2571a3-14a8-4fc7-93bb-c202c23b50b8",
        "sendResponsePhase": "SendResponseHeaders",
        "errorval": -805306367,
        "winHttpError": "ERROR_SUCCESS"
      }
    }
    
  5. Omvänd proxy returnerar 404 FABRIC_E_SERVICE_DOES_NOT_EXIST

    FABRIC_E_SERVICE_DOES_NOT_EXIST fel returneras om URI-schemat inte har angetts för tjänstslutpunkten i tjänstmanifestet.

    <Endpoint Name="ServiceEndpointHttp" Port="80" Protocol="http" Type="Input"/>
    

    Lös problemet genom att ange URI-schemat i manifestet.

    <Endpoint Name="ServiceEndpointHttp" UriScheme="http" Port="80" Protocol="http" Type="Input"/>
    

Anteckning

Händelser som rör bearbetning av websocket-begäranden loggas för närvarande inte. Detta läggs till i nästa version.

Nästa steg