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 bir HTTP yanıt durumu 503 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 | Aşağıdaki ürünler için geçerli sorun giderme talimatları |
|---|---|---|
| Hedef sunucu bağlantıyı erken kapatıyor | Hedef sunucu, Mesaj İşleyici istek yükünü göndermeye devam ederken bağlantıyı erken sonlandırır. | Edge Public ve Private Cloud kullanıcıları |
Sık karşılaşılan teşhis adımları
Başarısız olan isteğin ileti kimliğini belirleyin.
İzleme aracı
İzleme aracını kullanarak başarısız olan isteğin ileti kimliğini belirlemek için:
- Sorun hâlâ devam ediyorsa etkilenen API için izleme oturumunu etkinleştirin.
- API çağrısı yapın ve sorunu yeniden oluşturun.
503 Service UnavailableHata kodu:messaging.adaptors.http.flow.ServiceUnavailable. - Başarısız olan isteklerden birini seçin.
- 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 ileti kimliğini (
X-Apigee.Message-ID) belirleyin.
NGINX erişim günlükleri
NGINX erişim günlüklerini kullanarak başarısız olan isteğin ileti kimliğini belirlemek için:
Ayrıca 503 hatalarının mesaj kimliğini belirlemek için NGINX erişim günlüklerine de bakabilirsiniz.
Bu, özellikle sorun geçmişte oluştuysa veya aralıklı olarak oluşuyorsa ve kullanıcı arayüzünde izlemeyi yakalayamıyorsanız yararlıdır. NGINX erişim günlüklerinden bu bilgileri belirlemek için aşağıdaki adımları uygulayın:
- NGINX erişim günlüklerini kontrol edin: (
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log) 503Belirli bir süre boyunca belirli API proxy'sinde hata olup olmadığını (sorun geçmişte yaşandıysa) veya503ile hâlâ başarısız olan istek olup olmadığını kontrol edin.503X-Apigee-fault-code messaging.adaptors.http.flow.ServiceUnavailable ile ilgili hatalar varsa, aşağıdaki örnekte gösterildiği gibi, bu tür bir veya daha fazla isteğin mesaj kimliğini not edin:503hatasını gösteren örnek giriş
Neden: Hedef sunucu bağlantıyı erken kapatıyor
Teşhis
- Herkese Açık Bulut veya Private Cloud kullanıcısıysanız:
- İzleme aracını kullanın (Yaygın teşhis adımları bölümünde açıklandığı gibi)
ve Analytics Verileri Kaydedildi bölmesinde aşağıdakilerin her ikisinin de ayarlandığını doğrulayın:
- X-Apigee.fault-code:
messaging.adaptors.http.flow.ServiceUnavailable - X-Apigee.fault-source:
target

- X-Apigee.fault-code:
- İzleme aracını kullanın (Yaygın teşhis adımları bölümünde açıklandığı gibi)
ve
TARGET_REQ_FLOWdurum özelliğinden hemen sonra Hata bölmesinde aşağıdakilerin her ikisinin de ayarlandığını doğrulayın:- error.class:
com.apigee.errors.http.server.ServiceUnavailableException - error.cause:
Broken pipe

