Kesalahan Server Internal 500

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

ini.

Video

Tonton video berikut untuk mempelajari lebih lanjut tentang cara mengatasi 500 Error Server Internal.

Video Deskripsi
Pengantar Menyediakan pengantar 500 Error Server Internal dan kemungkinan penyebabnya. Juga menunjukkan error Server Internal 500 real time beserta langkah-langkah untuk memecahkan masalah dan mengatasi error tersebut.
Menangani error Pemanggilan Layanan dan Mengekstrak Variabel Menunjukkan dua 500 Error Server Internal yang disebabkan oleh kebijakan Pemanggilan Layanan dan Ekstrak Variabel dan menunjukkan cara memecahkan masalah dan mengatasi error tersebut.
Menangani error kebijakan JavaScript Menampilkan 500 Internal Server Error yang disebabkan oleh kebijakan JavaScript dan langkah-langkahnya untuk memecahkan masalah dan mengatasi {i>error<i} ini.
Menangani kegagalan dari server backend Menampilkan contoh 500 Error Server Internal yang disebabkan oleh kegagalan di server backend dan menunjukkan langkah-langkahnya untuk mengatasi error.

Gejala

Aplikasi klien mendapatkan kode status HTTP 500 dengan pesan "Error Server Internal" sebagai respons untuk panggilan API. 500 Internal Server kesalahan dapat disebabkan oleh kesalahan selama menjalankan kebijakan apa pun dalam Edge atau oleh kesalahan di server target/backend.

Kode status HTTP 500 adalah respons error umum. Ini berarti bahwa server mengalami kondisi tak terduga yang menghalanginya untuk memenuhi permintaan. Kesalahan ini biasanya dikembalikan oleh server ketika tidak ada kode {i>error<i} lain yang cocok.

Pesan Error

Anda mungkin mendapatkan pesan error berikut:

HTTP/1.1 500 Internal Server Error

Dalam beberapa kasus, Anda mungkin melihat pesan error lain yang memiliki detail selengkapnya. Berikut contohnya pesan error:

{
   "fault":{
      "detail":{
         "errorcode":"steps.servicecallout.ExecutionFailed"
      },
      "faultstring":"Execution of ServiceCallout callWCSAuthServiceCallout failed. Reason: ResponseCode 400 is treated as error"
   }
}

Kemungkinan Penyebab

Error Server Internal 500 dapat ditampilkan karena sejumlah penyebab yang berbeda. Di Edge, penyebabnya dapat diklasifikasikan menjadi dua kategori utama berdasarkan tempat kesalahan terjadi:

Cause Detail Disediakan Langkah-Langkah Pemecahan Masalah
Error Eksekusi dalam Kebijakan Edge Kebijakan dalam proxy API mungkin gagal karena beberapa alasan. Pengguna Edge Private Cloud dan Public Cloud
Error di Server Backend Server backend mungkin gagal karena beberapa alasan. Pengguna Edge Private Cloud dan Public Cloud

Error Eksekusi dalam Kebijakan Edge

Kebijakan dalam proxy API mungkin gagal karena beberapa alasan. Bagian ini menjelaskan cara memecahkan masalah jika {i>500 Internal Server Error <i}terjadi saat kebijakan dijalankan.

Diagnosis

Langkah Diagnostik untuk Pengguna Cloud Pribadi dan Publik

Jika Anda memiliki sesi UI rekaman aktivitas untuk error tersebut, maka:

  1. Verifikasi bahwa error disebabkan oleh eksekusi kebijakan. Lihat Menentukan sumber masalah untuk mengetahui detailnya.
  2. Jika error terjadi selama eksekusi kebijakan, lanjutkan. Jika error disebabkan oleh server backend, buka Error in the Backend Server.
  3. Pilih permintaan API yang gagal dengan 500 Internal Server Error dalam trace.
  4. Periksa permintaan dan pilih kebijakan tertentu yang gagal atau alur yang dinamai "Error" yang segera mengikuti kebijakan yang gagal dalam rekaman aktivitas.
  5. Dapatkan detail selengkapnya tentang error dengan memeriksa "error" di bawah tab {i>Properties<i} atau konten Error.
  6. Dengan menggunakan detail yang telah Anda kumpulkan tentang error, coba tentukan penyebabnya.

