Anda sedang melihat dokumentasi Apigee Edge.
Buka dokumentasi
Apigee X. info
Gejala
Aplikasi klien menerima kode status HTTP 502 Bad Gateway dengan
kode ECONNRESET sebagai respons untuk panggilan API di Edge Microgateway.
Pesan error
Klien akan melihat kode respons berikut:
HTTP/1.1 502 Bad Gateway
Respons akan mencakup pesan error berikut:
{"message":"socket hang up","code":"ECONNRESET"}Kemungkinan penyebab
| Penyebab | Deskripsi | Petunjuk pemecahan masalah yang berlaku untuk |
|---|---|---|
| Waktu tunggu tetap aktif yang dikonfigurasi dengan tidak tepat | Waktu tunggu tetap aktif dikonfigurasi dengan tidak benar antara Edge Microgateway dan server target. | Pengguna Edge Public dan Private Cloud |
| Server target menutup koneksi sebelum waktunya | Server target menutup koneksi sebelum waktunya saat Edge Microgateway mengirim payload permintaan. | Pengguna Edge Public dan Private Cloud |
Langkah-langkah diagnosis umum
- Periksa log Edge Microgateway:
/var/tmp/edgemicro-`hostname`-*.log
- Cari untuk melihat apakah ada error
502dengan kodeECONNRESETselama durasi tertentu (jika masalah terjadi di masa lalu) atau apakah ada permintaan yang masih gagal dengan502.2021-06-23T03:52:24.110Z [error][0:8000][3][myorg][test] [emg_badtarget/flakey/hangup][][][6b089a00-d3d6-11eb-95aa-911f1ee6c684] [microgateway-core][][GET][502][socket hang up][ECONNRESET][]
- Jika Anda menyetel tingkat logging ke
warnatauinfo, akan ada pesan[warn]yang menyertakan nama host dan port server target di elemen kedua. Dalam contoh ini, nilainya adalahX.X.X.X:8080, dan nilai ini dapat digunakan nanti untuk merekamtcpdump.2021-06-23T03:52:24.109Z [warn][X.X.X.X:8080][3][myorg][test][emg_badtarget/flakey/hangup] [][][6b089a00-d3d6-11eb-95aa-911f1ee6c684][plugins-middleware] [targetRequest error][GET][][socket hang up][ECONNRESET][395]
- Kode error
[socket hang up][ECONNRESET]menunjukkan bahwa server target telah menutup koneksi dengan Edge Microgateway. Hal ini dapat ditelusuri di log untuk menentukan seberapa sering hal itu terjadi.
Penyebab: Waktu tunggu tetap aktif yang salah dikonfigurasi
Diagnosis
- Gunakan langkah-langkah di Langkah-langkah diagnosis umum dan verifikasi apakah Anda mendapatkan error
[socket hang up][ECONNRESET]. Jika ya, selidiki lebih lanjut dengan bantuan
tcpdumpseperti yang dijelaskan di bawah:
Menggunakan tcpdump
- Ambil
tcpdumpantara Edge Microgateway dan server backend di sistem operasi host Edge Microgateway dengan perintah berikut:tcpdump -i any -s 0 host TARGET_SERVER_HOSTNAME -w FILENAME.pcap
- Analisis
tcpdumpyang diambil:Contoh output tcpdump: ( lihat gambar yang lebih besar)
Dalam contoh
tcpdumpdi atas, Anda dapat melihat hal berikut:- Dalam paket 250288, klien mengirimkan permintaan
POST. - Dalam paket 250371, server merespons dengan
200 OK. - Dalam paket 250559, klien mengirim
ACK. - Dalam paket 250560, server mengirimkan pesan
Continuation. - Dalam paket 250561, klien mengirim
ACK. - Dalam paket 262436, server mengirimkan
FIN, ACKke klien yang memulai penutupan koneksi. Perhatikan bahwa ini kira-kira lima detik setelah paket sebelumnya (250561). - Dalam paket 262441, klien mengirimkan permintaan
POSTlain. Namun, hal ini gagal karena server telah memulai penutupan koneksi. Server merespons denganRSTdalam paket 262441.
Koneksi yang sama berhasil digunakan kembali setidaknya sekali dalam contoh ini, tetapi pada permintaan terakhir, server memulai penutupan koneksi setelah lima detik waktu tidak ada aktivitas, yang terjadi pada saat yang sama saat klien mengirim permintaan baru. Hal ini menunjukkan bahwa waktu tunggu tetap aktif server backend kemungkinan lebih pendek atau sama dengan nilai yang ditetapkan di klien. Untuk memvalidasi hal ini, lihat Membandingkan waktu tunggu tetap aktif di Edge Microgateway dan server backend.
- Dalam paket 250288, klien mengirimkan permintaan
Membandingkan waktu tunggu tetap aktif
- Edge Microgateway tidak memiliki properti waktu tunggu tetap aktif tertentu. Hal ini ditentukan oleh sistem operasi tempatnya berjalan. Contoh umumnya adalah Windows, Linux, dan container Docker.
- Mungkin saja setelan ini disesuaikan di sistem operasi. Hubungi administrator sistem Anda. Secara default, sistem operasi Linux memiliki waktu tunggu keep-alive default selama dua jam.
- Selanjutnya, periksa properti waktu tunggu tetap aktif yang dikonfigurasi di server backend Anda. Misalkan server backend Anda dikonfigurasi dengan nilai 10 detik.
- Jika Anda menentukan bahwa nilai waktu tunggu tetap aktif pada sistem operasi
lebih tinggi daripada nilai properti waktu tunggu tetap aktif di server backend seperti pada
contoh di atas, maka itulah penyebab terjadinya error
502.
Resolusi
Pastikan properti waktu tunggu tetap aktif selalu lebih rendah di sistem operasi tempat Edge Microgateway berjalan dibandingkan dengan yang ada di server backend.
- Tentukan nilai yang ditetapkan untuk waktu tunggu tetap aktif di server backend.
- Konfigurasi nilai yang sesuai untuk properti waktu tunggu tetap aktif di sistem operasi, sehingga properti waktu tunggu tetap aktif lebih rendah daripada nilai yang ditetapkan di server backend, menggunakan langkah-langkah yang berlaku untuk sistem operasi Anda.
Praktik Terbaik
Sangat disarankan agar komponen hilir selalu memiliki nilai batas waktu tetap aktif yang lebih kecil
daripada yang dikonfigurasi di server hulu untuk menghindari kondisi persaingan dan error 502 semacam ini. Setiap hop hilir harus lebih rendah daripada setiap hop hulu. Di Edge
Microgateway, sebaiknya gunakan panduan berikut:
Waktu tunggu tetap aktif pada aplikasi klien atau load balancer harus kurang dari waktu tunggu tetap aktif Edge Microgateway.
Untuk mengonfigurasi waktu tunggu tetap aktif di Edge Microgateway, tambahkan nilai
keep_alive_timeoutke file~/.edgemicro/org-env-config.yamlAnda.edgemicro: keep_alive_timeout: 65000
- Waktu tunggu aktif sistem operasi Edge Microgateway harus kurang dari waktu tunggu aktif server target.
- Jika Anda memiliki hop lain di depan atau di belakang Edge Microgateway, aturan yang sama harus diterapkan. Anda harus selalu menyerahkan tanggung jawab untuk menutup koneksi dengan upstream kepada klien downstream.
Penyebab: Server target menutup koneksi sebelum waktunya
Diagnosis
- Gunakan langkah-langkah yang dijelaskan dalam Langkah-langkah diagnosis umum dan verifikasi apakah Anda mendapatkan error
[socket hang up][ECONNRESET]. - Jika ya, selidiki lebih lanjut dengan bantuan
tcpdumpseperti yang dijelaskan di bawah.Pesan error
[targetRequest error][GET][][socket hang up][ECONNRESET]dalam contoh di atas menunjukkan bahwa error ini terjadi saat Edge Microgateway mengirim permintaan ke server backend (target). Artinya, Edge Microgateway mengirim permintaan API ke server backend dan sedang menunggu respons. Namun, server backend menghentikan koneksi secara tiba-tiba sebelum Edge Microgateway menerima respons. - Periksa log server backend Anda dan lihat apakah ada error atau informasi yang dapat menyebabkan server backend menghentikan koneksi secara tiba-tiba. Jika Anda menemukan error atau informasi, buka Penyelesaian dan perbaiki masalah dengan tepat di server backend Anda.
- Jika Anda tidak menemukan error atau informasi apa pun di server backend, kumpulkan output
tcpdumpdi server Edge Microgateway:tcpdump -i any -s 0 host TARGET_SERVER_HOSTNAME -w FILENAME.pcap
- Analisis
tcpdumpyang diambil:Contoh output tcpdump: ( lihat gambar yang lebih besar)
Dalam contoh
tcpdumpdi atas, Anda dapat melihat hal berikut:- Dalam paket 4, Edge Microgateway mengirim permintaan
GETke server target. - Dalam paket 5, server target merespons dengan
ACKuntuk mengonfirmasi permintaan. - Namun, dalam paket 6, alih-alih merespons dengan payload respons, server
target mengirimkan
FIN, ACKyang memulai penutupan koneksi. - Pada paket 7 dan seterusnya, koneksi ditutup secara bersama-sama. Karena koneksi ditutup sebelum respons dikirim, Edge Microgateway akan menampilkan error HTTP
502kembali ke klien. - Perhatikan bahwa stempel waktu paket 8,
2021-06-23T03:52:24.110Zsesuai dengan stempel waktu saat error dicatat dalam log Edge Microgateway. Stempel waktu dalam file log dan ditcpdumpsering kali dapat digunakan untuk mengorelasikan error dengan paket sebenarnya.
Resolusi
Perbaiki masalah di server backend dengan tepat.
Jika masalah berlanjut dan Anda memerlukan bantuan untuk memecahkan masalah
502 Bad Gateway Erroratau Anda menduga bahwa masalahnya ada di Edge Microgateway, buka Harus mengumpulkan informasi diagnostik.Harus mengumpulkan informasi diagnostik
Jika masalah berlanjut bahkan setelah mengikuti petunjuk di atas, kumpulkan informasi diagnostik berikut, lalu hubungi Dukungan Apigee Edge:
- File log: Folder defaultnya adalah
/var/tmp, tetapi dapat diganti di fileconfig.yamlutama (logging > dir parameter). Sebaiknya ubahlog > levelmenjadiinfosebelum memberikan file log kepada Dukungan Apigee. - File konfigurasi: Konfigurasi utama Edge Microgateway berada di
file YAML di folder Edge Microgateway default,
$HOME/.edgemicro. Ada file konfigurasi default bernamadefault.yaml, lalu satu untuk setiap lingkunganORG-ENV-config.yaml. Upload file ini secara penuh untuk org. dan env. yang terpengaruh.
- Dalam paket 4, Edge Microgateway mengirim permintaan