Anda sedang melihat dokumentasi Apigee Edge.
Buka
dokumentasi Apigee X. info
Gejala
Aplikasi klien mendapatkan kode status HTTP 502 dengan pesan "Bad Gateway" sebagai respons untuk panggilan API.
Kode status HTTP 502 berarti klien tidak menerima respons yang valid dari server backend yang seharusnya benar-benar memenuhi permintaan.
Pesan Error
Aplikasi klien mendapatkan kode respons berikut:
HTTP/1.1 502 Bad Gateway
Selain itu, Anda mungkin melihat pesan error berikut:
<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>
Jika error berasal dari server backend, Anda mungkin melihat seperti ini. Pesan error dari backend sepenuhnya bergantung pada implementasinya.
<html> <head><title>502 Bad Gateway</title></head> <body bgcolor="white"> <center><h1>502 Bad Gateway</h1></center> </body> </html>
Kemungkinan Penyebab
Berikut adalah beberapa kemungkinan penyebab yang dapat menyebabkan error 502 Bad Gateway untuk API yang menggunakan Apigee Edge:
Cause | Deskripsi | Petunjuk Pemecahan Masalah Berlaku Untuk |
Tidak ada anggota parlemen yang tersedia di kumpulan anggota | Error ini teramati jika semua MP dalam kumpulan tidak tersedia, yaitu, mereka sedang tidak aktif atau sibuk sehingga tidak merespons. | Pengguna Edge Private Cloud |
Konfigurasi SSL yang salah antara Router dan MP | Error ini teramati jika root certificate yang ditandatangani CA klien tidak ada di truststore Router Edge. | Pengguna Edge Private Cloud |
Error dari server backend | Error ini akan diamati jika server backend gagal dan mengirim respons ini. | Pengguna Edge Public dan Private Cloud |
Penyebab: Tidak ada anggota parlemen yang tersedia di kumpulan anggota
Error ini akan terjadi jika Router menemukan bahwa semua Prosesor Pesan di region/pusat data tertentu tidak tersedia (misalnya, jika semuanya tidak aktif).
Apigee Edge dikonfigurasi sedemikian rupa sehingga traffic API yang masuk (permintaan) di region/pusat data tertentu selalu dirutekan dari Router ke Prosesor Pesan (MP) di region/pusat data yang sama. Dalam beberapa kasus, komponen Apigee Edge dapat disiapkan hanya di satu region/pusat data dan dalam beberapa kasus, mungkin disiapkan di lebih dari satu region/pusat data. Di setiap region/pusat data akan ada dua atau lebih Router dan Prosesor Pesan yang dikonfigurasi.
Diagnosis
- Menentukan region/pusat data tempat permintaan API gagal dengan error 502 Bad Gateway, jika ada lebih dari satu region/pusat data. Anda dapat menemukannya dengan mengidentifikasi region tempat pengguna mengamati error 502 atau dengan memeriksa log Akses NGINX di direktori
/opt/apigee/var/log/edge-router/nginx/
pada setiap Router yang berasal dari region berbeda. - Anda akan melihat error berikut di Log error NGINX (
/opt/apigee/var/log/edge-router/nginx/ORG-Env.
)_error_log
2019/06/24 15:26:00 [error] 4796#4796: *56357443 no live upstreams while connecting to upstream, client: <Router_IP_address>, server: <HostAlias>, request: "PUT <BasePath> HTTP/1.1", upstream: "http://<ListOfMP-IP_R-MP-Port>/<BasePath>", host: "<HostAlias>"
Skenario 1: Semua Pemroses Pesan tidak berfungsi
- Periksa apakah Pemroses Pesan di region/pusat data tertentu sudah aktif dan berjalan.
- Jika semua Prosesor Pesan tidak aktif, mulai ulang.
Resolusi
Mulai ulang semua Prosesor Pesan menggunakan perintah berikut:
/opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
Skenario 2: Semua Pemroses Pesan sibuk memproses permintaan yang sedang berlangsung
Kesalahan ini akan terjadi jika Router menemukan bahwa semua Prosesor Pesan di region/pusat data tertentu tidak tersedia karena semuanya sibuk memproses permintaan yang sedang berlangsung.
- Periksa apakah Pemroses Pesan di region/pusat data tertentu sudah aktif dan berjalan.
- Jika semua Prosesor Pesan aktif dan aktif, periksa apakah Prosesor Pesan mengalami penggunaan CPU yang tinggi, kemudian hasilkan tiga thread dump setiap 30 detik menggunakan perintah berikut:
<JAVA_HOME>/bin/jstack -l <pid> > <filename>
- Jika Prosesor Pesan mengalami penggunaan memori yang tinggi, buat heap dump menggunakan perintah berikut:
sudo -u apigee
/bin/jmap -dump:live,format=b,file= - Mulai ulang Prosesor Pesan menggunakan perintah di bawah. Tindakan ini akan menurunkan CPU dan Memori:
/opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
- Pantau panggilan API untuk mengonfirmasi apakah masalah masih ada.
- Hubungi Dukungan Apigee dan berikan thread dump, heap dump, serta log Message Processor (
/opt/apigee/var/log/edge-message-processor/logs/system.log
) untuk membantu menyelidiki penyebab tingginya penggunaan CPU/memori.
Penyebab: Konfigurasi SSL yang salah antara Router dan MP
Diagnosis
- Periksa log Akses NGINX (
/opt/apigee/var/log/edge-router/nginx/ORG-Env.
). Anda akan melihat respons 502 seperti yang ditunjukkan di bawah ini:_access_log
2019-07-23T12:13:42+03:00 sc-10-254-226-23 10.X.X.X:53634 10.X.X.X:8998 0.000 - - 502 502 189 344 GET <path> curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.27.1 zlib/1.2.3 libidn/1.18 libssh2/1.4.2 <host alias> mp-10-254-226-23-23706-8552529-1 10.129.107.101 - - -1 - - dc-2 gateway-2 green - gateway-2 dc-2 op pilot http -
- Periksa log Error NGINX (
/opt/apigee/var/log/edge-router/nginx/ORG-Env.
). Anda akan melihat error seperti ini:_error_log
2019/07/30 17:02:24 [error] 7691#7691: *11753633 peer closed connection in SSL handshake while SSL handshaking to upstream, client: X.X.X.X, server: <HostAlias>, request: "GET /no-target HTTP/1.1", upstream: "https://X.X.X.X:8998/no-target", host: "<HostAlias>"
- Ini menunjukkan kegagalan handshake SSL antara Router dan Prosesor Pesan.
- Jika Anda perhatikan dengan cermat pesan error di langkah #1 dan #2, port # yang digunakan untuk berkomunikasi dengan Prosesor Pesan adalah 8998 yang merupakan port tidak aman tetapi protokolnya adalah SSL (https). Biasanya port aman # yang digunakan adalah 8443. Karena porta yang tidak aman digunakan untuk komunikasi yang aman, hal ini menyebabkan kegagalan handshake SSL.
- Biasanya hal ini dapat terjadi jika Anda melewatkan langkah atau menetapkan nilai yang salah saat mengonfigurasi SSL antara Router dan Pemroses Pesan. Lihat langkah yang diuraikan di sini.
Misalnya, error ini dapat terjadi jika
- Port # ditetapkan sebagai 8998, bukan 8443 di
/opt/apigee/customer/application/message-processor.properties as shown below
conf/message-processor-communication.properties+local.http.port=8998
- File konfigurasi Router pada direktori
/opt/nginx/conf.d/*
tidak dihapus dan Router belum dimulai ulang saat melakukan konfigurasi SSL. Dalam skenario ini, Anda dapat melihat bahwa port# Prosesor Pesan akan tetap berupa 8998 dalam file konfigurasi.
- Port # ditetapkan sebagai 8998, bukan 8443 di
Resolusi
- Pastikan semua langkah yang diberikan dalam Mengonfigurasi TLS antara Router dan Pemroses Pesan diikuti dengan benar.
- Jika masalah berlanjut, buka Mengumpulkan Informasi Diagnostik.
Penyebab: Error dari server backend
Diagnosis
- Jika error terjadi setiap saat, Anda dapat menangkap rekaman aktivitas UI untuk permintaan yang gagal. Pilih permintaan yang gagal dan jelajahi berbagai fase dalam rekaman aktivitas. Jika Anda melihat “502 Bad Gateway” dari server backend itu sendiri, masalahnya mungkin karena beberapa kegagalan bisa terjadi pada server backend.
Pelacakan yang menampilkan Gateway Bad 502 yang berasal dari server backend
- Jika masalah hanya sesekali terjadi dan Anda tidak dapat merekam aktivitas,
- Jika Anda adalah pengguna Cloud Publik, Anda dapat menggunakan API Monitoring dan memeriksa detail tentang error 502.
- Jika Anda mengamati bahwa Kode Kesalahan adalah
messaging.adaptors.http.flow.ErrorResponseCode
dan Sumber Kesalahan adalahtarget
, error tersebut disebabkan oleh server backend.
- Jika Anda mengamati bahwa Kode Kesalahan adalah
- Jika Anda adalah pengguna Private Cloud, Anda dapat menganalisis log Akses NGINX
/opt/apigee/var/log/edge-router/nginx/ORG-Env.
_access_log.
Anda akan melihat entri untuk permintaan yang gagal sebagai berikut:
2017-02-24T14:42:12+00:00 rt-01 192.8.155.2:18118 192.168.84.166:8998 10.225 - - 502 502 440 0 GET /adv-eadlg-test/documents?type=doctype HTTP/1.1 rt-02efawae234-1234 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36 myorg-dev.apigee.net rt-02efawae234-1234 6 - false target messaging.adaptors.http.flow.ErrorResponseCode null/null - /organizations/myorg/environments/dev/apiproxies/api123
- Jika Anda mengamati bahwa Kode Kesalahan adalah
messaging.adaptors.http.flow.ErrorResponseCode
dan Sumber Kesalahan adalahtarget
, error tersebut disebabkan oleh server backend.
- Jika Anda mengamati bahwa Kode Kesalahan adalah
- Jika Anda adalah pengguna Cloud Publik, Anda dapat menggunakan API Monitoring dan memeriksa detail tentang error 502.
Resolusi
- Bekerja samalah dengan tim server backend Anda untuk memperbaiki masalah ini di backend.
Mengumpulkan Informasi Diagnostik
- Log Akses NGINX
(/opt/apigee/var/log/edge-router/nginx/ORG-Env.
)_access_log
dan Log error
(/opt/apigee/var/log/edge-router/nginx/ORG-Env.
)._error_log - Log Pemroses Pesan
(/opt/apigee/var/log/edge-message-processor/logs/system.log
).