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:
- Sorun hâlâ devam ediyorsa etkilenen API için izleme oturumunu etkinleştirin.
- API çağrısı yapma ve sorunu yeniden oluşturma -
503 Service Unavailable
, hata kodu:messaging.adaptors.http.flow.ServiceUnavailable.
- Başarısız 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 mesaj kimliğini (
X-Apigee.Message-ID
) belirleyin.
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:
- NGINX erişim günlüklerini kontrol edin: (
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log
) - Belirli bir API proxy'si için belirli bir süre boyunca
503
Hatası olup olmadığını (sorun geçmişte olduysa) veya503
nedeniyle başarısız olan isteklerin olup olmadığını görmek için arama yapın. - 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ş
Neden: Hedef sunucu bağlantıyı erken kapatıyor
Teşhis
- Public Cloud 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 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
- X-Apigee.fault-code:
- İ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
- error.class:
- Daha fazla 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 Kaydı bölmesinde aşağıdakilerin ikisinin de ayarlanmış olduğunu doğrulayın:
- 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üzen2021-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ç sunucusuna76295
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
-
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
- Yakalanan
tcpdump
öğesini analiz edin:Örnek tcpdump çıkışı (İleti İşleyici'de toplandı):
Yukarıdaki
tcpdump
bölümünde aşağıdakileri görebilirsiniz:4
paketinde Mesaj İşleyici, arka uç sunucusuna birPOST
isteği gönderdi.- Mesaj İşleyici,
5
,8
,9
,10
,11
paketinde istek yükünü arka uç sunucusuna göndermeye devam etti. 6
ve7
paketinde,arka uç sunucusu Mesaj İşleyici'den alınan istek yükünün bir kısmı içinACK
ile yanıt verdi.- Ancak
12
paketinde, alınan uygulama veri paketleri içinACK
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 birFIN ACK
ile yanıt verir. - 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.
- Bu durum, Mesaj İşleyicinin bir
IOException: Broken Pipe
hata kaydetmesine ve istemciye503
döndürmesine neden olur
Çözünürlük
- 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.
- İ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.
- 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çincurl
komutunu tamamlayın503 Service Unavailable
hatasına sahip isteği içeren izleme dosyası- Şu anda
503
hataları ortaya çıkmıyorsa geçmişte503
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ı