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

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 Timeouthatası 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:

  1. Analiz > API İzleme > İnceleme sayfası.
  2. 5xx hatayı filtreleyin ve zaman aralığını seçin.
  3. Durum Kodunun grafiğini Zaman ile karşılaştırın.
  4. 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

  5. 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, ve status 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
    
  6. 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:

  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ü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 varsa 504
  3. 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
  4. İ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.

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

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

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

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

  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. Bu, sanal ana makinede yapılandırılan G/Ç zaman aşımının 120 olduğu anlamına gelir. saniye.

ziyaret edin.

yönlendirici.properties dosyasında G/Ç zaman aşımı doğrulanıyor

  1. Bir Yönlendirici makinesine giriş yapın.
  2. 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
    
  3. 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 yeni 57 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çin proxy_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
  1. 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.
  2. Kontrol etmek istediğiniz hedef uç noktasını seçin.
  3. Altında uygun değerle io.timeout.millis özelliğini görün TargetEndpoint 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
  1. 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.
  2. Kontrol etmek istediğiniz Hizmet Çağrısı politikasını seçin.
  3. Öğ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

  1. İleti İşleyici makinesine giriş yapın.
  2. 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
    
  3. Yukarıdaki örnek çıkışta, HTTPTransport.io.timeout.millis, şurada 55000 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.

  1. 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.
  2. 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.
  3. Ş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.