Anda sedang melihat dokumentasi Apigee Edge.
Buka dokumentasi
Apigee X. info
Gejala
Aplikasi klien mendapatkan status respons HTTP 503 dengan pesan
Service Unavailable setelah panggilan proxy API.
Pesan error
Aplikasi klien mendapatkan kode respons berikut:
HTTP/1.1 503 Service Unavailable
Selain itu, Anda mungkin melihat pesan error berikut:
{
"fault": {
"faultstring": "The Service is temporarily unavailable",
"detail": {
"errorcode": "messaging.adaptors.http.flow.ServiceUnavailable"
}
}
}Kemungkinan Penyebab
| Penyebab | Deskripsi | Petunjuk pemecahan masalah yang berlaku untuk |
|---|---|---|
| Server target menutup koneksi sebelum waktunya | Server target mengakhiri koneksi sebelum waktunya saat Message Processor masih mengirim payload permintaan. | Pengguna Edge Public dan Private Cloud |
Langkah-langkah diagnosis umum
Menentukan ID Pesan dari permintaan yang gagal
Alat rekaman aktivitas
Untuk menentukan ID pesan permintaan yang gagal menggunakan alat Trace:
- Jika masalah masih aktif, aktifkan sesi rekaman aktivitas untuk API yang terpengaruh.
- Lakukan panggilan API dan reproduksi masalah -
503 Service Unavailabledengan kode errormessaging.adaptors.http.flow.ServiceUnavailable. - Pilih salah satu permintaan yang gagal.
- Buka fase AX, dan tentukan ID pesan
(
X-Apigee.Message-ID) permintaan dengan men-scroll ke bawah di bagian Detail Fase seperti yang ditunjukkan pada gambar berikut.
Log akses NGINX
Untuk menentukan ID pesan permintaan yang gagal menggunakan log akses NGINX:
Anda juga dapat merujuk ke log Akses NGINX untuk menentukan ID pesan untuk error 503.
Hal ini sangat berguna jika masalah telah terjadi di masa lalu atau jika masalah bersifat tidak tetap
dan Anda tidak dapat merekam rekaman aktivitas di UI. Gunakan langkah-langkah berikut untuk menentukan informasi ini dari log akses NGINX:
- Periksa log akses NGINX: (
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log) - Cari untuk melihat apakah ada
503Error untuk proxy API tertentu selama durasi tertentu (jika masalah terjadi di masa lalu) atau apakah ada permintaan yang masih gagal dengan503. - Jika ada Error
503dengan X-Apigee-fault-code messaging.adaptors.http.flow.ServiceUnavailable, catat ID pesan untuk satu atau beberapa permintaan tersebut seperti yang ditunjukkan dalam contoh berikut:Contoh Entri yang menunjukkan Error
503
Penyebab: Server target menutup koneksi sebelum waktunya
Diagnosis
- Jika Anda adalah pengguna Public Cloud atau Private Cloud:
- Gunakan alat Perekaman Aktivitas (seperti yang dijelaskan dalam Langkah-langkah diagnosis umum)
dan pastikan Anda telah menetapkan kedua hal berikut di panel Data Analytics Direkam:
- X-Apigee.fault-code:
messaging.adaptors.http.flow.ServiceUnavailable - X-Apigee.fault-source:
target

- X-Apigee.fault-code:
- Gunakan alat Trace (seperti yang dijelaskan dalam Langkah-langkah diagnosis umum) dan verifikasi bahwa Anda telah menetapkan kedua hal berikut di panel Error segera setelah properti state
TARGET_REQ_FLOW:- error.class:
com.apigee.errors.http.server.ServiceUnavailableException - error.cause:
Broken pipe

