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 yang menyebabkan waktu tunggu?
Jalur umum untuk permintaan API melalui platform Edge adalah Client > {i>Router<i} > Kirim pesan Prosesor > Server Backend seperti yang ditunjukkan pada gambar berikut:
Semua komponen dalam alur runtime Apigee Edge termasuk klien, Router, Pesan
Prosesor dan server backend disiapkan dengan nilai waktu tunggu {i>default<i} yang sesuai untuk
memastikan permintaan API tidak memerlukan waktu terlalu lama untuk diselesaikan. Jika ada komponen dalam
tidak mendapatkan respons dari komponen upstream dalam jangka waktu yang ditentukan di
konfigurasi waktu tunggu habis, maka komponen tertentu akan kehabisan
waktu tunggu dan biasanya akan mengembalikan
504 Gateway Timeout
.
Playbook ini menjelaskan cara memecahkan dan menyelesaikan error 504
yang terjadi saat
Waktu Router habis.
Waktu Tunggu di Router
Waktu tunggu default yang dikonfigurasi pada Router di Apigee Edge adalah 57 detik. Ini adalah jumlah maksimum waktu yang dapat dieksekusi proxy API sejak permintaan API diterima di Edge hingga respons akan dikirim kembali, termasuk respons backend dan semua kebijakan yang dijalankan. Waktu tunggu default dapat diganti di Router/host virtual seperti yang dijelaskan dalam Mengonfigurasi waktu tunggu I/O di Router.
Kemungkinan penyebab
Di Edge, penyebab umum untuk error 504 Gateway Timeout
yang disebabkan oleh
Waktu habis router adalah:
Penyebab | Deskripsi | Petunjuk pemecahan masalah berlaku untuk |
---|---|---|
Konfigurasi waktu tunggu di Router salah | 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 Analyze > Pemantauan API > Investigasi.
- Filter error
5xx
dan pilih jangka waktu. - Tempatkan Kode Status terhadap Waktu.
-
Klik sel tertentu yang menampilkan error
504
untuk melihat detail dan tampilan selengkapnya tentang error ini, seperti yang ditunjukkan di bawah ini:Contoh yang menampilkan Error 504
- Di panel sebelah kanan, klik View logs.
Dari jendela Log Traffic, perhatikan detail berikut untuk beberapa error
504
:- Permintaan: Fungsi ini menyediakan metode permintaan dan URI yang digunakan untuk melakukan panggilan
- Waktu Respons: Metrik ini memberikan total waktu yang berlalu untuk permintaan.
Pada contoh di atas,
- Permintaan mengarah ke
GET /test-timeout
. - Waktu Respons adalah
57.001
detik. Hal ini menunjukkan bahwa {i>Router<i} telah habis waktu sebelum Pemroses Pesan dapat merespons kembali karena nilainya sangat mendekati ke waktu tunggu I/O default yang disetel pada Router, yaitu 57 detik.
Anda juga bisa mendapatkan semua log dengan menggunakan API Monitoring API GET logs. Misalnya, dengan membuat kueri log untuk
org
,env
,timeRange
, danstatus
, Anda dapat mendownload semua log untuk transaksi yang waktu klien habis.Karena Pemantauan API menetapkan proxy ke
-
(not set) untuk504
ini Anda dapat menggunakan API (Logs API) guna mendapatkan proxy terkait untuk host dan jalur virtual.For example :
curl "https://apimonitoring.enterprise.apigee.com/logs/apiproxies?org=ORG&env=ENV&select=https
- Tinjau Waktu Respons untuk mengetahui error
504
tambahan, lalu periksa untuk melihat apakah Waktu Respons konsisten (nilai waktu tunggu I/O yang ditetapkan di Router yaitu 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
- Telusuri apakah ada Error
504
selama durasi tertentu atau tidak (jika masalah terjadi di masa lalu) atau jika 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.001
detik. Hal ini menunjukkan bahwa Waktu router habis setelah 57.001 detik. - Permintaan:
GET /test-timeout
- Alias Host:
myorg-test.apigee.net
-
Periksa untuk melihat apakah Waktu Permintaan sama dengan waktu tunggu I/O dikonfigurasikan pada {i>Router<i}/{i>host<i} virtual. Jika ya, maka itu berarti waktu Router habis sebelum Pemroses Pesan tidak merespons dalam periode ini.
Dalam contoh entri Log Akses NGINX yang ditampilkan di atas, Permintaan Waktu
57.001
detik sangat mendekati waktu tunggu I/O default yang disetel di {i>Router<i}. Ini jelas menunjukkan bahwa waktu Router habis sebelum Pesan Prosesor dapat merespons kembali. - Menentukan Proxy API yang digunakan untuk membuat permintaan dengan menggunakan jalur dasar di Request .
Penyebab: Konfigurasi waktu tunggu salah pada Router
Diagnosis
- Tentukan apakah error
504
disebabkan karena Waktu Router telah habis sebelum Pemroses Pesan dapat membalasnya. Anda dapat melakukannya dengan memeriksa apakah Waktu Respons di Pemantauan API/Waktu Permintaan di Router (kedua kolom merepresentasikan informasi yang sama,tetapi dipanggil dengan nama yang berbeda) sama dengan Waktu tunggu I/O yang dikonfigurasi di Router/host virtual dan kolom Fault Source, Fault Proxy dan Kode Kesalahan ditetapkan ke-
menggunakan Pemantauan API atau Akses NGINX log seperti yang dijelaskan dalam Langkah-langkah diagnosis umum. -
Periksa untuk melihat apakah nilai waktu tunggu I/O yang dikonfigurasi pada Router atau host virtual tertentu lebih rendah dibandingkan dengan yang dikonfigurasi pada Pemroses Pesan atau Proxy API tertentu.
Anda dapat melakukannya dengan mengikuti langkah-langkah di bagian ini.
Memverifikasi waktu tunggu I/O pada host virtual
UI Edge
Untuk memverifikasi waktu tunggu host virtual menggunakan UI Edge, lakukan hal berikut:
- Login ke UI Edge.
- Buka Admin > Host Virtual.
- Pilih Lingkungan tertentu tempat Anda mengalami masalah waktu tunggu.
- Pilih host virtual spesifik yang ingin Anda verifikasi nilai waktu tunggu I/O-nya.
- Di bagian Properti, lihat nilai Waktu Tunggu Baca Proxy dalam detik.
Dalam contoh di atas, Waktu Tunggu Baca Proxy dikonfigurasi dengan nilai
120
. Artinya, waktu tunggu I/O yang dikonfigurasi pada host virtual ini adalah 120 detik.
API pengelolaan
Anda juga dapat memverifikasi Proxy Read Timeout menggunakan API pengelolaan berikut:
-
Jalankan Dapatkan virtual host API untuk mendapatkan konfigurasi
virtualhost
seperti yang ditunjukkan di bawah ini: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 keterangan:
ORGANIZATION_NAME adalah nama organisasi
ENVIRONMENT_NAME adalah nama lingkungan
VIRTUALHOST_NAME adalah nama virtual host
-
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 nilai120
. Ini berarti bahwa waktu tunggu I/O yang dikonfigurasi pada {i>host<i} virtual ini adalah 120 detik.
Memverifikasi waktu tunggu I/O pada file router.properties
- Login ke mesin Router.
- Telusuri properti
proxy_read_timeout
di/opt/nginx/conf.d
dan periksa apakah direktori tersebut telah disetel dengan nilai baru sebagai berikut:grep -ri "proxy_read_timeout" /opt/nginx/conf.d
-
Periksa nilai yang ditetapkan untuk properti
proxy_read_timeout
di virtual spesifik file konfigurasi {i>host<i}.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;
Pada contoh output di atas, perhatikan bahwa properti
proxy_read_timeout
memiliki telah ditetapkan dengan nilai baru57
di0-default.conf
yang merupakan untuk {i>host<i} virtual {i>default<i}. Hal ini menunjukkan bahwa waktu waktu I/O habis dikonfigurasikan ke 57 detik di Router untuk host virtual default. Jika Anda memiliki beberapa {i>host<i} virtual, Anda akan melihat informasi ini untuk masing-masing {i>host<i}. Dapatkan nilaiproxy_read_timeout
untuk host virtual khusus yang Anda gunakan untuk membuat API panggilan yang gagal dengan504
error.
Memverifikasi waktu tunggu I/O di proxy API
Anda dapat melihat waktu tunggu I/O di bawah ini:
- Endpoint target proxy API
- Kebijakan ServiceInfo proxy API
Lihat waktu tunggu I/O di endpoint target proxy API
- Pada UI Edge, pilih proxy API tertentu tempat Anda ingin melihat I/O nilai waktu tunggu.
- Pilih endpoint target spesifik yang ingin Anda periksa.
- Lihat properti
io.timeout.millis
dengan nilai yang sesuai di bagian Elemen<HTTPTargetConnection>
diTargetEndpoint
konfigurasi Anda.Misalnya, waktu tunggu I/O dalam kode berikut disetel ke 120 detik:
<Properties> <Property name="io.timeout.millis">120000</Property> </Properties>
Lihat waktu tunggu I/O di kebijakan Service callout dari proxy API
- Pada UI Edge, pilih proxy API tertentu tempat Anda ingin melihat I/O baru nilai waktu tunggu untuk kebijakan Servicecallout.
- Pilih kebijakan ServiceInfo tertentu yang ingin Anda periksa.
-
Lihat elemen
<Timeout>
dengan nilai yang sesuai di bagian Konfigurasi<ServiceCallout>
.Misalnya, waktu tunggu I/O dari kode berikut adalah 120 detik:
<Timeout>120000</Timeout>
Memverifikasi waktu tunggu I/O pada Pemroses Pesan
- Masuk ke komputer Pemroses Pesan.
-
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
- Pada contoh {i>output<i} di atas, perhatikan bahwa properti
HTTPTransport.io.timeout.millis
telah ditetapkan dengan nilai55000
dihttp.properties
. Hal ini menunjukkan bahwa waktu tunggu I/O berhasil dikonfigurasi untuk 55 detik pada Pemroses Pesan.
Setelah menentukan waktu tunggu yang dikonfigurasi pada Router dan Pemroses Pesan, verifikasi {i>Router<i}/{i>host<i} virtual telah dikonfigurasi dengan nilai waktu tunggu yang lebih rendah dibandingkan dengan yang ada di Proxy API/Pemroses Pesan.
Catat nilai yang ditetapkan pada semua lapisan seperti yang ditunjukkan pada tabel di bawah ini:
Waktu tunggu pada Router (detik) | Waktu tunggu pada host virtual (detik) | Waktu tunggu pada Pemroses Pesan (detik) | Waktu tunggu pada proxy API (detik) |
---|---|---|---|
57 | - | 55 | 120 |
Dalam contoh ini,
- Nilai default 57 detik dikonfigurasi di Router.
- Nilai waktu tunggu tidak disetel pada host virtual tertentu. Artinya, kode tersebut akan menggunakan dengan nilai default 57 detik yang dikonfigurasi di {i>Router<i} itu sendiri.
- Di Pemroses Pesan, nilai default 55 detik dikonfigurasi.
- Namun, pada Proxy API tertentu, nilai 120 detik dikonfigurasi.
Perhatikan bahwa nilai waktu tunggu yang lebih tinggi hanya dikonfigurasi pada proxy API, tetapi Router tetap
dikonfigurasi dengan 57 detik. Oleh karena itu, {i>Router<i} akan kehabisan waktu
pada 57 detik saat pesan
Pemroses/backend masih memproses permintaan Anda. Hal ini menyebabkan {i>Router<i}
merespons kembali dengan
504 Gateway Timeout
error pada aplikasi klien.
Resolusi
Lakukan langkah-langkah berikut untuk mengonfigurasi waktu tunggu I/O yang tepat di Router dan Pesan Pemroses untuk mengatasi masalah ini.
- Rujuk ke Praktik terbaik untuk mengonfigurasi waktu tunggu I/O guna memahami nilai waktu tunggu 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 disetel
karena server backend memerlukan waktu yang lebih lama, dan Anda telah
nilai {i>Message Processor<i} ke 120 detik, lalu
tetapkan nilai waktu tunggu yang lebih tinggi
contoh:
123 seconds
di Router. Agar tidak memengaruhi semua Proxy API karena nilai waktu tunggu yang baru, tetapkan nilai123 seconds
hanya pada host virtual spesifik yang digunakan di Proxy API tertentu. - Ikuti petunjuk di Mengonfigurasi waktu tunggu I/O di Router untuk menyetel waktu tunggu di host virtual.