Kérésfeldolgozás figyelése és diagnosztizálása fordított proxyn
A Service Fabric 5.7-es kiadásától kezdve a fordított proxyesemények elérhetők a gyűjteményhez. Az események két csatornán érhetők el, az egyikben csak a fordított proxy kérésfeldolgozási hibájával kapcsolatos hibaesemények, a második pedig részletes eseményeket tartalmaz, amelyek mind a sikeres, mind a sikertelen kérelmek bejegyzéseit tartalmazzák.
A fordított proxyesemények gyűjtésével engedélyezheti az események gyűjtését ezekről a csatornákról a helyi és az Azure Service Fabric-fürtökben.
Hibaelhárítás diagnosztikai naplók használatával
Íme néhány példa a gyakori hibanaplók értelmezésére:
A fordított proxy az 504-re (időtúllépésre) vonatkozó válaszállapot-kódot adja vissza.
Ennek egyik oka az lehet, hogy a szolgáltatás nem válaszol a kérelem időtúllépési időszakán belül. Az alábbi első esemény naplózza a fordított proxyn kapott kérés részleteit. A második esemény azt jelzi, hogy a kérés a szolgáltatásba való továbbítás során meghiúsult, mert "belső hiba = ERROR_WINHTTP_TIMEOUT"
A hasznos adatok a következők:
traceId: Ez a GUID használható az egyetlen kérésnek megfelelő összes esemény korrelálásához. Az alábbi két eseményben a traceId = 2f87b722-e254-4ac2-a802-fd315c1a0271, ami azt jelenti, hogy ugyanahhoz a kéréshez tartoznak.
requestUrl: Az AZ URL-cím (fordított proxy URL-cím), amelyre a kérést elküldték.
ige: HTTP-parancs.
remoteAddress: A kérést küldő ügyfél címe.
resolvedServiceUrl: A szolgáltatásvégpont URL-címe, amelyre a bejövő kérést megoldották.
errorDetails: További információ a hibáról.
{ "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" } }
A fordított proxy a 404-re (nem található) adott válaszállapot-kódot adja vissza.
Íme egy példaesemény, amelyben a fordított proxy a 404-et adja vissza, mivel nem találta meg az egyező szolgáltatásvégpontot. A hasznos adatokra vonatkozó érdekes bejegyzések a következők:
processRequestPhase: Azt a fázist jelzi a kérésfeldolgozás során, amikor a hiba történt, a TryGetEndpointot , azaz a szolgáltatásvégpont lekérését, hogy továbbítsa.
errorDetails: A végpont keresési feltételeinek listája. Itt láthatja, hogy a figyelőNév megadott = FrontEndListener, míg a replika végpontlistája csak egy OldListener nevű figyelőt tartalmaz.
{ ... "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\/\"}}" } }
Egy másik példa, amikor a fordított proxy a 404 Nem található értéket adja vissza, az ApplicationGateway\Http konfigurációs paraméter , a SecureOnlyMode igaz értékre van állítva, a fordított proxy figyeli a HTTPS-t, de a replika összes végpontja nem biztonságos (HTTP-n figyel). A fordított proxy a 404-et adja vissza, mivel nem találja a HTTPS-t figyelő végpontot a kérés továbbításához. Az esemény hasznos adatainak paramétereinek elemzése segít a probléma szűkítésében:
"errorDetails": "SecureOnlyMode = true, gateway protocol = https, listenerName = NewListener, replica endpoint = {\"Endpoints\":{\"OldListener\":\"Http:\/\/localhost:8491\/LocationApp\/\", \"NewListener\":\"Http:\/\/localhost:8492\/LocationApp\/\"}}"
A fordított proxyra irányuló kérés időtúllépési hibával meghiúsul. Az eseménynaplók olyan eseményt tartalmaznak, amely tartalmazza a beérkezett kérés részleteit (itt nem látható). A következő esemény azt mutatja, hogy a szolgáltatás egy 404-ben megadott állapotkóddal válaszolt, és a fordított proxy újrafeloldás kezdeményezését kezdeményezi.
{ ... "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" } }
Az összes esemény összegyűjtésekor események betanítása jelenik meg, amely minden feloldási és továbbítási kísérletet megjelenít. A sorozat utolsó eseménye azt mutatja, hogy a kérelem feldolgozása időtúllépéssel meghiúsult, valamint a sikeres feloldási kísérletek száma.
Feljegyzés
Javasoljuk, hogy alapértelmezés szerint tiltsa le a részletes csatornaesemény-gyűjteményt, és engedélyezze a szükséges hibaelhárításhoz.
{ ... "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": "" } }
Ha a gyűjtemény csak kritikus/hibaeseményekhez van engedélyezve, egy esemény jelenik meg, amely az időtúllépéssel és a feloldási kísérletek számával kapcsolatos részleteket tartalmazza.
Azok a szolgáltatások, amelyek 404 állapotkódot kívánnak visszaküldeni a felhasználónak, hozzá kell adniuk egy "X-ServiceFabric" fejlécet a válaszban. Miután hozzáadta a fejlécet a válaszhoz, a fordított proxy visszaküldi az állapotkódot az ügyfélnek.
Olyan esetek, amikor az ügyfél megszakította a kérést.
A rendszer a következő eseményt rögzíti, amikor a fordított proxy továbbítja a választ az ügyfélnek, de az ügyfél leválasztja a kapcsolatot:
{ ... "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" } }
A fordított proxy a 404-FABRIC_E_SERVICE_DOES_NOT_EXIST
FABRIC_E_SERVICE_DOES_NOT_EXIST hiba akkor jelenik meg, ha az URI-séma nincs megadva a szolgáltatásvégponthoz a szolgáltatásjegyzékben.
<Endpoint Name="ServiceEndpointHttp" Port="80" Protocol="http" Type="Input"/>
A probléma megoldásához adja meg az URI-sémát a jegyzékben.
<Endpoint Name="ServiceEndpointHttp" UriScheme="http" Port="80" Protocol="http" Type="Input"/>
Feljegyzés
A websocket-kérelmek feldolgozásához kapcsolódó események jelenleg nincsenek naplózva. Ez a következő kiadásban lesz hozzáadva.
Következő lépések
- Események összesítése és gyűjtése a Windows Azure Diagnostics használatával a naplógyűjtés azure-fürtökben való engedélyezéséhez.
- A Service Fabric-események a Visual Studióban való megtekintéséhez tekintse meg a Monitorozás és a helyi diagnosztikát.
- Tekintse meg a fordított proxy konfigurálása az Azure Resource Manager-sablonminták biztonságos szolgáltatásaihoz való csatlakozáshoz a biztonságos fordított proxy konfigurálásához a különböző szolgáltatástanúsítvány-érvényesítési beállításokkal.
- További információért olvassa el a Service Fabric fordított proxyt .