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:
- Buka halaman Analyze > API Monitoring > Investigate.
- Filter error
5xx, lalu pilih jangka waktu. - Petakan Kode Status terhadap Waktu.
-
Klik sel tertentu yang menampilkan error
504untuk melihat detail selengkapnya dan melihat log tentang error ini seperti yang ditunjukkan di bawah:Contoh yang menampilkan Error 504

- 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.001detik. 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, danstatus, Anda dapat mendownload semua log untuk transaksi yang waktu tunggu kliennya habis.Karena API Monitoring menyetel proxy ke
-(tidak disetel) untuk error504ini, 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
- Tinjau Waktu Respons untuk mengetahui error
504tambahan dan periksa untuk melihat apakah Waktu Respons konsisten (nilai waktu tunggu I/O yang ditetapkan di Router adalah 57 detik) di semua error504.
Log akses NGINX
Untuk mendiagnosis error menggunakan log akses NGINX:
- Periksa log akses NGINX:
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log - Cari untuk melihat apakah ada
504Error selama durasi tertentu (jika masalah terjadi di masa lalu) atau apakah ada permintaan yang masih gagal dengan504. - Perhatikan informasi berikut untuk beberapa error
504:- Waktu Respons
- URI Permintaan

Dalam contoh ini, kita melihat informasi berikut:
-
Waktu Permintaan:
57.001detik. Hal ini menunjukkan bahwa Router mengalami waktu tunggu habis setelah 57.001 detik. - Permintaan:
GET /test-timeout - Alias Host:
myorg-test.apigee.net
-
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.001detik 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. - Tentukan Proxy API yang permintaannya dibuat dengan menggunakan jalur dasar di kolom Request .
Penyebab: Konfigurasi waktu tunggu yang salah di Router
Diagnosis
- Tentukan apakah error
504disebabkan 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. -
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:
- Login ke UI Edge.
- Buka Admin > Virtual Host.
- Pilih Lingkungan tertentu tempat Anda mengalami masalah waktu tunggu.
- Pilih host virtual tertentu yang nilai waktu tunggu I/O-nya ingin Anda verifikasi.
- 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:
-
Jalankan Get virtual host API untuk mendapatkan konfigurasi
virtualhostseperti 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
-
Periksa nilai yang dikonfigurasi untuk properti
proxy_read_timeoutContoh 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_timeoutdikonfigurasi dengan nilai120. Artinya, waktu tunggu I/O yang dikonfigurasi di host virtual ini adalah 120 detik.
Memverifikasi waktu tunggu I/O pada file router.properties
- Login ke komputer Router.
- Telusuri properti
proxy_read_timeoutdi direktori/opt/nginx/conf.ddan periksa apakah properti tersebut telah ditetapkan dengan nilai baru sebagai berikut:grep -ri "proxy_read_timeout" /opt/nginx/conf.d
-
Periksa nilai yang ditetapkan untuk properti
proxy_read_timeoutdalam 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_timeouttelah ditetapkan dengan nilai baru57di0-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 nilaiproxy_read_timeoutuntuk host virtual tertentu yang Anda gunakan untuk membuat panggilan API yang gagal dengan error504.
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
- Di UI Edge, pilih proxy API tertentu yang ingin Anda lihat nilai waktu tunggu I/O-nya.
- Pilih endpoint target spesifik yang ingin Anda periksa.
- Lihat properti
io.timeout.millisdengan nilai yang sesuai di bagian elemen<HTTPTargetConnection>dalam konfigurasiTargetEndpoint.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
- Di UI Edge, pilih proxy API tertentu tempat Anda ingin melihat nilai waktu tunggu I/O baru untuk kebijakan ServiceCallout.
- Pilih kebijakan ServiceCallout tertentu yang ingin Anda periksa.
-
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
- Login ke komputer Message Processor.
-
Telusuri properti
HTTPTransport.io.timeout.millisdi direktori/opt/apigee/edge-message-processor/confmenggunakan 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
- Dalam contoh output di atas, perhatikan bahwa properti
HTTPTransport.io.timeout.millistelah ditetapkan dengan nilai55000dihttp.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.
- 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.
- 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 secondsdi Router. Untuk menghindari dampak pada semua Proxy API karena nilai waktu tunggu yang baru, tetapkan nilai123 secondshanya pada host virtual tertentu yang digunakan dalam Proxy API tertentu. - Ikuti petunjuk di Mengonfigurasi waktu tunggu I/O di Router untuk menetapkan waktu tunggu di host virtual.