Langkah Diagnostik Khusus Pengguna Private Cloud

Jika Anda tidak memiliki sesi UI rekaman aktivitas, maka:

  1. Verifikasi bahwa error terjadi selama eksekusi kebijakan. Lihat Menentukan sumber masalah untuk mengetahui detailnya.
  2. Jika error disebabkan oleh eksekusi kebijakan, lanjutkan. Jika error terjadi selama kebijakan jalankan, lanjutkan. Jika error disebabkan oleh server backend, buka Error di Server Backend.
  3. Gunakan log akses NGINX seperti yang dijelaskan dalam Menentukan sumber masalah untuk menentukan kebijakan yang gagal di proxy API dan juga id pesan permintaan unik
  4. Memeriksa log Pemroses Pesan (/opt/apigee/var/log/edge-message-processor/logs/system.log) dan telusuri ID pesan permintaan unik di dalamnya.
  5. Jika Anda menemukan ID pesan permintaan unik, lihat apakah Anda bisa mendapatkan informasi lebih lanjut tentang penyebab kegagalan.

Resolusi

Jika Anda telah menentukan penyebab masalah terkait kebijakan, coba perbaiki masalah dengan memperbaiki kebijakan dan men-deploy ulang proxy.

Contoh berikut menggambarkan cara menentukan penyebab dan penyelesaian untuk berbagai jenis-jenis masalah.

Jika Anda membutuhkan bantuan lebih lanjut dalam memecahkan masalah 500 Internal Server Error atau bahwa ini merupakan masalah pada Edge, hubungi Apigee Dukungan.

Contoh 1: Kegagalan dalam kebijakan Pemanggilan Layanan karena error di backend server

Jika panggilan ke server backend gagal dalam kebijakan Pemanggilan Layanan karena terjadi error seperti sebagai 4XX atau 5XX, maka akan diperlakukan sebagai 500 Internal Server Error.

  1. Berikut adalah contoh layanan backend yang gagal dengan error 404 dalam Service Kebijakan pemanggilan. Pesan error berikut dikirim ke pengguna akhir:
    {
    "fault":
         { "detail":
               { "errorcode":"steps.servicecallout.ExecutionFailed"
               },"faultstring":"Execution of ServiceCallout service_callout_v3_store_by_lat_lon
     failed. Reason: ResponseCode 404 is treated as error"
              }
         }
    }
    
  2. Sesi UI rekaman aktivitas berikut menampilkan 500 kode status yang disebabkan karena error pada Service Kebijakan pemanggilan:

  3. Dalam contoh ini, "error" mencantumkan alasan untuk kebijakan Info Layanan kegagalannya karena "ResponseCode 404 diperlakukan sebagai error". Kesalahan ini mungkin terjadi jika resource yang diakses melalui URL server backend di kebijakan Pemanggilan Layanan yang tersedia.
  4. Periksa ketersediaan resource di server backend. Fitur ini mungkin tidak tersedia untuk sementara/permanen atau mungkin telah dipindahkan ke lokasi lain.

Contoh 1 Resolusi

  1. Periksa ketersediaan resource di server backend. Fitur ini mungkin tidak tersedia untuk sementara/permanen atau mungkin telah dipindahkan ke lokasi lain.
  2. Perbaiki URL server backend di kebijakan Info Layanan agar mengarah ke URL yang valid dan yang ada resource Anda
  3. Jika sumber daya hanya tidak tersedia untuk sementara, coba buat permintaan API setelah tersedia.

Contoh 2: Kegagalan dalam Mengekstrak Kebijakan Variabel

