Sdílet prostřednictvím


Monitorování a diagnostika zpracování požadavků na reverzním proxy serveru

Od verze Service Fabric verze 5.7 jsou pro kolekci k dispozici události reverzního proxy serveru. Události jsou dostupné ve dvou kanálech, jedna s pouze chybovými událostmi souvisejícími se selháním zpracování požadavků v reverzním proxy serveru a druhém kanálu obsahujícím podrobné události s položkami pro úspěšné i neúspěšné požadavky.

Informace o shromažďování událostí reverzního proxy serveru a povolení shromažďování událostí z těchto kanálů v místních clusterech a clusterech Azure Service Fabric.

Řešení potíží s využitím diagnostických protokolů

Tady je několik příkladů, jak interpretovat běžné protokoly selhání, se kterými se můžete setkat:

  1. Reverzní proxy vrátí stavový kód odpovědi 504 (časový limit).

    Jedním z důvodů může být to, že služba neodpovídá během časového limitu požadavku. První událost níže zaznamená podrobnosti o požadavku přijatém na reverzním proxy serveru. Druhá událost značí, že požadavek při předávání do služby selhal kvůli vnitřní chybě = ERROR_WINHTTP_TIMEOUT.

    Datová část zahrnuje:

    • traceId: Tento identifikátor GUID lze použít ke korelaci všech událostí odpovídajících jednomu požadavku. V následujících dvou událostech traceId = 2f87b722-e254-4ac2-a802-fd315c1a0271, což znamená, že patří do stejného požadavku.

    • requestUrl: Adresa URL (reverzní adresa URL proxy serveru), na kterou byl požadavek odeslán.

    • sloveso: příkaz HTTP.

    • remoteAddress: Adresa klienta odesílajícího požadavek

    • resolvedServiceUrl: Adresa URL koncového bodu služby, na kterou se přeložila příchozí žádost.

    • errorDetails: Další informace o selhání.

      {
      "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. Reverzní proxy vrátí stavový kód odpovědi 404 (Nenalezena).

    Tady je příklad události, kdy reverzní proxy vrátí hodnotu 404, protože se nepodařilo najít odpovídající koncový bod služby. Tady jsou položky datové části, které jsou zajímavé:

    • processRequestPhase: Označuje fázi zpracování požadavku, když došlo k chybě, TryGetEndpoint , tj. při pokusu o načtení koncového bodu služby, do které se má předávat.

    • errorDetails: Vypíše kritéria hledání koncového bodu. Tady vidíte, že název naslouchacího procesu zadaný = FrontEndListener , zatímco seznam koncových bodů repliky obsahuje pouze naslouchací proces s názvem 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\/\"}}"
      }
      }
      

      Dalším příkladem, kdy reverzní proxy server může vrátit hodnotu 404 Nenalezena, je: Parametr konfigurace ApplicationGateway\Http SecureOnlyMode je nastaven na hodnotu true s reverzním proxy serverem nasloucháním na protokolu HTTPS, ale všechny koncové body repliky nejsou nezabezpečené (naslouchá na HTTP). Reverzní proxy server vrátí hodnotu 404, protože nemůže najít koncový bod, který naslouchá na protokolu HTTPS, aby požadavek přeposlal. Analýza parametrů v datové části události pomáhá zúžit problém:

      "errorDetails": "SecureOnlyMode = true, gateway protocol = https, listenerName = NewListener, replica endpoint = {\"Endpoints\":{\"OldListener\":\"Http:\/\/localhost:8491\/LocationApp\/\", \"NewListener\":\"Http:\/\/localhost:8492\/LocationApp\/\"}}"
      
  3. Požadavek na reverzní proxy server selže s chybou časového limitu. Protokoly událostí obsahují událost s podrobnostmi přijaté žádosti (zde se nezobrazují). Další událost ukazuje, že služba odpověděla stavovým kódem 404 a reverzní proxy iniciuje opětovné vyřešení.

    {
      ...
      "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"
      }
    }
    

    Při shromažďování všech událostí se zobrazí trénování událostí zobrazující všechny pokusy o vyřešení a přeposlání. Poslední událost v řadě ukazuje, že zpracování požadavku selhalo s časovým limitem a počtem úspěšných pokusů o vyřešení.

    Poznámka:

    Doporučujeme ve výchozím nastavení ponechat kolekci událostí podrobného kanálu zakázanou a povolit ji pro řešení potíží podle potřeby.

    {
      ...
      "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": ""
      }
    }
    

    Pokud je shromažďování povolené jenom pro kritické události nebo události chyb, zobrazí se jedna událost s podrobnostmi o vypršení časového limitu a počtu pokusů o vyřešení.

    Služby, které mají v úmyslu odeslat stavový kód 404 zpět uživateli, by měly do odpovědi přidat hlavičku X-ServiceFabric. Po přidání hlavičky do odpovědi reverzní proxy předá stavový kód zpět klientovi.

  4. Případy, kdy klient odpojil požadavek

    Následující událost se zaznamená, když reverzní proxy server předává odpověď klientovi, ale klient se odpojí:

    {
      ...
      "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. Reverzní proxy vrátí 404 FABRIC_E_SERVICE_DOES_NOT_EXIST

    FABRIC_E_SERVICE_DOES_NOT_EXIST chyba se vrátí, pokud schéma identifikátoru URI není zadané pro koncový bod služby v manifestu služby.

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

    Chcete-li tento problém vyřešit, zadejte schéma identifikátoru URI v manifestu.

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

Poznámka:

Události související se zpracováním požadavků protokolu websocket se v současné době nezaprotokolují. Tato možnost bude přidána v příští verzi.

Další kroky