503 Hizmet Kullanılamıyor - Arka uç sunucusu tarafından erken kapatma

Apigee Edge belgelerini görüntülüyorsunuz.
. Git: Apigee X belgeleri.
bilgi

Belirti

İstemci uygulaması şu mesajla birlikte 503 HTTP yanıt durumunu alıyor API proxy çağrısının ardından Service Unavailable.

Hata mesajı

İstemci uygulaması aşağıdaki yanıt kodunu alır:

HTTP/1.1 503 Service Unavailable

Ayrıca, aşağıdaki hata mesajını da görebilirsiniz:

{
   "fault": {
      "faultstring": "The Service is temporarily unavailable",
      "detail": {
           "errorcode": "messaging.adaptors.http.flow.ServiceUnavailable"
       }
    }
}

Olası Nedenler

Neden Açıklama Şunun için geçerli sorun giderme talimatları:
Hedef sunucu bağlantıyı zamanından önce kapatıyor İleti İşleyici hâlâ işlem yapılmışken hedef sunucu bağlantıyı zamanından önce bitirir istek yükünü gönderme. Edge Herkese Açık ve Private Cloud kullanıcıları

Sık kullanılan teşhis adımları

Başarısız isteğin Mesaj Kimliğini belirleme

İzleme aracı

İzleme aracını kullanarak başarısız isteğin ileti kimliğini belirlemek için:

  1. Sorun hâlâ devam ediyorsa izleme oturumunu kaldırın.
  2. API çağrısı yapın ve sorunu yeniden oluşturun - 503 Service Unavailable messaging.adaptors.http.flow.ServiceUnavailable. hata koduyla
  3. Başarısız isteklerden birini seçin.
  4. AX aşaması'na gidip ileti kimliğini belirleme (X-Apigee.Message-ID) Aşama Ayrıntıları bölümüne gidin.

    Aşama Ayrıntıları bölümünde mesaj kimliği

NGINX erişim günlükleri

NGINX erişim günlüklerini kullanarak başarısız isteğin ileti kimliğini belirlemek için:

503 hatalarının ileti kimliğini belirlemek için NGINX Erişim günlüklerine de bakabilirsiniz. Bu, özellikle sorun geçmişte olduysa veya ara sıra ortaya çıkıyorsa yararlıdır ve kullanıcı arayüzünde izini yakalayamazsınız. NGINX erişim günlüklerindeki bu bilgileri belirlemek için aşağıdaki adımları uygulayın:

  1. NGINX erişim günlüklerini kontrol edin: (/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log)
  2. Belirli bir sürede ilgili API proxy'si için 503 hatası olup olmadığını kontrol edin (sorun geçmişte oluşmuşsa) veya 503 ile hâlâ başarısız olan istekler varsa.
  3. X-Apigee-fault-codeMessaging.adaptors.http.flow.Servicelarından yararlanarak herhangi bir 503 hatası varsa aşağıdaki örnekte gösterildiği gibi, bu tür bir veya daha fazla isteğin ileti kimliğini not edin:

    503 Hatası'nı gösteren Örnek Giriş

    Durum kodu, mesaj kimliği, hata kaynağı ve hata kodunu gösteren örnek giriş

Neden: Hedef sunucu bağlantıyı zamanından önce kapatıyor

Teşhis

  1. Herkese Açık Bulut veya Private Cloud kullanıcısıysanız:
    1. İzleme aracını kullanma (Yaygın teşhis adımlarında açıklandığı gibi) ve Analytics Verileri Kaydı bölmesinde aşağıdakilerin ikisinin de bulunduğunu doğrulayın:
      • X-Apigee.fault-code: messaging.adaptors.http.flow.ServiceUnavailable
      • X-Apigee.fault-source: target

      alt_text

    2. İzleme aracını kullanma (Yaygın teşhis adımlarında açıklandığı gibi) ve hemen sonrasında Hata bölmesinde aşağıdakilerin her ikisinin de ayarlandığını doğrulayın TARGET_REQ_FLOW eyalet özelliği:
      • error.class: com.apigee.errors.http.server.ServiceUnavailableException
      • error.cause: Broken pipe

      alt_text

    3. Daha ayrıntılı inceleme için tcpdump kullanma bölümüne gidin.
  2. Private Cloud kullanıcısıysanız:
    • Başarısız isteğin mesaj kimliğini belirleyin.
    • İleti İşleyen günlüğünde ileti kimliğini arayın (/opt/apigee/var/log/edge-message-processor/logs/system.log).
    • Aşağıdaki istisnalardan birini görürsünüz:

      1. İstisna: java.io.IOException: Broken afiş atar with channel to channel ClientÇıkışChannel

      2021-01-30 15:31:14,693 org:anotherorg env:prod api:myproxy
      rev:1 messageid:myorg-opdk-test-1-30312-13747-1  NIOThread@1
      INFO  HTTP.SERVICE - ExceptionHandler.handleException() :
      Exception java.io.IOException: Broken pipe occurred while writing to channel
      ClientOutputChannel(ClientChannel[Connected:
      Remote:IP:PORT Local:0.0.0.0:42828]@8380 useCount=1
      bytesRead=0 bytesWritten=76295 age=2012ms  lastIO=2ms  isOpen=false)
      

      veya

      İstisna 2: onExceptionWrite istisnası: {}
      java.io.IOException: Bozuk ardışık düzen

      2021-01-31 15:29:37,438 org:anotherorg env:prod api:503-test
      rev:1 messageid:leonyoung-opdk-test-1-18604-13978-1
      NIOThread@0 ERROR HTTP.CLIENT - HTTPClient$Context$2.onException() :
      ClientChannel[Connected: Remote:IP:PORT
      Local:0.0.0.0:57880]@8569 useCount=1 bytesRead=0 bytesWritten=76295 age=3180ms  lastIO=2
      ms  isOpen=false.onExceptionWrite exception: {}
      java.io.IOException: Broken pipe
      
    • Bu istisnaların her ikisi de, İleti İşleyen arka uç sunucusuna yük isteği gönderirse bağlantı, arka uç sunucusuna gidin. Bu nedenle, İleti İşleyen (java.io.IOException: Broken pipe) istisnayı uygular.
    • Remote:IP:PORT , çözümlenen arka uç sunucusunu gösterir IP adresi ve bağlantı noktası numarası.
    • Yukarıdaki hata mesajında yer alan bytesWritten=76295 özelliği, İleti İşleyici'nin arka uca 76295 baytlık yük gönderdiğini sunucuyu devre dışı bırakmaya çalışın.
    • bytesRead=0 özelliği, Mesaj İşleyen'in arka uç sunucusundan herhangi bir veri (yanıt) almıştır.
    • Bu sorunu daha ayrıntılı incelemek için arka uçta bir tcpdump toplayın veya İleti İşleyici'ye vermeniz gerekir ve bunu aşağıda açıklandığı şekilde analiz eder.

