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:
- Sorun hâlâ devam ediyorsa izleme oturumunu kaldırın.
- API çağrısı yapın ve sorunu yeniden oluşturun -
503 Service Unavailable
messaging.adaptors.http.flow.ServiceUnavailable.
hata koduyla - Başarısız isteklerden birini seçin.
- AX aşaması'na gidip ileti kimliğini belirleme
(
X-Apigee.Message-ID
) Aşama Ayrıntıları bölümüne gidin.
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:
- NGINX erişim günlüklerini kontrol edin: (
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log
) - Belirli bir sürede ilgili API proxy'si için
503
hatası olup olmadığını kontrol edin (sorun geçmişte oluşmuşsa) veya503
ile hâlâ başarısız olan istekler varsa. - 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ş
Neden: Hedef sunucu bağlantıyı zamanından önce kapatıyor
Teşhis
- Herkese Açık Bulut veya Private Cloud kullanıcısıysanız:
- İ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
- X-Apigee.fault-code:
- İ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
- error.class:
- Daha ayrıntılı inceleme için tcpdump kullanma bölümüne gidin.
- İ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:
- 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ü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 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 uca76295
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
-
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
- Yakalanan
tcpdump
öğesini analiz edin:Örnek tcpdump çıkışı (İleti İşleyici'de toplanır):
Yukarıdaki
tcpdump
içinde aşağıdakileri görebilirsiniz:4
paketinde, Mesaj İşleyici birPOST
isteği gönderdi. arka uç sunucusuna gidin.5
,8
,9
,10
paketinde,11
, Mesaj İşleyici istek yükünü arka uç sunucusuna gidin.6
ve7
paketlerinde arka uç sunucusuACK
.- Ancak
12
paketinde,ACK
ile yanıt vermek yerine ve daha sonra da e-postayla yanıt vererek arka uç sunucusu bunun yerineFIN ACK
ile yanıt verir ve bağlantıyı iptal edebilir. - 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.
- Bu durum, İleti İşleyici'nin
IOException: Broken Pipe
hata mesajını verir ve istemciye bir503
döndürür.
Çözünürlük
- 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.
- 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.
- 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çincurl
komutunu tamamlayın503 Service Unavailable
hatasına sahip isteği içeren izleme dosyası- Şu anda
503
hataları görünmüyorsa dönemi Geçmişte503
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