- error.class:
- Buka Menggunakan tcpdump untuk penyelidikan lebih lanjut.
- Gunakan alat Perekaman Aktivitas (seperti yang dijelaskan dalam Langkah-langkah diagnosis umum)
dan pastikan Anda telah menetapkan kedua hal berikut di panel Data Analytics Direkam:
- Jika Anda adalah pengguna Private Cloud:
- Tentukan ID pesan permintaan yang gagal.
- Telusuri ID pesan di log Message Processor
(
/opt/apigee/var/log/edge-message-processor/logs/system.log). - Anda akan melihat salah satu pengecualian berikut:
Pengecualian #1: java.io.IOException: Broken pipe occurred while writing to channel ClientOutputChannel
2021-01-30 15:31:14,693 org:anotherorg env:prod api:myproxy rev:1 messageid:myorg-opdk-test-1-30312-13747-1 NIOThread@1 INFO HTTP.SERVICE - ExceptionHandler.handleException() : Exception java.io.IOException: Broken pipe occurred while writing to channel ClientOutputChannel(ClientChannel[Connected: Remote:IP:PORT Local:0.0.0.0:42828]@8380 useCount=1 bytesRead=0 bytesWritten=76295 age=2012ms lastIO=2ms isOpen=false)
atau
Exception #2: onExceptionWrite exception: {}
java.io.IOException: Broken pipe2021-01-31 15:29:37,438 org:anotherorg env:prod api:503-test rev:1 messageid:leonyoung-opdk-test-1-18604-13978-1 NIOThread@0 ERROR HTTP.CLIENT - HTTPClient$Context$2.onException() : ClientChannel[Connected: Remote:IP:PORT Local:0.0.0.0:57880]@8569 useCount=1 bytesRead=0 bytesWritten=76295 age=3180ms lastIO=2 ms isOpen=false.onExceptionWrite exception: {} java.io.IOException: Broken pipe
- Kedua pengecualian ini menunjukkan bahwa saat Pemroses Pesan masih menulis payload permintaan ke server backend, koneksi ditutup sebelum waktunya oleh server backend. Oleh karena itu, Pemroses Pesan akan menampilkan pengecualian
java.io.IOException: Broken pipe. Remote:IP:PORTmenunjukkan alamat IP dan nomor port server backend yang telah diselesaikan.- Atribut
bytesWritten=76295dalam pesan error di atas menunjukkan bahwa Message Processor telah mengirimkan payload76295byte ke server backend saat koneksi ditutup sebelum waktunya. - Atribut
bytesRead=0menunjukkan bahwa Message Processor belum menerima data (respons) apa pun dari server backend. - Untuk menyelidiki masalah ini lebih lanjut, kumpulkan
tcpdumpbaik di server backend atau Message Processor dan analisis seperti yang dijelaskan di bawah.
Menggunakan tcpdump
-
Ambil
tcpdumpdi server backend atau Message Processor dengan perintah berikut:Perintah untuk mengumpulkan
tcpdumpdi server backend:tcpdump -i any -s 0 host MP_IP_ADDRESS -w FILE_NAME
Perintah untuk mengumpulkan
tcpdumpdi Pemroses Pesan:tcpdump -i any -s 0 host BACKEND_HOSTNAME -w FILE_NAME
- Analisis
tcpdumpyang diambil:Contoh output tcpdump (dikumpulkan di Message Processor):

Dalam
tcpdumpdi atas, Anda dapat melihat hal berikut:- Dalam paket
4, Message Processor mengirimkan permintaanPOSTke server backend. - Dalam paket
5,8,9,10,11, Message Processor terus mengirimkan payload permintaan ke server backend. - Dalam paket
6dan7,server backend merespons denganACKuntuk sebagian payload permintaan yang diterima dari Message Processor. - Namun, dalam paket
12, alih-alih merespons denganACKuntuk paket data aplikasi yang diterima dan selanjutnya merespons dengan payload respons, server backend malah merespons denganFIN ACKyang memulai penutupan koneksi. - Hal ini jelas menunjukkan bahwa server backend menutup koneksi sebelum waktunya saat Pemroses Pesan masih mengirimkan payload permintaan.
- Hal ini menyebabkan Pemroses Pesan mencatat error
IOException: Broken Pipedan menampilkan503ke klien
- Dalam paket
Resolusi
- Bekerjasamalah dengan tim aplikasi dan jaringan Anda untuk menganalisis dan memperbaiki masalah terputusnya koneksi secara prematur di sisi server backend.
- Pastikan aplikasi server backend tidak mengalami waktu tunggu habis atau mereset koneksi sebelum menerima seluruh payload permintaan.
- Jika Anda memiliki perangkat atau lapisan jaringan perantara antara Apigee dan server backend, pastikan perangkat atau lapisan tersebut tidak mengalami waktu tunggu habis sebelum seluruh payload permintaan diterima.
Jika masalah masih berlanjut, buka Informasi diagnostik yang harus dikumpulkan.
Harus mengumpulkan informasi diagnostik
Jika masalah berlanjut bahkan setelah mengikuti petunjuk di atas, kumpulkan informasi diagnostik berikut, lalu hubungi Dukungan Apigee Edge:
Jika Anda adalah pengguna Cloud Publik, berikan informasi berikut:
- Nama organisasi
- Nama lingkungan
- Nama Proxy API
- Selesaikan perintah
curluntuk mereproduksi error503 - File rekaman aktivitas yang berisi permintaan dengan error
503 Service Unavailable - Jika error
503tidak terjadi saat ini, berikan jangka waktu dengan informasi zona waktu saat error503terjadi di masa lalu.
Jika Anda adalah pengguna Private Cloud, berikan informasi berikut:
- Pesan error lengkap yang diamati untuk permintaan yang gagal
- Nama Organisasi, Lingkungan, dan Proxy API yang Anda amati
503errornya - Paket Proxy API
- File rekaman aktivitas yang berisi permintaan dengan error
503 Service Unavailable - Log akses NGINX
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log - Log Message Processor
/opt/apigee/var/log/edge-message-processor/logs/system.log - Jangka waktu dengan informasi zona waktu saat terjadi error
503 Tcpdumpsyang dikumpulkan di Pemroses Pesan dan server backend saat terjadi error