tcpdump kullanma

  1. Arka uç sunucusunda veya Mesaj İşleyici'de şunu kullanarak bir tcpdump yakalayın: şu komutları kullanın:

    Arka uç sunucusunda tcpdump toplama komutu:

    tcpdump -i any -s 0 host MP_IP_ADDRESS -w FILE_NAME
    

    Mesaj İşleyicide tcpdump toplama komutu:

    tcpdump -i any -s 0 host BACKEND_HOSTNAME -w FILE_NAME
    
  2. Yakalanan tcpdump öğesini analiz edin:

    Örnek tcpdump çıkışı (İleti İşleyici'de toplanır):

    alt_text

    Yukarıdaki tcpdump içinde aşağıdakileri görebilirsiniz:

    1. 4 paketinde, Mesaj İşleyici bir POST isteği gönderdi. arka uç sunucusuna gidin.
    2. 5, 8, 9, 10 paketinde, 11, Mesaj İşleyici istek yükünü arka uç sunucusuna gidin.
    3. 6 ve 7 paketlerinde arka uç sunucusu ACK.
    4. Ancak 12 paketinde, ACK ile yanıt vermek yerine ve daha sonra da e-postayla yanıt vererek arka uç sunucusu bunun yerine FIN ACK ile yanıt verir ve bağlantıyı iptal edebilir.
    5. Bu, arka uç sunucusunun bağlantıyı zamanından önce kapattığını açıkça gösteriyor yalnızca mesaj işleyen tarafından da onaylanabilir.
    6. Bu durum, İleti İşleyici'nin IOException: Broken Pipe hata mesajını verir ve istemciye bir 503 döndürür.

Çözünürlük

  1. Uygulama ve ağ ekiplerinizle birlikte ya da hem uygulama hem de ağ ekiplerinizle birlikte çalışarak arka uç sunucu tarafında erken bağlantı kesintileriyle ilgili sorun.
  2. Arka uç sunucu uygulamasının zaman aşımına uğramadığından veya bağlantıyı sıfırlamadığından emin olun önce çalıştırılması gerekir.
  3. Apigee ile arka uç sunucusu arasında herhangi bir ara ağ iletişimi cihazınız ya da katmanınız varsa Ardından, istek yükünün tamamı alınmadan önce zaman aşımına uğramadıklarından emin olun.

Sorun devam ederse Teşhis bilgileri toplanması gerekiyor başlıklı makaleyi inceleyin.

Teşhis bilgileri toplanmalıdır

Yukarıdaki talimatları uygulamanıza rağmen sorun devam ederse aşağıdaki Apigee Edge Destek Ekibi ile iletişime geçin:

Herkese açık Cloud kullanıcısıysanız aşağıdaki bilgileri sağlayın:

  • Kuruluş adı
  • Ortam adı
  • API Proxy adı
  • 503 hatasını yeniden oluşturmak için curl komutunu tamamlayın
  • 503 Service Unavailable hatasına sahip isteği içeren izleme dosyası
  • Şu anda 503 hataları görünmüyorsa dönemi Geçmişte 503 hata oluştuğunda saat dilimi bilgileri

Private Cloud kullanıcısıysanız aşağıdaki bilgileri sağlayın:

  • Başarısız istekler için tam hata mesajı gözlemlendi
  • Gözlemlediğiniz kuruluş, ortam adı ve API proxy adı 503 hata
  • API Proxy paketi
  • 503 Service Unavailable hatasına sahip istekleri içeren izleme dosyası
  • NGINX erişim günlükleri
    /opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log
  • Mesaj İşleyici günlükleri
    /opt/apigee/var/log/edge-message-processor/logs/system.log
  • 503 hatalarının meydana geldiği saat dilimi bilgilerini içeren dönem
  • İleti İşlemcileri ve arka uç sunucusunda Tcpdumps toplandı. hata oluştu