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 fel vid bearbetning av begäranden vid den omvända proxyn och den 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 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 bero på att tjänsten inte svarar inom tidsgränsen för begäran. Den första händelsen nedan loggar information om den begäran som tas emot vid den omvända proxyn. Den andra händelsen anger att begäran misslyckades vid vidarebefordring 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 följande två händelser, 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. Nyttolastposterna av intresse här är:

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

    • errorDetails: Visar en lista över villkor för slutpunktssökning. Här kan du se att listenerName har angetts = FrontEndListener medan replikslutpunktslistan 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 omvänd proxylyssning 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 den mottagna begärandeinformationen (visas inte här). Nästa händelse visar att tjänsten svarade med statuskoden 404 och att omvänd proxy initierar en ny lösning.

    {
      ...
      "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 vidarebefordranförsök. Den sista händelsen i serien visar att bearbetningen av begäranden misslyckades med en tidsgräns, tillsammans med antalet lyckade försök att lösa problemet.

    Kommentar

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

    {
      ...
      "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 samlingen endast är aktiverad för kritiska/felhändelser visas en händelse med information om tidsgränsen och antalet matchningsförsök.

    Tjänster som har för avsikt att skicka tillbaka en 404-statuskod till användaren bör lägga till en "X-ServiceFabric"-rubrik i svaret. När huvudet 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 kopplas 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"/>
    

Kommentar

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