504 Ağ geçidi zaman aşımı - Yönlendirici zaman aşımı

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 Timeouthata 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:

  1. Analiz > API İzleme > Araştır sayfasına gidin.
  2. 5xx hatalarını filtreleyin ve zaman aralığını seçin.
  3. Durum Kodu'nu Zaman'a göre çizin.
  4. 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

  5. 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 ve status 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
    
  6. Diğer 504 hataları için Yanıt Süresi'ni inceleyin ve Yanıt Süresi'nin tüm 504 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:

  1. NGINX erişim günlüklerini kontrol edin:
    /opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log
  2. Belirli bir süre boyunca 504 hatası olup olmadığını (sorun geçmişte gerçekleştiyse) veya 504 nedeniyle başarısız olan bir istek olup olmadığını görmek için arama yapın.
  3. 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
  4. İ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.

  5. İ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

  1. 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.
  2. 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:

  1. Edge kullanıcı arayüzüne giriş yapın.
  2. Admin > Virtual Hosts'a (Yönetici > Sanal Ana Makineler) gidin.
  3. Zaman aşımı sorunu yaşadığınız belirli bir Ortam'ı seçin.
  4. G/Ç zaman aşımı değerini doğrulamak istediğiniz sanal ana makineyi seçin.
  5. Ö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:

  1. 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

  2. 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

  1. Bir Yönlendirici makinesine giriş yapın.
  2. /opt/nginx/conf.d dizininde proxy_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
    
  3. 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ı olan 0-default.conf içinde yeni 57 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çin proxy_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
  1. Edge kullanıcı arayüzünde, G/Ç zaman aşımı değerini görüntülemek istediğiniz ilgili API proxy'sini seçin.
  2. Kontrol etmek istediğiniz belirli hedef uç noktayı seçin.
  3. TargetEndpoint yapılandırmasındaki <HTTPTargetConnection> öğesi altında uygun bir değere sahip io.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
  1. 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.
  2. Kontrol etmek istediğiniz ServiceCallout politikasını seçin.
  3. <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

  1. İleti işleyen makinesine giriş yapın.
  2. Aşağıdaki komutu kullanarak /opt/apigee/edge-message-processor/conf dizininde HTTPTransport.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
    
  3. Yukarıdaki örnek çıkışta, HTTPTransport.io.timeout.millis özelliğinin http.properties içinde 55000 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.

  1. 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.
  2. 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çin 123 seconds değerini, yalnızca ilgili API Proxy'sinde kullanılan belirli bir sanal ana makinede ayarlayın.
  3. 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.