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

Apigee Edge belgelerini görüntülüyorsunuz.
Apigee X belgelerine gidin.
bilgi

Belirti

İstemci uygulaması, bir API proxy çağrısının ardından Service Unavailable mesajıyla birlikte 503 HTTP yanıt durumu alır.

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ı erken kapatıyor Mesaj İşleyici, istek yükünü göndermeye devam ederken hedef sunucu bağlantıyı zamanından önce sona erdirir. Edge Herkese Açık ve Özel Bulut kullanıcıları

Yaygın teşhis adımları

Başarısız isteğin ileti 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 etkilenen API için izleme oturumunu etkinleştirin.
  2. API çağrısı yapma ve sorunu yeniden oluşturma - 503 Service Unavailable, hata kodu: messaging.adaptors.http.flow.ServiceUnavailable.
  3. Başarısız isteklerden birini seçin.
  4. AX aşamasına gidin ve aşağıdaki şekilde gösterildiği gibi Aşama Ayrıntıları bölümünde aşağı kaydırarak isteğin mesaj kimliğini (X-Apigee.Message-ID) belirleyin.

    Aşama Ayrıntıları bölümündeki 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 Access günlüklerine de bakabilirsiniz. Bu, özellikle sorun geçmişte oluşmuşsa veya ara sıra ortaya çıkıyorsa ve kullanıcı arayüzünde izleri yakalayamıyorsanız yararlı olur. Bu bilgileri NGINX erişim günlüklerinden 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 API proxy'si için belirli bir süre boyunca 503 Hatası olup olmadığını (sorun geçmişte olduysa) veya 503 nedeniyle başarısız olan isteklerin olup olmadığını görmek için arama yapın.
  3. X-Apigee-fault-code Messages.adaptors.http.flow.ServiceUsage ile ilgili 503 hatası varsa bu tür isteklerden birinin veya birkaçının mesaj kimliğini aşağıdaki örnekte gösterildiği gibi 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ı erken kapatıyor

Teşhis

  1. Public Cloud veya Private Cloud kullanıcısıysanız:
    1. İzleme aracını kullanın (Yaygın teşhis adımları bölümünde açıklandığı gibi) ve Analytics Verileri Kaydı bölmesinde aşağıdakilerin ikisinin de ayarlanmış olduğunu doğrulayın:
      • X-Apigee.fault-code: messaging.adaptors.http.flow.ServiceUnavailable
      • X-Apigee.fault-source: target

      alt_text

    2. İzleme aracını kullanın (Yaygın teşhis adımları bölümünde açıklandığı gibi) ve Hata bölmesinde TARGET_REQ_FLOW durum özelliğinden hemen sonra aşağıdakilerin her ikisinin de ayarlanmış olduğunu doğrulayın:
      • error.class: com.apigee.errors.http.server.ServiceUnavailableException
      • error.cause: Broken pipe

      alt_text

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

      1. İstisna: java.io.IOException: ClientExitChannel kanalına yazılırken bozuk su akışı oluştu

      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

      2. İstisna: 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 ikisi de, Mesaj İşleyicinin istek yükünü arka uç sunucusuna yazmaya devam ederken bağlantının arka uç sunucusu tarafından erken bir şekilde kapatıldığını gösterir. Bu nedenle, İleti İşleyici java.io.IOException: Broken pipe istisnasını atar.
    • Remote:IP:PORT , çözümlenen arka uç sunucusunun IP adresini ve bağlantı noktası numarasını belirtir.
    • Yukarıdaki hata mesajında yer alan bytesWritten=76295 özelliği, bağlantı zamanından önce kapatıldığında Mesaj İşleyici'nin arka uç sunucusuna 76295 baytlık bir yük gönderdiğini belirtir.
    • bytesRead=0 özelliği, Mesaj İşleyicinin arka uç sunucusundan herhangi bir veri (yanıt) almadığını belirtir.
    • Bu sorunu daha ayrıntılı bir şekilde araştırmak için arka uç sunucusunda veya Mesaj İşleyicide bir tcpdump toplayın ve aşağıda açıklandığı gibi analiz edin.

tcpdump kullanma

  1. Aşağıdaki komutları kullanarak arka uç sunucuda veya Mesaj İşleyici'de bir tcpdump yakalayın:

    Arka uç sunucuda tcpdump toplama komutu:

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

    İleti İşleyici'de 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 toplandı):

    alt_text

    Yukarıdaki tcpdump bölümünde aşağıdakileri görebilirsiniz:

    1. 4 paketinde Mesaj İşleyici, arka uç sunucusuna bir POST isteği gönderdi.
    2. Mesaj İşleyici, 5,8, 9, 10, 11 paketinde istek yükünü arka uç sunucusuna göndermeye devam etti.
    3. 6 ve 7 paketinde,arka uç sunucusu Mesaj İşleyici'den alınan istek yükünün bir kısmı için ACK ile yanıt verdi.
    4. Ancak 12 paketinde, alınan uygulama veri paketleri için ACK ile yanıt vermek ve ardından yanıt yüküyle yanıt vermek yerine arka uç sunucusu, bağlantıyı kapatma sürecini başlatan bir FIN ACK ile yanıt verir.
    5. Bu, Mesaj İşleyici hâlâ istek yükünü gönderirken arka uç sunucusunun bağlantıyı erkenden kapattığını açıkça gösterir.
    6. Bu durum, Mesaj İşleyicinin bir IOException: Broken Pipe hata kaydetmesine ve istemciye 503 döndürmesine neden olur

Çözünürlük

  1. Arka uç sunucusu tarafındaki erken bağlantı kesintileriyle ilgili sorunu analiz etmek ve düzeltmek için uygulama ve ağ ekiplerinizden biriyle ya da her ikisiyle birlikte çalışın.
  2. İstek yükünün tamamını almadan önce arka uç sunucu uygulamasının zaman aşımına uğramadığından veya bağlantıyı sıfırlamadığından emin olun.
  3. Apigee ile arka uç sunucusu arasında bir ara ağ cihazınız veya katmanınız varsa istek yükünün tamamı alınmadan önce ağların zaman aşımına uğramadığından emin olun.

Sorun devam ederse Teşhis bilgileri toplanmalı bölümüne gidin.

Teşhis bilgileri toplanmalıdır

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

Herkese Açık Bulut 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ı ortaya çıkmıyorsa geçmişte 503 hatalarının meydana geldiği zaman dilimiyle ilgili tarih aralığını sağlayın.

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

  • Başarısız istekler için gözlemlenen tam hata mesajı
  • 503 hatalarını gözlemlediğiniz kuruluş, ortam adı ve API proxy adı
  • 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 oluştuğu saat dilimi bilgilerinin yer aldığı dönem
  • Hata oluştuğunda Mesaj İşleyiciler ve arka uç sunucuda Tcpdumps toplandı