Apigee Edge belgelerini görüntülüyorsunuz.
.
Git:
Apigee X belgeleri. bilgi
Belirti
İstemci uygulaması şu mesajla birlikte 504
HTTP durum kodunu alır:
API çağrılarına yanıt olarak Gateway Timeout
.
Bu hata yanıtı, istemcinin Apigee Edge'den zamanında yanıt almadığını gösterir veya arka uç sunucusuna bağlanmalarını isteme.
Hata mesajı
İstemci uygulaması aşağıdaki yanıt kodunu alır:
HTTP/1.1 504 Gateway Time-out
cURL veya bir web tarayıcısı kullanarak bu tür bir proxy'yi ç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 gönderilen API isteklerinin tipik yolu İstemci > Yönlendirici > Mesaj gönder İşlemci > Arka Uç Sunucusu aşağıdaki şekilde gösterildiği gibidir:
İstemciler, Yönlendiriciler, Message Security dahil olmak üzere Apigee Edge çalışma zamanı akışındaki tüm bileşenler
İşlemcilerin ve arka uç sunucularının, şunları yapmak için uygun varsayılan zaman aşımı değerleriyle
API isteklerinin tamamlanmasının çok uzun sürmediğinden emin olun. Bu programdaki bileşenlerden herhangi biri
akışında belirtilen zaman aralığı içinde yukarı akış bileşeninden yanıt almazsa
zaman aşımı yapılandırması durumunda, ilgili bileşen zaman aşımına uğrar ve genellikle bir
504 Gateway Timeout
hatası oluştu.
Bu başucu kitabında,504
zaman aşımına uğrar.
Yönlendiricide zaman aşımı
Apigee Edge'deki Yönlendiricilerde yapılandırılan varsayılan zaman aşımı süresi 57 saniyedir. Bu sayı, API isteğinin Edge'de alınmasından bu proxy'nin yürütülebileceği süre arka uç yanıtı ve yürütülen tüm politikalar dahil olmak üzere yanıt geri gönderilir. Varsayılan zaman aşımı, Yönlendiricilerde/sanal ana makinelerde şu sayfada açıklandığı şekilde geçersiz kılınabilir: Yönlendiricilerde G/Ç zaman aşımını yapılandırma.
Olası nedenler
Edge'de, 504 Gateway Timeout
hatasının tipik nedenleri
Yönlendirici zaman aşımı:
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 Private Cloud kullanıcıları |
Sık kullanılan 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 > İnceleme sayfası.
5xx
hatayı filtreleyin ve zaman aralığını seçin.- Durum Kodunun grafiğini Zaman ile karşılaştırın.
-
Daha fazla ayrıntı görmek ve görüntülemek için
504
hata gösteren hücreyi tıklayın bu hatalarla ilgili günlükleri aşağıda gösterildiği gibi bulabilirsiniz:504 Hatalarını gösteren örnek
- Sağdaki bölmede View logs'u (Günlükleri görüntüle) tıklayın.
Trafik Günlükleri penceresinde, bazı
504
hataları için aşağıdaki ayrıntılara dikkat edin:- İstek: Çağrı yapmak için kullanılan istek yöntemini ve URI'yı sağlar.
- Yanıt Süresi: İstek için geçen toplam süreyi sağlar.
Yukarıdaki örnekte,
- İstek ,
GET /test-timeout
adresini işaret ediyor. - Yanıt Süresi
57.001
saniyedir. Bu, Yönlendiricinin değer çok yaklaştığı için İleti İşleyici yanıt veremeden önce zaman aşımına uğradı Yönlendiricide ayarlanan varsayılan G/Ç zaman aşımı değerine ayarlanır; bu değer 57 saniye.
Tüm günlüklere API Monitoring'i kullanarak da ulaşabilirsiniz. Günlükleri alma API'si. Örneğin,
org
,env
,timeRange
, vestatus
gibi ürünlere ilişkin tüm günlükleri indirebilirsiniz. zaman aşımına uğradı.API Monitoring, bu
504
için proxy'yi-
(not set) olarak ayarladığından Bunun için API'yi kullanabilirsiniz (Günlükler API) kullanarak sanal ana makine ve yol için ilişkili proxy'yi kullanın.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 inceleyip kontrol edin görmek için Yanıt Süresi'nin tutarlı (I/O zaman aşımı değeri Yönlendirici'de ayarlanır) yani 57 saniye)504
hatalarının tümüne karşılık gelir.
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ürede herhangi bir
504
hatası olup olmadığını görmek için arama yapın (sorun geçmişte oluşmuşsa) veya hâlâ başarısız olan bir istek varsa504
- Bazı
504
hataları için aşağıdaki bilgilere dikkat edin:- Yanıt Süresi
- İstek URI'si
Bu örnekte aşağıdaki bilgileri görüyoruz:
-
İstek Süresi:
57.001
saniye. Bu durum, Yönlendirici 57.001 saniye sonra zaman aşımına uğradı. - İstek:
GET /test-timeout
- Ana Makine Takma Adı:
myorg-test.apigee.net
-
İstek Zamanı'nın G/Ç zaman aşımıyla aynı olup olmadığını kontrol edin Yönlendiricide/sanal ana makinede yapılandırılmış olmalıdır. Yanıtınız evetse bu, Yönlendiricinin Mesaj İşleyen bu süre içinde yanıt vermedi.
Yukarıda gösterilen örnek NGINX Erişim Günlüğü girişinde, İstek
57.001
saniyelik süre, ayarlanan varsayılan G/Ç zaman aşımı değerine çok yakın üzerinde değişiklik yapabilirsiniz. Bu durum, Yönlendiricinin İleti Dizisi'nden önce zaman aşımına uğradığını açıkça gösterir. İşleyen yanıt verebilir. - Şuradaki temel yolu kullanarak isteğin yapıldığı API Proxy'sini belirleyin: Request (İstek) alanına girin.
Neden: Yönlendiricide yanlış zaman aşımı yapılandırması
Teşhis
504
hatalarının Yönlendiricinin daha önce zaman aşımına uğramış olması nedeniyle olup olmadığını belirleyin yanıt verebilir. Bunu, API Monitoring'de Yanıt Süresi/Yönlendiricideki İstek Süresi (her iki alan da) aynı bilgileri temsil etmesi ancak farklı adlarla çağrılması durumunda, Yönlendirici/sanal ana makinede ve Hata Kaynağı, Hata alanlarında yapılandırılmış G/Ç zaman aşımı Proxy ve Hata Kodu, API İzleme veya NGINX Erişimi kullanılarak-
olarak ayarlanır Yaygın teşhis adımları bölümünde anlatıldığı şekilde günlüklere ulaşabilirsiniz.-
Yönlendiricide veya belirli sanal ana makinede yapılandırılan G/Ç zaman aşımı değerinin olup olmadığını kontrol edin. daha düşük.
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ü
Edge kullanıcı arayüzünü kullanarak sanal ana makine zaman aşımını doğrulamak için aşağıdakileri yapın:
- Edge kullanıcı arayüzüne giriş yapın.
- Yönetici > Sanal Ana Makineler bölümüne gidin.
- Zaman aşımı sorununu yaşadığınız belirli bir Ortam'ı seçin.
- G/Ç zaman aşımı değerini doğrulamak istediğiniz ilgili sanal ana makineyi seçin.
- Özellikler altında, saniye cinsinden Proxy Okuma Zaman Aşımı değerini görüntüleyin.
Yukarıdaki örnekte, Proxy Okuma Zaman Aşımı
120
. 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'lerini kullanarak da doğrulayabilirsiniz:
-
Şunu yürütün: Aşağıda gösterildiği gibi
virtualhost
yapılandırmasını almak için sanal ana makine API'sini alın:Herkese açık Cloud 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
. Bu, sanal ana makinede yapılandırılan G/Ç zaman aşımının 120 olduğu anlamına gelir. saniye.
yönlendirici.properties dosyasında G/Ç zaman aşımı doğrulanıyor
- Bir Yönlendirici makinesine giriş yapın.
proxy_read_timeout
mülkünü,/opt/nginx/conf.d
dizinine gidin ve yeni değerle ayarlanıp ayarlanmadığını kontrol edin şu şekilde:grep -ri "proxy_read_timeout" /opt/nginx/conf.d
-
Söz konusu sanal makinede
proxy_read_timeout
özelliği için ayarlanan değeri kontrol edin ana makine yapılandırma dosyası.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
mülkünün ,0-default.conf
içinde şu değer olan yeni57
değeriyle ayarlandı: varsayılan sanal ana makinenin yapılandırma dosyasını kullanır. Bu, G/Ç zaman aşımının varsayılan sanal ana makine için Yönlendirici'de 57 saniye olacak şekilde yapılandırılmıştır. Mevcut her biri için bu bilgileri görürsünüz. Şunun değerini alın: API'yi oluşturmak üzere kullandığınız ilgili sanal ana makine içinproxy_read_timeout
504
hatayla başarısız olan çağrı sayısı.
API proxy'sinde G/Ç zaman aşımı doğrulanıyor
G/Ç zaman aşımını şurada görüntüleyebilirsiniz:
- API proxy'sinin hedef uç noktası
- API proxy'sinin ServiceÇağrı politikası
API proxy'sinin hedef uç noktasında G/Ç zaman aşımını göster
- Edge kullanıcı arayüzünde, G/Ç'yi görüntülemek istediğiniz API proxy'sini seçin zaman aşımı değerine ayarlanır.
- Kontrol etmek istediğiniz hedef uç noktasını seçin.
- Altında uygun değerle
io.timeout.millis
özelliğini görünTargetEndpoint
içinde<HTTPTargetConnection>
öğesi yapılandırma.Ö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 ServiceÇağrı politikasında G/Ç zaman aşımını göster
- Edge kullanıcı arayüzünde, yeni G/Ç'yi görüntülemek istediğiniz API proxy'sini seçin ServiceÇağrı politikası için zaman aşımı değeri.
- Kontrol etmek istediğiniz Hizmet Çağrısı politikasını seçin.
-
Öğenin altında uygun değere sahip
<Timeout>
öğesini görün<ServiceCallout>
yapılandırması.Örneğin, aşağıdaki kodun G/Ç zaman aşımı 120 saniyedir:
<Timeout>120000</Timeout>
İleti İşleyenlerde G/Ç zaman aşımını doğrulama
- İleti İşleyici makinesine giriş yapın.
-
HTTPTransport.io.timeout.millis
mülkünü, Aşağıdaki komutu kullanarak/opt/apigee/edge-message-processor/conf
dizini oluşturun: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
, şurada55000
değeriyle ayarlandı:http.properties
. Bu, G/Ç zaman aşımının başarılı bir şekilde Mesaj İşleyici'de 55 saniye olmasını sağlar.
Yönlendirici ve Mesaj İşlemcisinde yapılandırılan zaman aşımını belirledikten sonra, Yönlendirici/sanal ana makine, Mesaj İşleyici/API proxy'si.
Aşağıdaki tabloda gösterildiği gibi, tüm katmanlarda ayarlanmış değerleri not edin:
Yönlendiricide zaman aşımı (saniye) | Sanal ana makinede zaman aşımı (saniye) | İleti İşlemcide zaman aşımı (saniye) | API proxy'sinde zaman aşımı (saniye) |
---|---|---|---|
57 | - | 55 | 120 |
Bu örnekte,
- Varsayılan 57 saniye değeri Yönlendirici üzerinde yapılandırılır.
- Zaman aşımı değeri ilgili sanal ana makinede ayarlanmadı. Bu, aracın Yönlendiricinin kendisinde yapılandırılmış varsayılan 57 saniye değeri.
- İleti İşleyici'de 55 saniye olan varsayılan bir değer yapılandırılır.
- Ancak belirli 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â kullanımda olduğunu unutmayın.
57 saniyeyle yapılandırıldı. İleti gönderilirken Yönlendirici 57. saniyede zaman aşımına uğrar.
İşlemci/arka uç hâlâ isteğinizi işliyor. Bu, Yönlendirici'nin
İstemci uygulamasında 504 Gateway Timeout
hatası.
Çözünürlük
Yönlendirici ve İletide doğru G/Ç zaman aşımını yapılandırmak için aşağıdaki adımları uygulayın İşleyen.
- Referans Hangi zaman aşımı değerlerinin anlaşılması için G/Ç zaman aşımını yapılandırmaya yönelik en iyi uygulamalar Apigee Edge üzerinden API istek akışına dahil olan farklı bileşenler üzerine kurulmalıdır.
- Yukarıdaki örnekte, daha yüksek bir zaman aşımı değerinin ayarlanması gerektiğini belirlerseniz,
Çünkü arka uç sunucusu daha uzun zaman gerektirir ve zaman aşımını
değerini 120 saniye olarak ayarlayın ve
örnek: Yönlendirici üzerinde
123 seconds
. Tüm API Proxy'lerinin etkilenmemesi için nedeniyle,123 seconds
değerini yalnızca Belirli API Proxy'sinde kullanılan belirli bir sanal ana makineyi kullanın. - Şu adresteki talimatları uygulayın: Sanal ana makinedeki zaman aşımını ayarlamak için Yönlendiricilerde G/Ç zaman aşımını yapılandırma başlıklı makaleye bakın.