Waktu tunggu gateway 504 - Waktu router habis

Anda sedang melihat dokumentasi Apigee Edge.
Buka dokumentasi Apigee X.
info

Gejala

Aplikasi klien menerima kode status HTTP 504 dengan pesan Gateway Timeout sebagai respons terhadap panggilan API.

Respons error ini menunjukkan bahwa klien tidak menerima respons tepat waktu dari Apigee Edge atau server backend selama eksekusi panggilan API.

Pesan error

Aplikasi klien mendapatkan kode respons berikut:

HTTP/1.1 504 Gateway Time-out

Saat memanggil proxy tersebut menggunakan cURL atau browser web, Anda mungkin mendapatkan error berikut:

<!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>

Apa penyebab waktu tunggu habis?

Jalur umum untuk permintaan API melalui platform Edge adalah Klien > Router > Message Processor > Server Backend seperti yang ditunjukkan pada gambar berikut:

Semua komponen dalam alur runtime Apigee Edge, termasuk klien, Router, Message Processors, dan server backend disiapkan dengan nilai waktu tunggu default yang sesuai untuk memastikan permintaan API tidak terlalu lama untuk diselesaikan. Jika salah satu komponen dalam alur tidak mendapatkan respons dari komponen upstream dalam jangka waktu yang ditentukan dalam konfigurasi waktu tunggu, komponen tertentu akan mengalami waktu tunggu dan biasanya akan menampilkan error 504 Gateway Timeout.

Playbook ini menjelaskan cara memecahkan masalah dan menyelesaikan error 504 yang disebabkan saat Router mengalami waktu tunggu habis.

Waktu Tunggu Router Habis

Waktu tunggu default yang dikonfigurasi di Router di Apigee Edge adalah 57 detik. Ini adalah jumlah waktu maksimum yang dapat dijalankan proxy API sejak permintaan API diterima di Edge hingga respons dikirim kembali, termasuk respons backend dan semua kebijakan yang dijalankan. Waktu tunggu default dapat diganti pada Router/host virtual seperti yang dijelaskan dalam Mengonfigurasi waktu tunggu I/O di Router.

Kemungkinan penyebab

Di Edge, penyebab umum error 504 Gateway Timeout yang disebabkan karena waktu tunggu router habis adalah:

Penyebab Deskripsi Petunjuk pemecahan masalah yang berlaku untuk
Konfigurasi waktu tunggu yang salah di Router Hal ini terjadi jika Router dikonfigurasi dengan periode waktu tunggu I/O yang salah. Pengguna Edge Public dan Private Cloud

Langkah-langkah diagnosis umum

Gunakan salah satu alat/teknik berikut untuk mendiagnosis error ini:

  • Pemantauan API
  • Log akses NGINX

Pemantauan API

Untuk mendiagnosis error menggunakan Pemantauan API:

  1. Buka halaman Analyze > API Monitoring > Investigate.
  2. Filter error 5xx, lalu pilih jangka waktu.
  3. Petakan Kode Status terhadap Waktu.
  4. Klik sel tertentu yang menampilkan error 504 untuk melihat detail selengkapnya dan melihat log tentang error ini seperti yang ditunjukkan di bawah:

    Contoh yang menampilkan Error 504

  5. Di panel sebelah kanan, klik Lihat log.

    Dari jendela Traffic Logs, catat detail berikut untuk beberapa error 504:

    • Permintaan: Ini memberikan metode permintaan dan URI yang digunakan untuk melakukan panggilan
    • Waktu Respons: Ini memberikan total waktu yang berlalu untuk permintaan.

    Dalam contoh di atas,

    • Permintaan menunjuk ke GET /test-timeout.
    • Waktu Respons adalah 57.001 detik. Hal ini menunjukkan bahwa Router telah mencapai waktu tunggu sebelum Message Processor dapat merespons kembali karena nilainya sangat mendekati waktu tunggu I/O default yang ditetapkan di Router, yaitu 57 detik.

    Anda juga bisa mendapatkan semua log menggunakan API Monitoring GET logs. Misalnya, dengan membuat kueri log untuk org, env, timeRange, dan status, Anda dapat mendownload semua log untuk transaksi yang waktu tunggu kliennya habis.

    Karena API Monitoring menyetel proxy ke - (tidak disetel) untuk error 504 ini, Anda dapat menggunakan API (Logs API) untuk mendapatkan proxy terkait untuk host virtual dan jalur.

    For example :

    curl "https://apimonitoring.enterprise.apigee.com/logs/apiproxies?org=ORG&env=ENV&select=https
    
  6. Tinjau Waktu Respons untuk mengetahui error 504 tambahan dan periksa untuk melihat apakah Waktu Respons konsisten (nilai waktu tunggu I/O yang ditetapkan di Router adalah 57 detik) di semua error 504.