Sekarang mari kita lihat contoh lain, di mana Error Server Internal 500 disebabkan oleh error di kebijakan Ekstrak Variabel dan lihat cara memecahkan dan mengatasi masalah.

  1. Rekaman aktivitas berikut di sesi UI menampilkan kode status 500 karena terjadi error dalam Ekstrak Kebijakan variabel:

  2. Pilih kebijakan Extract Variables yang gagal, scroll ke bawah dan lihat kotak "Error "Konten" untuk mengetahui detail selengkapnya:

  3. Konten Error menunjukkan bahwa variabel &quot;serviceCallout.oamCookieValidationResponse&quot; tidak tersedia di kebijakan Ekstrak Variabel. Seperti yang ditunjukkan oleh nama variabel, variabel tersebut harus berisi dari kebijakan Pemanggilan Layanan sebelumnya.
  4. Pilih kebijakan Pemanggilan Layanan di rekaman aktivitas dan Anda mungkin menemukan bahwa &quot;serviceCallout.oamCookieValidationResponse&quot; variabel belum ditetapkan. Ini menunjukkan bahwa panggilan ke layanan backend gagal, sehingga menghasilkan respons kosong variabel.
  5. Meskipun kebijakan Info Layanan gagal, pelaksanaan kebijakan setelah Layanan Kebijakan pemanggilan dilanjutkan karena "continueOnError" tanda di kebijakan Info Layanan ditetapkan ke true, seperti yang ditunjukkan di bawah ini:

    <ServiceCallout async="false" continueOnError="true" enabled="true" name="Callout.OamCookieValidation">
      <DisplayName>Callout.OamCookieValidation</DisplayName>
      <Properties />
      <Request clearPayload="true" variable="serviceCallout.oamCookieValidationRequest">
        <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
      </Request>
      <Response>serviceCallout.oamCookieValidationResponse</Response>
      <HTTPTargetConnection>
        <Properties />
        <URL>http://{Url}</URL>
      </HTTPTargetConnection>
    </ServiceCallout>
    
  6. Catat ID pesan unik &quot;X-Apigee.Message-ID&quot; untuk API khusus ini dari trace, sebagai berikut:
    1. Pilih "Data Analytics Dicatat" dari permintaan.
    2. Scroll ke bawah dan catat nilai X-Apigee.Message-ID.

  7. Melihat log Pemroses Pesan (/opt/apigee/var/log/edge-message-processor/system.log) dan telusuri atribut ID pesan yang dicantumkan di langkah #6. Pesan error berikut diamati untuk API tertentu permintaan:
    2017-05-05 07:48:18,653 org:myorg env:prod api:myapi rev:834 messageid:rrt-04984fed9e5ad3551-c-wo-32168-77563  NIOThread@5 ERROR HTTP.CLIENT - HTTPClient$Context.onTimeout() : ClientChannel[C:]@149081 useCount=1 bytesRead=0 bytesWritten=0 age=3002ms lastIO=3002ms .onConnectTimeout connectAddress=mybackend.domain.com/XX.XX.XX.XX:443 resolvedAddress=mybackend.domain.com/XX.XX.XX.XX
    

    Error di atas menunjukkan bahwa kebijakan Info Layanan gagal karena koneksi waktu tunggu habis saat terhubung ke server backend.

  8. Untuk menentukan penyebab kesalahan waktu tunggu koneksi, jalankan metode telnet ke server backend dari Pemroses Pesan. Telnet perintah memberi "Koneksi habis waktu" seperti yang ditunjukkan di bawah ini:
    telnet mybackend.domain.com 443
    Trying XX.XX.XX.XX...
    telnet: connect to address XX.XX.XX.XX: Connection timed out
    

    Biasanya, error ini terjadi dalam keadaan berikut:

    • Saat server backend tidak dikonfigurasi untuk mengizinkan traffic dari Pesan Edge Prosesor.
    • Jika server backend tidak memproses port tertentu.

    Dalam contoh ilustrasi di atas, meskipun kebijakan Ekstrak Variabel gagal, sebenarnya penyebabnya adalah Edge tidak dapat terhubung ke server backend di Layanan lebih lanjut. Dan penyebab kegagalan ini adalah karena server akhir backend tidak dikonfigurasi untuk mengizinkan traffic dari Prosesor Pesan Edge.

    Kebijakan Variabel Ekstrak Anda sendiri akan berperilaku berbeda dan mungkin gagal untuk variabel yang berbeda alasan. Anda dapat memecahkan masalah dengan sesuai tergantung pada penyebab kegagalan kebijakan Ekstrak Variabel dengan mencentang pesan dalam error saat ini.

