Aracılığıyla paylaş


Ters proxy'de istek işlemeyi izleme ve tanılama

Service Fabric'in 5.7 sürümünden itibaren, koleksiyon için ters proxy olayları kullanılabilir. Olaylar iki kanalda kullanılabilir; biri ters proxy'de istek işleme hatasıyla ilgili hata olayları ve hem başarılı hem de başarısız istekler için girişler içeren ayrıntılı olaylar içeren ikinci kanal.

Yerel ve Azure Service Fabric kümelerinde bu kanallardan olay toplamayı etkinleştirmek için Ters ara sunucu olaylarını toplama konusuna bakın.

Tanılama günlüklerini kullanarak sorun giderme

Burada, karşılaşılabilecek yaygın hata günlüklerini yorumlamaya yönelik bazı örnekler verilmiştir:

  1. Ters ara sunucu yanıt durum kodu 504 (Zaman aşımı) döndürür.

    Bunun bir nedeni, hizmetin istek zaman aşımı süresi içinde yanıt vermemesi olabilir. Aşağıdaki ilk olay, ters proxy'de alınan isteğin ayrıntılarını günlüğe kaydeder. İkinci olay, "iç hata = ERROR_WINHTTP_TIMEOUT" nedeniyle hizmete iletirken isteğin başarısız olduğunu gösterir

    Yük şunları içerir:

    • traceId: Bu GUID, tek bir isteğe karşılık gelen tüm olayları ilişkilendirmek için kullanılabilir. Aşağıdaki iki olayda traceId = 2f87b722-e254-4ac2-a802-fd315c1a0271, aynı isteğe ait olduklarını gösterir.

    • requestUrl: İsteğin gönderildiği URL (Ters proxy URL'si).

    • fiil: HTTP fiili.

    • remoteAddress: İsteği gönderen istemcinin adresi.

    • resolvedServiceUrl: Gelen isteğin çözümlendiği hizmet uç noktası URL'si.

    • errorDetails: Hata hakkında ek bilgiler.

      {
      "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. Ters ara sunucu yanıt durum kodu 404 (Bulunamadı) döndürür.

    Aşağıda, ters ara sunucu eşleşen hizmet uç noktasını bulamadığından 404 döndürdüğü örnek bir olay verilmiştir. İlgi çekici olan yük girişleri şunlardır:

    • processRequestPhase: Hata oluştuğunda istek işleme aşamasını gösterir. TryGetEndpoint , iletilecek hizmet uç noktasını getirmeye çalışırken.

    • errorDetails: Uç nokta arama ölçütlerini listeler. Burada listenerName değerinin = FrontEndListener olduğunu, çoğaltma uç noktası listesinin ise yalnızca OldListener adlı bir dinleyici içerdiğini görebilirsiniz.

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

      Ters proxy'nin 404 Bulunamadı değerini döndürebildiği bir diğer örnek de şunlardır: ApplicationGateway\Http yapılandırma parametresi SecureOnlyMode, HTTPS'de dinleyen ters proxy ile true olarak ayarlanır, ancak tüm çoğaltma uç noktaları güvenli değildir (HTTP'de dinleme). ters ara sunucu, isteği iletmek için HTTPS'de dinleyen bir uç nokta bulamadığından 404 döndürür. Olay yükündeki parametrelerin çözümlenmesi sorunu daraltmaya yardımcı olur:

      "errorDetails": "SecureOnlyMode = true, gateway protocol = https, listenerName = NewListener, replica endpoint = {\"Endpoints\":{\"OldListener\":\"Http:\/\/localhost:8491\/LocationApp\/\", \"NewListener\":\"Http:\/\/localhost:8492\/LocationApp\/\"}}"
      
  3. Ters ara sunucu isteği zaman aşımı hatasıyla başarısız oluyor. Olay günlükleri, alınan istek ayrıntılarını içeren bir olay içerir (burada gösterilmez). Sonraki olay, hizmetin 404 durum koduyla yanıt verdiğini ve ters proxy'nin yeniden çözümlemeyi başlattığını gösterir.

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

    Tüm olayları toplarken, her çözümleme ve iletme girişimini gösteren bir olay eğitilmesi görürsünüz. Serideki son olay, başarılı çözüm denemelerinin sayısıyla birlikte istek işlemenin zaman aşımıyla başarısız olduğunu gösterir.

    Not

    Ayrıntılı kanal olay koleksiyonunun varsayılan olarak devre dışı bırakılması ve ihtiyaç temelinde sorun giderme için etkinleştirilmesi önerilir.

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

    Koleksiyon yalnızca kritik/hata olayları için etkinleştirildiyse, zaman aşımı ve çözüm denemelerinin sayısıyla ilgili ayrıntıları içeren bir olay görürsünüz.

    Kullanıcıya 404 durum kodunu geri göndermeyi planlayan hizmetlerin yanıta bir "X-ServiceFabric" üst bilgisi eklemesi gerekir. Üst bilgi yanıta eklendikten sonra ters ara sunucu durum kodunu istemciye geri iletir.

  4. İstemcinin isteğin bağlantısını kestiği durumlar.

    Ters ara sunucu yanıtı istemciye ilettiğinde ancak istemcinin bağlantısı kesildiğinde aşağıdaki olay kaydedilir:

    {
      ...
      "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. Ters Ara Sunucu 404 FABRIC_E_SERVICE_DOES_NOT_EXIST döndürür

    hizmet bildirimindeki hizmet uç noktası için URI şeması belirtilmezse FABRIC_E_SERVICE_DOES_NOT_EXIST hatası döndürülür.

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

    Sorunu çözmek için bildirimde URI düzenini belirtin.

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

Not

Websocket isteği işlemeyle ilgili olaylar şu anda günlüğe kaydedilmez. Bu, sonraki sürümde eklenecektir.

Sonraki adımlar