Log akses NGINX

Untuk mendiagnosis error menggunakan log akses NGINX:

  1. Periksa log akses NGINX:
    /opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log
  2. Cari untuk melihat apakah ada 504 Error selama durasi tertentu (jika masalah terjadi di masa lalu) atau apakah ada permintaan yang masih gagal dengan 504.
  3. Perhatikan informasi berikut untuk beberapa error 504:
    • Waktu Respons
    • URI Permintaan

    Dalam contoh ini, kita melihat informasi berikut:

    • Waktu Permintaan: 57.001 detik. Hal ini menunjukkan bahwa Router mengalami waktu tunggu habis setelah 57.001 detik.

    • Permintaan: GET /test-timeout
    • Alias Host: myorg-test.apigee.net
  4. Periksa apakah Waktu Permintaan sama dengan waktu tunggu I/O yang dikonfigurasi di Router/host virtual. Jika ya, berarti Router mengalami waktu tunggu habis sebelum Message Processor tidak merespons dalam periode ini.

    Dalam entri NGINX Access Log contoh yang ditampilkan di atas, Request Time sebesar 57.001 detik sangat dekat dengan waktu tunggu I/O default yang ditetapkan di Router. Hal ini dengan jelas menunjukkan bahwa Router mengalami waktu tunggu habis sebelum Message Processor dapat merespons kembali.

  5. Tentukan Proxy API yang permintaannya dibuat dengan menggunakan jalur dasar di kolom Request .

Penyebab: Konfigurasi waktu tunggu yang salah di Router

Diagnosis

  1. Tentukan apakah error 504 disebabkan karena Router telah mengalami waktu tunggu habis sebelum Message Processor dapat merespons kembali. Anda dapat melakukannya dengan memeriksa apakah Waktu Respons di Pemantauan API/Waktu Permintaan di Router (kedua kolom menampilkan informasi yang sama, tetapi disebut dengan nama yang berbeda) sama dengan waktu tunggu I/O yang dikonfigurasi di Router/host virtual dan kolom Sumber Kesalahan, Proxy Kesalahan, dan Kode Kesalahan ditetapkan ke - menggunakan Pemantauan API atau log Akses NGINX seperti yang dijelaskan dalam Langkah-langkah diagnosis umum.
  2. Periksa apakah nilai waktu tunggu I/O yang dikonfigurasi di Router atau host virtual tertentu lebih rendah dibandingkan dengan yang dikonfigurasi di Message Processor atau API Proxy tertentu.

    Anda dapat melakukannya dengan mengikuti langkah-langkah di bagian ini.

Memverifikasi waktu tunggu I/O di host virtual

UI Edge

Untuk memverifikasi waktu tunggu host virtual menggunakan UI Edge, lakukan hal berikut:

  1. Login ke UI Edge.
  2. Buka Admin > Virtual Host.
  3. Pilih Lingkungan tertentu tempat Anda mengalami masalah waktu tunggu.
  4. Pilih host virtual tertentu yang nilai waktu tunggu I/O-nya ingin Anda verifikasi.
  5. Di bagian Properties, lihat nilai Proxy Read Timeout dalam detik.

    Pada contoh di atas, Proxy Read Timeout dikonfigurasi dengan nilai 120. Artinya, waktu tunggu I/O yang dikonfigurasi di host virtual ini adalah 120 detik.