Contoh 2 Resolusi

  1. Perbaiki penyebab error atau kegagalan dalam kebijakan Ekstrak Variabel dengan tepat.
  2. Pada contoh ilustrasi di atas, solusinya adalah memperbaiki konfigurasi jaringan untuk mengizinkan traffic dari Edge Message Processors ke server backend Anda. Hal ini dilakukan oleh mengizinkan Pemroses Pesan menggunakan alamat IP di server backend tertentu. Misalnya, di Linux, Anda dapat menggunakan iptables untuk mengizinkan traffic dari Alamat IP Pemroses Pesan di server backend.

Contoh 3: Kegagalan pada kebijakan Javacallout

Sekarang mari kita lihat satu contoh lagi, di mana Error Server Internal 500 disebabkan oleh error pada kebijakan Java Keterangan dan melihat cara memecahkan dan menyelesaikan masalah.

  1. Trace UI berikut menampilkan kode status 500 karena terjadi error pada Kebijakan Panggilan Java:

  2. Pilih Flow bernama "Error" diikuti dengan Kebijakan Info Java yang gagal untuk mendapatkan detail error seperti yang ditunjukkan dalam gambar di bawah ini:

  3. Dalam contoh ini, properti "error" di bawah bagian {i>Properties<i} menampilkan bahwa kegagalan itu disebabkan karena {i>password<i} yang sudah habis masa berlakunya saat menyambungkan ke Database Oracle dari dalam kebijakan JavaKeterangan. Info Java Anda sendiri akan berperilaku berbeda dan akan mengisi pesan yang berbeda di properti error.
  4. Periksa kode kebijakan Javacallout dan konfirmasi konfigurasi yang benar yang harus data

Contoh 3 Resolusi

Perbaiki kode atau konfigurasi info Java dengan tepat untuk menghindari pengecualian runtime. Di beberapa contoh kegagalan pemanggilan Java di atas, seseorang harus menggunakan sandi yang benar untuk terhubung ke {i>database<i} Oracle untuk menyelesaikan masalah.

Error di Server Backend

Error Server Internal 500 juga dapat berasal dari server backend. Bagian ini menjelaskan cara memecahkan masalah jika error tersebut berasal dari server backend.

Diagnosis

Langkah Diagnostik untuk Semua Pengguna

Penyebab error backend lainnya dapat sangat bervariasi. Anda perlu mendiagnosis setiap situasi mereka dapat bekerja secara mandiri.

  1. Pastikan bahwa error disebabkan oleh server backend. Lihat Menentukan sumber masalah untuk mengetahui detailnya.
  2. Jika error disebabkan oleh server backend, lanjutkan. Jika kesalahan terjadi selama eksekusi kebijakan, buka Execution Error in Edge Kebijakan kami.
  3. Ikuti langkah-langkah di bawah ini tergantung pada apakah Anda memiliki akses ke sesi Trace atau tidak API yang gagal, atau jika backend adalah server Node.js:

Jika Anda tidak memiliki sesi Trace untuk panggilan API yang gagal:

  1. Jika rekaman aktivitas UI tidak tersedia untuk permintaan yang gagal, periksa server backend log untuk mendapatkan detail tentang {i>error<i}.
  2. Jika memungkinkan, aktifkan mode debug di server backend untuk mendapatkan detail selengkapnya tentang {i>error <i}dan penyebabnya.

Jika Anda memiliki sesi Trace untuk panggilan API yang gagal:

Jika Anda memiliki sesi Trace, langkah-langkah berikut akan membantu Anda mendiagnosis masalah.

  1. Di alat Trace, pilih permintaan API yang gagal dengan 500 Internal Server Kesalahan.
  2. Pilih fase "ResponseReceived from target server" dari respons gagal seperti yang ditunjukkan dalam gambar di bawah ini:

  3. Periksa bagian "Konten Respons" untuk mendapatkan detail tentang error.

  4. Dalam contoh ini, Isi Respons yang merupakan Amplop SOAP, menunjukkan string kesalahan sebagai "Not Authorized". Penyebab yang paling mungkin untuk masalah ini masalah ini adalah kredensial yang tepat (nama pengguna/sandi, token akses, dll.) tidak diteruskan ke server backend oleh pengguna. Masalah ini dapat diperbaiki dengan meneruskan kredensial yang benar ke server backend.

