Verwerking van aanvragen bij de omgekeerde proxy bewaken en diagnosticeren
Vanaf de 5.7-versie van Service Fabric zijn reverse proxy-gebeurtenissen beschikbaar voor verzameling. De gebeurtenissen zijn beschikbaar in twee kanalen, één met alleen foutgebeurtenissen met betrekking tot het verwerken van aanvragen bij de omgekeerde proxy en het tweede kanaal met uitgebreide gebeurtenissen met vermeldingen voor geslaagde en mislukte aanvragen.
Raadpleeg Omgekeerde proxygebeurtenissen verzamelen om het verzamelen van gebeurtenissen van deze kanalen in lokale en Azure Service Fabric-clusters mogelijk te maken.
Problemen oplossen met diagnostische logboeken
Hier volgen enkele voorbeelden van het interpreteren van de veelvoorkomende foutenlogboeken die kunnen optreden:
Omgekeerde proxy retourneert antwoordstatuscode 504 (Time-out).
Een reden kan zijn dat de service niet kan reageren binnen de time-outperiode van de aanvraag. De eerste gebeurtenis hieronder registreert de details van de aanvraag die is ontvangen bij de omgekeerde proxy. De tweede gebeurtenis geeft aan dat de aanvraag is mislukt tijdens het doorsturen naar de service, vanwege 'interne fout = ERROR_WINHTTP_TIMEOUT'
De nettolading omvat:
traceId: deze GUID kan worden gebruikt om alle gebeurtenissen te correleren die overeenkomen met één aanvraag. In de onderstaande twee gebeurtenissen is de traceId = 2f87b722-e254-4ac2-a802-fd315c1a0271, wat impliceert dat ze bij dezelfde aanvraag horen.
requestUrl: de URL (omgekeerde proxy-URL) waarnaar de aanvraag is verzonden.
werkwoord: HTTP-woord.
remoteAddress: adres van client die de aanvraag verzendt.
resolvedServiceUrl: service-eindpunt-URL waarnaar de binnenkomende aanvraag is opgelost.
errorDetails: Aanvullende informatie over de fout.
{ "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" } }
Omgekeerde proxy retourneert antwoordstatuscode 404 (niet gevonden).
Hier volgt een voorbeeldgebeurtenis waarbij omgekeerde proxy 404 retourneert omdat het overeenkomende service-eindpunt niet is gevonden. De nuttige nettoladingvermeldingen zijn:
processRequestPhase: Geeft de fase aan tijdens het verwerken van de aanvraag wanneer de fout is opgetreden, TryGetEndpoint, bijvoorbeeld tijdens het ophalen van het service-eindpunt om door te sturen naar.
errorDetails: geeft een lijst weer van de criteria voor eindpuntzoekopdrachten. Hier ziet u dat de listenerName die is opgegeven = FrontEndListener , terwijl de lijst met replica-eindpunten alleen een listener met de naam OldListener bevat.
{ ... "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\/\"}}" } }
Een ander voorbeeld waarbij omgekeerde proxy 404 Niet gevonden kan retourneren, is: ApplicationGateway\Http-configuratieparameter SecureOnlyMode is ingesteld op waar met de omgekeerde proxy die luistert op HTTPS, maar alle replica-eindpunten zijn onbeveiligd (luisteren op HTTP). Omgekeerde proxy retourneert 404 omdat er geen eindpunt kan worden gevonden dat luistert op HTTPS om de aanvraag door te sturen. Door de parameters in de nettolading van de gebeurtenis te analyseren, kan het probleem worden beperkt:
"errorDetails": "SecureOnlyMode = true, gateway protocol = https, listenerName = NewListener, replica endpoint = {\"Endpoints\":{\"OldListener\":\"Http:\/\/localhost:8491\/LocationApp\/\", \"NewListener\":\"Http:\/\/localhost:8492\/LocationApp\/\"}}"
De aanvraag voor de omgekeerde proxy mislukt met een time-outfout. De gebeurtenislogboeken bevatten een gebeurtenis met de ontvangen aanvraaggegevens (niet hier weergegeven). De volgende gebeurtenis laat zien dat de service heeft gereageerd met een 404-statuscode en omgekeerde proxy een nieuwe oplossing initieert.
{ ... "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" } }
Wanneer u alle gebeurtenissen verzamelt, ziet u een trein met gebeurtenissen met elke poging tot oplossen en doorsturen. De laatste gebeurtenis in de reeks geeft aan dat de aanvraagverwerking is mislukt met een time-out, samen met het aantal geslaagde pogingen om te worden omgezet.
Notitie
Het wordt aanbevolen om de uitgebreide kanaalgebeurtenisverzameling standaard uitgeschakeld te houden en deze in te schakelen voor probleemoplossing op basis van behoefte.
{ ... "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": "" } }
Als verzameling alleen is ingeschakeld voor kritieke/fout-gebeurtenissen, ziet u één gebeurtenis met details over de time-out en het aantal omzettingspogingen.
Services die een 404-statuscode naar de gebruiker willen verzenden, moeten een X-ServiceFabric-header toevoegen aan het antwoord. Nadat de header is toegevoegd aan het antwoord, stuurt omgekeerde proxy de statuscode terug naar de client.
Gevallen waarin de client de verbinding met de aanvraag heeft verbroken.
De volgende gebeurtenis wordt vastgelegd wanneer omgekeerde proxy het antwoord doorstuurt naar de client, maar de client wordt verbroken:
{ ... "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" } }
Omgekeerde proxy retourneert 404 FABRIC_E_SERVICE_DOES_NOT_EXIST
FABRIC_E_SERVICE_DOES_NOT_EXIST fout wordt geretourneerd als het URI-schema niet is opgegeven voor het service-eindpunt in het servicemanifest.
<Endpoint Name="ServiceEndpointHttp" Port="80" Protocol="http" Type="Input"/>
Geef het URI-schema op in het manifest om het probleem op te lossen.
<Endpoint Name="ServiceEndpointHttp" UriScheme="http" Port="80" Protocol="http" Type="Input"/>
Notitie
Gebeurtenissen met betrekking tot de verwerking van websocket-aanvragen worden momenteel niet geregistreerd. Dit wordt toegevoegd in de volgende release.
Volgende stappen
- Gebeurtenisaggregatie en verzameling met windows Azure Diagnostics voor het inschakelen van logboekverzameling in Azure-clusters.
- Als u Service Fabric-gebeurtenissen in Visual Studio wilt bekijken, raadpleegt u Lokaal bewaken en diagnosticeren.
- Raadpleeg Reverse Proxy configureren om verbinding te maken met beveiligde services voor Azure Resource Manager-sjabloonvoorbeelden om beveiligde omgekeerde proxy te configureren met de verschillende opties voor validatie van servicecertificaten.
- Lees omgekeerde proxy voor Service Fabric voor meer informatie.