API pengelolaan

Anda juga dapat memverifikasi Proxy Read Timeout menggunakan API pengelolaan berikut:

  1. Jalankan Get virtual host API untuk mendapatkan konfigurasi virtualhost seperti yang ditunjukkan di bawah:

    Pengguna Cloud Publik

    curl -v -X GET https://api.enterprise.apigee.com/v1/organizations/ORGANIZATION_NAME/environments/ENVIRONMENT_NAME/virtualhosts/VIRTUALHOST_NAME -u USERNAME
    

    Pengguna Private Cloud

    curl -v -X GET http://MANAGEMENT_SERVER_HOST:PORT#/v1/organizations/ORGANIZATION_NAME/environments/v/virtualhosts/VIRTUALHOST_NAME -u USERNAME
    

    Dengan:

    ORGANIZATION_NAME adalah nama organisasi

    ENVIRONMENT_NAME adalah nama lingkungan

    VIRTUALHOST_NAME adalah nama host virtual

  2. Periksa nilai yang dikonfigurasi untuk properti proxy_read_timeout

    Contoh Definisi Host Virtual

    {
      "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
    }

    Pada contoh di atas, proxy_read_timeout dikonfigurasi dengan nilai 120. Artinya, waktu tunggu I/O yang dikonfigurasi di host virtual ini adalah 120 detik.

Memverifikasi waktu tunggu I/O pada file router.properties

  1. Login ke komputer Router.
  2. Telusuri properti proxy_read_timeout di direktori /opt/nginx/conf.d dan periksa apakah properti tersebut telah ditetapkan dengan nilai baru sebagai berikut:
    grep -ri "proxy_read_timeout" /opt/nginx/conf.d
    
  3. Periksa nilai yang ditetapkan untuk properti proxy_read_timeout dalam file konfigurasi host virtual tertentu.

    Contoh hasil dari perintah grep

    /opt/nginx/conf.d/0-default.conf:proxy_read_timeout 57;
    /opt/nginx/conf.d/0-edge-health.conf:proxy_read_timeout 1s;

    Dalam contoh output di atas, perhatikan bahwa properti proxy_read_timeout telah ditetapkan dengan nilai baru 57 di 0-default.conf, yang merupakan file konfigurasi untuk host virtual default. Hal ini menunjukkan bahwa waktu tunggu I/O dikonfigurasi menjadi 57 detik di Router untuk host virtual default. Jika Anda memiliki beberapa host virtual, Anda akan melihat informasi ini untuk setiap host virtual. Dapatkan nilai proxy_read_timeout untuk host virtual tertentu yang Anda gunakan untuk membuat panggilan API yang gagal dengan error 504.

Memverifikasi waktu tunggu I/O di proxy API

Anda dapat melihat waktu tunggu I/O di bagian berikut:

  • Endpoint target proxy API
  • Kebijakan ServiceCallout proxy API
Melihat waktu tunggu I/O di endpoint target proxy API
  1. Di UI Edge, pilih proxy API tertentu yang ingin Anda lihat nilai waktu tunggu I/O-nya.
  2. Pilih endpoint target spesifik yang ingin Anda periksa.
  3. Lihat properti io.timeout.millis dengan nilai yang sesuai di bagian elemen <HTTPTargetConnection> dalam konfigurasi TargetEndpoint.

    Misalnya, waktu tunggu I/O dalam kode berikut ditetapkan ke 120 detik:

    <Properties>
      <Property name="io.timeout.millis">120000</Property>
    </Properties>
