Gateway Buruk 502

Anda sedang melihat dokumentasi Apigee Edge.
Buka Dokumentasi Apigee X.
info

ini.

Gejala

Aplikasi klien mendapatkan kode status HTTP 502 dengan pesan "Gateway Buruk" sebagai respons untuk panggilan API.

Kode status HTTP 502 berarti bahwa klien tidak menerima respons yang valid dari server backend yang harus 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 sesuatu 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 melewati Apigee Edge:

Cause Deskripsi Petunjuk Pemecahan Masalah yang Berlaku
Tidak ada anggota parlemen yang tersedia di kolam renang Error ini diamati jika semua anggota parlemen di kumpulan tidak tersedia, yaitu mereka sedang tidak aktif atau sibuk sehingga tidak merespons. Pengguna Edge Private Cloud
Konfigurasi SSL salah antara Router dan MP Error ini diamati jika root certificate klien yang ditandatangani CA 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 kolam renang

Error ini akan terjadi jika Router menemukan bahwa semua Pemroses 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, komponen tersebut mungkin disiapkan di lebih dari satu region/pusat data. Di setiap region/pusat data akan ada dua atau lebih Router dan Pemroses Pesan yang dikonfigurasi.

Diagnosis

  1. Tentukan 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 berada di region yang berbeda.
  2. Anda akan melihat error berikut dalam 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

  1. Memeriksa apakah Pemroses Pesan di region/pusat data tertentu sudah aktif dan berjalan.
  2. Jika semua Prosesor Pesan tidak aktif, mulai ulang Prosesor Pesan tersebut.

Resolusi

Mulai ulang semua Pemroses 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

Error ini akan terjadi jika Router menemukan bahwa semua Pemroses Pesan di region/pusat data tertentu tidak tersedia karena semua sedang sibuk memproses permintaan yang sedang berlangsung.

  1. Memeriksa apakah Pemroses Pesan di region/pusat data tertentu sudah aktif dan berjalan.
  2. Jika semua Pemroses Pesan sudah aktif dan aktif, periksa apakah Pemroses Pesan mengalami penggunaan CPU yang tinggi, lalu buat tiga thread dump setiap 30 detik menggunakan perintah berikut:
    <JAVA_HOME>/bin/jstack -l <pid> > <filename>
    
  3. Jika Pemroses Pesan mengalami penggunaan memori tinggi, buat heap dump menggunakan perintah berikut:
    sudo -u apigee /bin/jmap -dump:live,format=b,file= 
    
  4. Mulai ulang Pemroses Pesan menggunakan perintah di bawah ini. Tindakan ini akan menurunkan CPU dan Memori:
    /opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
    
  5. Pantau panggilan API untuk mengonfirmasi apakah masalah masih ada.
  6. Hubungi Dukungan Apigee dan berikan thread dump, heap dump, dan log Pemroses Pesan (/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

  1. Periksa log Akses NGINX (/opt/apigee/var/log/edge-router/nginx/ORG-Env._access_log). Anda akan melihat respons 502 seperti yang ditunjukkan di bawah ini:
        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	-
    
  2. Periksa Log error NGINX (/opt/apigee/var/log/edge-router/nginx/ORG-Env._error_log). Anda akan melihat error seperti ini:
    	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>"
    
  3. Ini menunjukkan handshake SSL gagal antara Router dan Pemroses Pesan.
  4. Jika Anda perhatikan dengan cermat dalam pesan {i>error<i} pada langkah #1 dan #2, porta # yang digunakan untuk berkomunikasi dengan Pemroses Pesan adalah 8998 yang merupakan porta tidak aman tetapi protokolnya adalah SSL (https). Biasanya port aman # yang digunakan adalah 8443. Karena porta yang tidak aman digunakan untuk komunikasi aman, hal ini akan menyebabkan kegagalan handshake SSL.
  5. Hal ini biasanya dapat terjadi jika Anda melewatkan langkah apa pun atau menetapkan nilai yang salah saat mengonfigurasi SSL antara Router dan Pemroses Pesan. Lihat langkah-langkah yang diuraikan di sini.
    Misalnya, error ini dapat terjadi jika
    1. 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
      
    2. 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# dari Prosesor Pesan akan tetap 8998 dalam file konfigurasi.

Resolusi

  1. Pastikan semua langkah yang diberikan di Mengonfigurasi TLS antara Router dan Pemroses Pesan diikuti dengan benar.
  2. Jika masalah berlanjut, buka Mengumpulkan Informasi Diagnostik.

Penyebab: Error dari server backend

Diagnosis

  1. Jika error tersebut selalu terjadi, Anda dapat merekam aktivitas UI untuk permintaan yang gagal. Pilih permintaan yang gagal dan lihat berbagai fase dalam rekaman aktivitas. Jika Anda mendapati bahwa Anda mendapatkan "502 Bad Gateway" dari server backend itu sendiri, masalahnya mungkin karena beberapa kegagalan mungkin terjadi di server backend.
    Rekaman aktivitas yang menunjukkan 502 Gateway Buruk yang berasal dari server backend
  2. Jika masalahnya hanya sesekali dan Anda tidak dapat merekam aktivitas,
    1. Jika Anda pengguna Public Cloud, gunakan Pemantauan API dan periksa detail tentang error 502.
      1. Jika Anda mengamati Kode Kesalahan adalah messaging.adaptors.http.flow.ErrorResponseCode dan Sumber Kesalahan adalah target, maka error disebabkan oleh server backend.
    2. 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
      
      1. Jika Anda mengamati Kode Kesalahan adalah messaging.adaptors.http.flow.ErrorResponseCode dan Sumber Kesalahan adalah target, maka error disebabkan oleh server backend.

Resolusi

  1. Bekerja samalah dengan tim server backend Anda untuk memperbaiki masalah ini di backend.

Kumpulkan Informasi Diagnostik

  1. 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).
  2. Log Pemroses Pesan
    (/opt/apigee/var/log/edge-message-processor/logs/system.log).