Jika backend adalah server Node.js:

  1. Jika backend adalah Server Backend Node.js, periksa log Node.js untuk Proxy API tertentu di UI Edge (pengguna Public dan Private Cloud dapat periksa log Node.js). Jika Anda adalah pengguna Edge Private Cloud, Anda dapat memeriksa log Pemroses Pesan Anda (/opt/apigee/var/log/edge-message-processor/logs/system.log) untuk mengetahui detail selengkapnya error tersebut.

    Opsi NodeJS Logs di UI Edge - Tab Ringkasan Proxy API

Resolusi

  1. Setelah mengidentifikasi penyebab error, perbaiki masalah di server backend Anda.
  2. Jika ini adalah server backend Node.js:
    1. Periksa apakah error ditampilkan dari kode kustom Anda dan perbaiki masalahnya, jika memungkinkan.
    2. Jika error tidak ditampilkan dari kode kustom Anda atau jika Anda memerlukan bantuan, hubungi Dukungan Apigee.

Jika Anda membutuhkan bantuan lebih lanjut dalam memecahkan masalah 500 Internal Server Error atau bahwa ini merupakan masalah pada Edge, hubungi Apigee Dukungan.

Menentukan sumber masalah

Gunakan salah satu prosedur berikut untuk menentukan apakah terjadi error 500 Internal Server Error selama eksekusi kebijakan dalam proxy API atau oleh server backend.

Menggunakan Rekaman Aktivitas di UI

Catatan: Langkah-langkah di bagian ini dapat dilakukan oleh Publik dan pengguna Private Cloud.

  1. Jika masalah masih aktif, aktifkan rekaman aktivitas di UI untuk API yang terpengaruh.
  2. Setelah merekam aktivitas, pilih permintaan API yang menampilkan kode respons sebagai 500.
  3. Jelajahi semua fase permintaan API yang gagal dan periksa fase mana yang menampilkan {i>Error<i} Server Internal 500:
    1. Jika error ditampilkan selama eksekusi kebijakan, lanjutkan ke Execution Error in an Edge Policy.
    2. Jika server backend telah merespons dengan 500 Server Internal, lanjutkan ke Error di Server Backend.

Menggunakan Pemantauan API

Catatan: Langkah-langkah di bagian ini hanya dapat dilakukan oleh pengguna Public Cloud.

Pemantauan API memungkinkan Anda mengisolasi area masalah dengan cepat untuk mendiagnosis masalah error, performa, dan latensi serta sumbernya. seperti aplikasi developer, proxy API, target backend, atau platform API.

Ikuti contoh skenario yang menunjukkan cara memecahkan masalah 5xx dengan API menggunakan Pemantauan API. Misalnya, Anda mungkin ingin menyiapkan pemberitahuan yang akan muncul saat jumlah 500 kode status atau kesalahan steps.servicecallout.ExecutionFailed melebihi batas tertentu.

Menggunakan NGINX Access Log

Catatan: Langkah-langkah di bagian ini ditujukan untuk pengguna Edge Private Cloud saja.

Anda juga dapat melihat log NGINX Access untuk mengetahui apakah kode status 500 ditampilkan atau tidak selama eksekusi kebijakan dalam proxy API atau oleh server backend. Ini adalah sangat berguna jika masalahnya pernah terjadi sebelumnya atau jika masalah tersebut hanya sesekali saja dan Anda tidak dapat menangkap rekaman aktivitas di UI. Gunakan langkah-langkah berikut untuk menentukan informasi dari Log akses NGINX:

  1. Periksa log akses NGINX (/opt/apigee/var/log/edge-router/nginx/ <org>~ <env>.<port#>_access_log ).
  2. Telusuri apakah ada 500 Error untuk proxy API spesifik di durasi.
  3. Jika ada 500 {i>Error<i}, maka periksa apakah {i>error<i} tersebut adalah kebijakan atau {i>target<i} server {i>error<i}, sebagaimana ditunjukkan di bawah ini:

    Contoh Entri yang menunjukkan Error Kebijakan

    Contoh Entri yang menunjukkan Error Server Target

  4. Setelah Anda mengidentifikasi apakah error tersebut merupakan error server target atau kebijakan:
    1. Lanjutkan ke Execution Error in an Edge Policy jika itu adalah {i>error<i} kebijakan.
    2. Lanjutkan ke Error di Server Backend jika itu adalah target error server.