Apigee Edge belgelerini görüntülüyorsunuz.
Apigee X belgelerine gidin. bilgi
Belirti
İstemci uygulaması, API çağrılarına yanıt olarak Gateway Timeout
mesajıyla birlikte 504
HTTP durum kodunu alır.
Bu hata yanıtı, API çağrısı yürütülürken istemcinin Apigee Edge'den veya arka uç sunucusundan zamanında yanıt alamadığını belirtir.
Hata mesajı
İstemci uygulaması aşağıdaki yanıt kodunu alır:
HTTP/1.1 504 Gateway Time-out
Bu tür bir proxy'yi cURL veya bir web tarayıcısı kullanarak çağırırken aşağıdaki hatayı alabilirsiniz:
<!DOCTYPE html> <html> <head> <title>Error</title> <style> body { width: 35em; margin: 0 auto; font-family: Tahoma, Verdana, Arial, sans-serif; } </style> </head> <body> <h1>An error occurred.</h1> <p>Sorry, the page you are looking for is currently unavailable.<br/> Please try again later.</p> </body> </html>
Zaman aşımlarının nedeni nedir?
Edge platformu üzerinden yapılan bir API isteği için tipik yol, aşağıdaki şekilde gösterildiği gibi İstemci > Yönlendirici > Mesaj İşleyici > Arka Uç Sunucusu şeklindedir:
İstemciler, Yönlendiriciler, Mesaj İşleyiciler ve arka uç sunucuları dahil olmak üzere Apigee Edge çalışma zamanı akışındaki tüm bileşenler, API isteklerinin tamamlanmasının uzun sürmemesi için uygun varsayılan zaman aşımı değerleriyle ayarlanır. Akıştaki bileşenlerden herhangi biri, zaman aşımı yapılandırmasında belirtilen süre içinde yukarı akış bileşeninden yanıt almazsa söz konusu bileşen zaman aşımına uğrar ve genellikle 504 Gateway Timeout
hata döndürür.
Bu başucu kitabında, Yönlendirici zaman aşımına uğradığında oluşan 504
hatasının nasıl giderileceği ve çözümleneceği açıklanmaktadır.
Yönlendiricide zaman aşımı
Apigee Edge'deki Yönlendiricilerde yapılandırılan varsayılan zaman aşımı 57 saniyedir. Bu, API isteğinin Edge'de alınmasından yanıtın geri gönderilmesine kadar, arka uç yanıtı ve yürütülen tüm politikalar dahil olmak üzere bir API proxy'sinin yürütülebileceği maksimum süredir. Varsayılan zaman aşımı, Yönlendiricilerde G/Ç zaman aşımını yapılandırma bölümünde açıklandığı gibi Yönlendiriciler/sanal ana makinelerde geçersiz kılınabilir.
Olası nedenler
Edge'de, Yönlendiricinin zaman aşımına uğramasından kaynaklanan 504 Gateway Timeout
hatasının tipik nedenleri şunlardır:
Neden | Açıklama | Şunun için geçerli sorun giderme talimatları: |
---|---|---|
Yönlendiricide yanlış zaman aşımı yapılandırması | Bu durum, Yönlendirici yanlış G/Ç zaman aşımı süresiyle yapılandırılmışsa meydana gelir. | Edge Herkese Açık ve Özel Bulut kullanıcıları |
Yaygın teşhis adımları
Bu hatayı teşhis etmek için aşağıdaki araçlardan/tekniklerden birini kullanın:
- API izleme
- NGINX erişim günlükleri
API izleme
API Monitoring'i kullanarak hatayı teşhis etmek için:
- Analiz > API İzleme > Araştır sayfasına gidin.
5xx
hatalarını filtreleyin ve zaman aralığını seçin.- Durum Kodu'nu Zaman'a göre çizin.
-
Daha fazla ayrıntı görmek ve bu hatalarla ilgili günlükleri aşağıda gösterildiği gibi görüntülemek için
504
hatalarını gösteren ilgili hücreyi tıklayın:504 hatalarını gösteren örnek
- Sağdaki bölmede Günlükleri görüntüle'yi tıklayın.
Trafik Günlükleri penceresinde, bazı
504
hataları için aşağıdaki ayrıntıları not edin:- İstek: Çağrılar için kullanılan istek yöntemini ve URI'yı sağlar.
- Yanıt Süresi: İstek için geçen toplam süreyi gösterir.
Yukarıdaki örnekte
- İstek
GET /test-timeout
adresine işaret ediyor. - Yanıt Süresi
57.001
saniyedir. Bu, değer Yönlendiricide ayarlanan 57 saniye olan varsayılan G/Ç zaman aşımına çok yakın olduğundan Mesaj İşleyici yanıt verebilmeden önce Yönlendirici'nin zaman aşımına uğradığını gösterir.
API Monitoring GET günlükleri API'sini kullanarak da tüm günlükleri alabilirsiniz. Örneğin
org
,env
,timeRange
vestatus
günlüklerini sorgulayarak istemcinin zaman aşımına uğradığı işlemlerin tüm günlüklerini indirebilirsiniz.API Monitoring, bu
504
hataları için proxy'yi-
(not set) olarak ayarladığından, sanal ana makine ve yol için ilişkili proxy'yi almak amacıyla API'yi (Logs API) kullanabilirsiniz.For example :
curl "https://apimonitoring.enterprise.apigee.com/logs/apiproxies?org=ORG&env=ENV&select=https
- Diğer
504
hataları için Yanıt Süresi'ni inceleyin ve Yanıt Süresi'nin tüm504
hataları genelinde tutarlı olup olmadığını (Yönlendiricide ayarlanan 57 saniye olan G/Ç zaman aşımı değeri) kontrol edin.
NGINX erişim günlükleri
NGINX erişim günlüklerini kullanarak hatayı teşhis etmek için:
- NGINX erişim günlüklerini kontrol edin:
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log
- Belirli bir süre boyunca
504
hatası olup olmadığını (sorun geçmişte gerçekleştiyse) veya504
nedeniyle başarısız olan bir istek olup olmadığını görmek için arama yapın. - Bazı
504
hataları için aşağıdaki bilgileri unutmayın:- Yanıt Süresi
- İstek URI'si
Bu örnekte aşağıdaki bilgileri görürüz:
-
İstek Süresi:
57.001
saniye. Bu, Yönlendiricinin 57.001 saniye sonra zaman aşımına uğradığını gösterir. - İstek:
GET /test-timeout
- Barındırıcı Takma Adı:
myorg-test.apigee.net
-
İstek Zamanı'nın, yönlendiricide/sanal ana makinede yapılandırılan G/Ç zaman aşımıyla aynı olup olmadığını kontrol edin. Yanıt evet ise Mesaj İşleyici bu süre içinde yanıt vermemeden önce Yönlendirici zaman aşımına uğramış demektir.
Yukarıda gösterilen örnek NGINX Erişim Günlüğü girişinde,
57.001
saniyelik İstek Süresi, Yönlendiricide ayarlanan varsayılan G/Ç zaman aşımına çok yakın. Bu, Mesaj İşleyici yanıt veremeden önce Yönlendiricinin zaman aşımına uğradığını açıkça gösterir. - İstek alanındaki temel yolu kullanarak isteğin yapıldığı API Proxy'sini belirleyin.
Neden: Yönlendiricide yanlış zaman aşımı yapılandırması
Teşhis
504
hatalarının, Mesaj İşleyici yanıt veremeden önce Yönlendiricinin zaman aşımına uğramış olmasından kaynaklanıp kaynaklanmadığını belirleyin. Bunu yapmak için,Yönlendiricideki API İzleme/İstek Süresi'ndeki Yanıt Süresi'nin (her iki alan da aynı bilgileri temsil eder ancak farklı adlarla çağrılır) yönlendiricide/sanal ana makinede yapılandırılan G/Ç zaman aşımı ile aynı olup olmadığını ve Hata Kaynağı, Hata Proxy ve Hata Proxy alanlarının API İzleme veya NGINX'teki teşhis adımları kullanılarak-
olarak ayarlanıp ayarlanmadığını kontrol ederek yapabilirsiniz.-
Yönlendiricide veya belirli bir sanal ana makinede yapılandırılan G/Ç zaman aşımı değerinin, Mesaj İşleyici veya ilgili API Proxy'sinde yapılandırılana kıyasla düşük olup olmadığını kontrol edin.
Bu işlemi, bu bölümdeki adımları uygulayarak yapabilirsiniz.
Sanal ana makinelerde G/Ç zaman aşımını doğrulama
Edge kullanıcı arayüzü
Sanal ana makine zaman aşımını Edge kullanıcı arayüzünü kullanarak doğrulamak için aşağıdakileri yapın:
- Edge kullanıcı arayüzüne giriş yapın.
- Admin > Virtual Hosts'a (Yönetici > Sanal Ana Makineler) gidin.
- Zaman aşımı sorunu yaşadığınız belirli bir Ortam'ı seçin.
- G/Ç zaman aşımı değerini doğrulamak istediğiniz sanal ana makineyi seçin.
- Özellikler altında, Proxy Okuma Zaman Aşımı değerini saniye cinsinden görüntüleyin.
Yukarıdaki örnekte Proxy Okuma Zaman Aşımı ,
120
değeriyle yapılandırılmıştır. Bu, bu sanal ana makinede yapılandırılan G/Ç zaman aşımının 120 saniye olduğu anlamına gelir.
Yönetim API'leri
Proxy Okuma Zaman Aşımı'nı aşağıdaki yönetim API'larını kullanarak da doğrulayabilirsiniz:
-
virtualhost
yapılandırmasını almak için aşağıda gösterildiği gibi Get virtual sunucu API'sini yürütün:Herkese açık bulut kullanıcısı
curl -v -X GET https://api.enterprise.apigee.com/v1/organizations/ORGANIZATION_NAME/environments/ENVIRONMENT_NAME/virtualhosts/VIRTUALHOST_NAME -u USERNAME
Private Cloud kullanıcısı
curl -v -X GET http://MANAGEMENT_SERVER_HOST:PORT#/v1/organizations/ORGANIZATION_NAME/environments/v/virtualhosts/VIRTUALHOST_NAME -u USERNAME
Burada:
ORGANIZATION_NAME, kuruluşun adıdır
ENVIRONMENT_NAME ortamın adıdır.
VIRTUALHOST_NAME, sanal ana makinenin adıdır
-
proxy_read_timeout
özelliği için yapılandırılan değeri kontrol edinÖrnek Sanal Ana Makine Tanımı
{ "hostAliases": [ "api.myCompany,com", ], "interfaces": [], "listenOptions": [], "name": "secure", "port": "443", "retryOptions": [], "properties": { "property": [ { "name": "proxy_read_timeout", "value": "120" } ] }, "sSLInfo": { "ciphers": [], "clientAuthEnabled": "false", "enabled": "true", "ignoreValidationErrors": false, "keyAlias": "myCompanyKeyAlias", "keyStore": "ref://myCompanyKeystoreref", "protocols": [] }, "useBuiltInFreeTrialCert": false }
Yukarıdaki örnekte
proxy_read_timeout
,120
değeriyle yapılandırılmıştır. Bu, bu sanal ana makinede yapılandırılan G/Ç zaman aşımının 120 saniye olduğu anlamına gelir.
yönlendirici.properties dosyasında G/Ç zaman aşımı doğrulanıyor
- Bir Yönlendirici makinesine giriş yapın.
/opt/nginx/conf.d
dizinindeproxy_read_timeout
özelliğini arayın ve aşağıdaki şekilde yeni değerle ayarlanıp ayarlanmadığını kontrol edin:grep -ri "proxy_read_timeout" /opt/nginx/conf.d
-
Belirli bir sanal ana makine yapılandırma dosyasında
proxy_read_timeout
özelliği için ayarlanan değeri kontrol edin.grep komutundan örnek sonuç
/opt/nginx/conf.d/0-default.conf:proxy_read_timeout 57; /opt/nginx/conf.d/0-edge-health.conf:proxy_read_timeout 1s;
Yukarıdaki örnek çıkışta,
proxy_read_timeout
özelliğinin varsayılan sanal ana makinenin yapılandırma dosyası olan0-default.conf
içinde yeni57
değeriyle ayarlandığına dikkat edin. Bu, varsayılan sanal ana makine için G/Ç zaman aşımının Yönlendiricide 57 saniye olarak yapılandırıldığını belirtir. Birden fazla sanal ana makineniz varsa bu bilgileri her biri için görürsünüz.504
hata ile başarısız olan API çağrıları yapmak amacıyla kullandığınız belirli sanal ana makine içinproxy_read_timeout
değerini alın.
API proxy'sinde G/Ç zaman aşımını doğrulama
G/Ç zaman aşımını aşağıda görebilirsiniz:
- API proxy'sinin hedef uç noktası
- API proxy'sinin Service Console politikası
API proxy'sinin hedef uç noktasında G/Ç zaman aşımını göster
- Edge kullanıcı arayüzünde, G/Ç zaman aşımı değerini görüntülemek istediğiniz ilgili API proxy'sini seçin.
- Kontrol etmek istediğiniz belirli hedef uç noktayı seçin.
TargetEndpoint
yapılandırmasındaki<HTTPTargetConnection>
öğesi altında uygun bir değere sahipio.timeout.millis
özelliğine bakın.Örneğin, aşağıdaki kodda G/Ç zaman aşımı 120 saniye olarak ayarlanmıştır:
<Properties> <Property name="io.timeout.millis">120000</Property> </Properties>
API proxy'sinin ServiceCallout politikasında G/Ç zaman aşımını göster
- Edge kullanıcı arayüzünde, ServiceCallout politikası için yeni G/Ç zaman aşımı değerini görüntülemek istediğiniz ilgili API proxy'sini seçin.
- Kontrol etmek istediğiniz ServiceCallout politikasını seçin.
-
<ServiceCallout>
yapılandırması altında uygun bir değere sahip<Timeout>
öğesine bakın.Örneğin, aşağıdaki kodun G/Ç zaman aşımı 120 saniyedir:
<Timeout>120000</Timeout>
İleti İşleyicilerinde G/Ç zaman aşımını doğrulama
- İleti işleyen makinesine giriş yapın.
-
Aşağıdaki komutu kullanarak
/opt/apigee/edge-message-processor/conf
dizinindeHTTPTransport.io.timeout.millis
özelliğini arayın:grep -ri "HTTPTransport.io.timeout.millis" /opt/apigee/edge-message-processor/conf
Örnek çıkış
/opt/apigee/edge-message-processor/conf/http.properties:HTTPTransport.io.timeout.millis=55000
- Yukarıdaki örnek çıkışta,
HTTPTransport.io.timeout.millis
özelliğininhttp.properties
içinde55000
değeriyle ayarlandığına dikkat edin. Bu, G/Ç zaman aşımının Mesaj İşleyici'de 55 saniye olarak başarıyla yapılandırıldığını gösterir.
Yönlendirici ve Mesaj İşleyicide yapılandırılan zaman aşımını belirledikten sonra, Yönlendiricinin/sanal ana makinenin Mesaj İşleyici/API proxy'sindekinden daha düşük bir zaman aşımı değeriyle yapılandırılıp yapılandırılmadığını doğrulayın.
Aşağıdaki tabloda gösterildiği gibi, tüm katmanlarda ayarlanan değerleri not edin:
Yönlendiricide zaman aşımı (saniye) | Sanal ana makinede zaman aşımı (saniye) | Mesaj İşleyicide zaman aşımı (saniye) | API proxy'sinde zaman aşımı (saniye) |
---|---|---|---|
57 | - | 55 | 120 |
Bu örnekte,
- Yönlendiricide varsayılan 57 saniye değeri yapılandırılır.
- Belirli bir sanal ana makinede zaman aşımı değeri ayarlanmamıştır. Bu, Yönlendiricinin kendisinde yapılandırılmış olan 57 saniye olan varsayılan değeri kullanacağı anlamına gelir.
- İleti İşleyici'de varsayılan olarak 55 saniye değeri yapılandırılır.
- Ancak ilgili API Proxy'sinde 120 saniyelik bir değer yapılandırılır.
Daha yüksek zaman aşımı değerinin yalnızca API proxy'sinde yapılandırıldığını ancak Yönlendiricinin hâlâ 57 saniyeyle yapılandırıldığını unutmayın. Bu nedenle, Mesaj İşleyici/arka uç isteğinizi işlemeye devam ederken Yönlendirici 57. saniyede zaman aşımına uğrar. Bu, Yönlendiricinin istemci uygulamasına 504 Gateway Timeout
hatasıyla yanıt vermesine neden olur.
Çözünürlük
Bu sorunu çözmek için Yönlendiricide ve Mesaj İşleyicide uygun G/Ç zaman aşımını yapılandırmak üzere aşağıdaki adımları uygulayın.
- Apigee Edge üzerinden API isteği akışına dahil olan farklı bileşenlerde hangi zaman aşımı değerlerinin ayarlanması gerektiğini anlamak için G/Ç zaman aşımını yapılandırmayla ilgili en iyi uygulamalar bölümüne bakın.
- Yukarıdaki örnekte, arka uç sunucusu daha uzun süre gerektirdiği için daha yüksek bir zaman aşımı değerinin ayarlanması gerektiğinden eminseniz ve Mesaj İşleyicinin zaman aşımı değerini 120 saniyeye çıkardıysanız daha yüksek bir zaman aşımı değeri ayarlayın. Örneğin: Yönlendiricide
123 seconds
. Yeni zaman aşımı değeri nedeniyle tüm API Proxy'lerinin etkilenmesini önlemek için123 seconds
değerini, yalnızca ilgili API Proxy'sinde kullanılan belirli bir sanal ana makinede ayarlayın. - Sanal ana makinedeki zaman aşımını ayarlamak için Yönlendiricilerde G/Ç zaman aşımını yapılandırma bölümündeki talimatları uygulayın.