- error.class:
- Daha ayrıntılı inceleme için tcpdump kullanma bölümüne gidin.
- İzleme aracını kullanın (Yaygın teşhis adımları bölümünde açıklandığı gibi)
ve Analytics Verileri Kaydedildi bölmesinde aşağıdakilerin her ikisinin de ayarlandığını doğrulayın:
- Private Cloud kullanıcısıysanız:
- Başarısız olan isteğin ileti kimliğini belirleyin.
- Mesaj İşleyici 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. istisna: java.io.IOException: Broken pipe occurred while writing to channel ClientOutputChannel
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. istisna: onExceptionWrite exception: {}
java.io.IOException: Broken pipe2021-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 iki istisna da, Mesaj İşleyici istek yükünü arka uç sunucusuna yazmaya devam ederken bağlantının arka uç sunucusu tarafından erken kapatıldığını gösterir. Bu nedenle, Mesaj İşleyici
java.io.IOException: Broken pipeistisnasını oluşturur. Remote:IP:PORT, çözümlenen arka uç sunucusu IP adresini ve bağlantı noktası numarasını gösterir.- Yukarıdaki hata mesajındaki
bytesWritten=76295özelliği, bağlantı erken kapatıldığında Mesaj İşleyici'nin arka uç sunucusuna76295baytlık bir yük gönderdiğini gösterir. - Bu özellik
bytesRead=0, Mesaj İşleyici'nin arka uç sunucusundan herhangi bir veri (yanıt) almadığını gösterir. - Bu sorunu daha ayrıntılı bir şekilde incelemek için
tcpdumparka uç sunucusunda veya mesaj işlemcisinde toplayın ve aşağıda açıklandığı şekilde analiz edin.
tcpdump'ı kullanma
-
Aşağıdaki komutlarla arka uç sunucusunda veya Mesaj İşleyici'de bir
tcpdumpyakalayın:Arka uç sunucusunda
tcpdumptoplama komutu:tcpdump -i any -s 0 host MP_IP_ADDRESS -w FILE_NAME
Mesaj işleyicide
tcpdumptoplama komutu:tcpdump -i any -s 0 host BACKEND_HOSTNAME -w FILE_NAME
- Yakalanan
tcpdumpöğelerini analiz edin:Örnek tcpdump çıkışı (Mesaj İşleyici'de toplanmıştır):

Yukarıdaki
tcpdumpiçinde şunları görebilirsiniz:4paketinde, Mesaj İşleyici, arka uç sunucusunaPOSTisteği gönderdi.5,8,9,10,11paketinde, mesaj işlemci, istek yükünü arka uç sunucuya göndermeye devam etti.6ve7paketlerinde, arka uç sunucusu, Mesaj İşleyici'den alınan istek yükünün bir bölümü içinACKile yanıt verdi.- Ancak
12paketinde, alınan uygulama veri paketleri içinACKile yanıt vermek ve ardından yanıt yüküyle yanıt vermek yerine arka uç sunucusu, bağlantının kapatılmasını başlatan birFIN ACKile yanıt veriyor. - Bu, Mesaj İşleyici istek yükünü göndermeye devam ederken arka uç sunucunun bağlantıyı erken kapattığını açıkça gösterir.
- Bu durum, Mesaj İşleyici'nin bir
IOException: Broken Pipehata kaydetmesine ve istemciye503döndürmesine neden olur.
Çözünürlük
- Arka uç sunucu tarafındaki erken bağlantı kesilmesi sorununu analiz edip düzeltmek için uygulama ve/veya ağ ekiplerinizle birlikte çalışın.
- Arka uç sunucu uygulamasının, isteğin tamamı alınmadan önce bağlantının zaman aşımına uğramadığından veya bağlantıyı sıfırlamadığından emin olun.
- Apigee ile arka uç sunucusu arasında herhangi bir ara ağ cihazınız veya katmanınız varsa tüm istek yükü alınmadan önce zaman aşımına uğramadıklarından emin olun.
Sorun devam ederse Toplanması gereken teşhis bilgileri bölümüne gidin.
Teşhis bilgilerini toplamalıdır
Yukarıdaki talimatları uyguladıktan sonra sorun devam ederse aşağıdaki teşhis bilgilerini toplayın ve 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'si adı
503hatasını yeniden oluşturmak içincurlkomutunu tamamlayın.503 Service Unavailablehatasıyla ilgili isteği içeren izleme dosyası503hataları şu anda oluşmuyorsa geçmişte503hatalarının oluştuğu zaman aralığını saat dilimi bilgisiyle birlikte belirtin.
Private Cloud kullanıcısıysanız aşağıdaki bilgileri sağlayın:
- Başarısız olan istekler için gözlemlenen hata mesajının tamamı
- Gözlemlediğiniz kuruluş, ortam adı ve API proxy adı
503hataları - API proxy paketi
503 Service Unavailablehatası içeren istekleri içeren izleme dosyası- NGINX erişim günlükleri
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log - Mesaj işleyici günlükleri
/opt/apigee/var/log/edge-message-processor/logs/system.log 503hatalarının oluştuğu saat dilimi bilgisiyle birlikte zaman aralığı- Hata oluştuğunda Mesaj İşleyiciler ve arka uç sunucusunda toplanan
Tcpdumps