Melihat waktu tunggu I/O di kebijakan ServiceCallout proxy API
  1. Di UI Edge, pilih proxy API tertentu tempat Anda ingin melihat nilai waktu tunggu I/O baru untuk kebijakan ServiceCallout.
  2. Pilih kebijakan ServiceCallout tertentu yang ingin Anda periksa.
  3. Lihat elemen <Timeout> dengan nilai yang sesuai dalam konfigurasi <ServiceCallout>.

    Misalnya, waktu tunggu I/O dari kode berikut adalah 120 detik:

    <Timeout>120000</Timeout>

Memverifikasi waktu tunggu I/O di Pemroses Pesan

  1. Login ke komputer Message Processor.
  2. Telusuri properti HTTPTransport.io.timeout.millis di direktori /opt/apigee/edge-message-processor/conf menggunakan perintah berikut:

    grep -ri "HTTPTransport.io.timeout.millis" /opt/apigee/edge-message-processor/conf
    

    Contoh output

    /opt/apigee/edge-message-processor/conf/http.properties:HTTPTransport.io.timeout.millis=55000
  3. Dalam contoh output di atas, perhatikan bahwa properti HTTPTransport.io.timeout.millis telah ditetapkan dengan nilai 55000 di http.properties. Hal ini menunjukkan bahwa waktu tunggu I/O berhasil dikonfigurasi menjadi 55 detik di Pemroses Pesan.

Setelah menentukan waktu tunggu yang dikonfigurasi di Router dan Message Processor, verifikasi apakah Router/host virtual telah dikonfigurasi dengan nilai waktu tunggu yang lebih rendah dibandingkan dengan yang ada di Message Processor/proxy API.

Catat nilai yang ditetapkan pada semua lapisan seperti yang ditunjukkan dalam tabel di bawah:

Waktu tunggu di Router (detik) Waktu tunggu di host virtual (detik) Waktu tunggu di Message Processor (detik) Waktu tunggu di proxy API (detik)
57 - 55 120

Dalam contoh ini,

  • Nilai default 57 detik dikonfigurasi di Router.
  • Nilai waktu tunggu tidak disetel di host virtual tertentu. Artinya, Router akan menggunakan nilai default 57 detik yang dikonfigurasi di Router itu sendiri.
  • Di Message Processor, nilai default 55 detik dikonfigurasi.
  • Namun, pada Proxy API tertentu, nilai 120 detik dikonfigurasi.

Perhatikan bahwa nilai waktu tunggu yang lebih tinggi hanya dikonfigurasi di proxy API, tetapi Router masih dikonfigurasi dengan 57 detik. Oleh karena itu, Router akan mengalami waktu tunggu habis pada 57 detik saat Message Processor/backend masih memproses permintaan Anda. Hal ini menyebabkan Router merespons kembali dengan error 504 Gateway Timeout ke aplikasi klien.

Resolusi

Lakukan langkah-langkah berikut untuk mengonfigurasi waktu tunggu I/O yang tepat di Router dan Message Processor untuk mengatasi masalah ini.

  1. Lihat Praktik terbaik untuk mengonfigurasi waktu tunggu I/O untuk memahami nilai waktu tunggu yang harus ditetapkan pada berbagai komponen yang terlibat dalam alur permintaan API melalui Apigee Edge.
  2. Dalam contoh di atas, jika Anda memastikan bahwa nilai waktu tunggu yang lebih tinggi perlu ditetapkan karena server backend memerlukan waktu yang lebih lama, dan Anda telah meningkatkan nilai waktu tunggu Message Processor menjadi 120 detik, tetapkan nilai waktu tunggu yang lebih tinggi misalnya: 123 seconds di Router. Untuk menghindari dampak pada semua Proxy API karena nilai waktu tunggu yang baru, tetapkan nilai 123 seconds hanya pada host virtual tertentu yang digunakan dalam Proxy API tertentu.
  3. Ikuti petunjuk di Mengonfigurasi waktu tunggu I/O di Router untuk menetapkan waktu tunggu di host virtual.