Kesalahan Server Internal 500

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

Video

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

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

Gejala

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

Kode status HTTP 500 adalah respons error umum. Ini berarti server mengalami kondisi tidak terduga yang mencegahnya memenuhi permintaan. Error ini biasanya ditampilkan oleh server ketika tidak ada kode error 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 berisi detail selengkapnya. Berikut adalah contoh pesan error:

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

Kemungkinan Penyebab

Kesalahan Server Internal 500 dapat muncul karena berbagai penyebab. Di Edge, penyebabnya dapat diklasifikasikan menjadi dua kategori utama berdasarkan tempat terjadinya error:

Cause Detail Langkah-Langkah Pemecahan Masalah Mendetail Disediakan
Error Eksekusi dalam Kebijakan Edge Kebijakan dalam proxy API mungkin gagal karena beberapa alasan. Pengguna Cloud Pribadi dan Publik Edge
Error pada Server Backend Server backend mungkin gagal karena beberapa alasan. Pengguna Cloud Pribadi dan Publik Edge

Error Eksekusi dalam Kebijakan Edge

Kebijakan dalam proxy API mungkin gagal karena beberapa alasan. Bagian ini menjelaskan cara memecahkan masalah jika Error Server Internal 500 terjadi selama eksekusi kebijakan.

Diagnosis

Langkah-Langkah Diagnostik untuk Pengguna Cloud Pribadi dan Publik

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

  1. Memverifikasi 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 di Server Backend.
  3. Pilih permintaan API yang gagal dengan Error Server Internal 500 dalam rekaman aktivitas.
  4. Periksa permintaan dan pilih kebijakan spesifik yang gagal atau alur yang bernama "Error" yang langsung mengikuti kebijakan yang gagal dalam rekaman aktivitas.
  5. Dapatkan detail selengkapnya tentang error dengan memeriksa kolom "error" di bagian Properti atau konten Error.
  6. Coba ketahui penyebabnya dengan menggunakan detail yang Anda kumpulkan tentang error.

Langkah-Langkah Diagnostik Hanya untuk Pengguna Private Cloud

Jika Anda tidak memiliki sesi UI rekaman aktivitas, maka:

  1. Pastikan error terjadi selama eksekusi kebijakan. Lihat Menentukan sumber masalah untuk mengetahui detailnya.
  2. Jika error disebabkan oleh eksekusi kebijakan, lanjutkan. Jika error terjadi selama eksekusi kebijakan, 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. Periksa log Message Processor (/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 selengkapnya tentang penyebab kegagalan.

Resolusi

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

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

Jika memerlukan bantuan lebih lanjut dalam memecahkan masalah 500 Internal Server Error atau merasa ada masalah dalam Edge, hubungi Dukungan Apigee.

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

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

  1. Berikut adalah contoh saat layanan backend gagal dengan error 404 dalam kebijakan Pemanggilan Layanan. 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 menunjukkan kode status 500 yang disebabkan oleh error dalam kebijakan Pemanggilan Layanan:

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

Contoh 1 Resolusi

  1. Periksa ketersediaan resource di server backend. Konten 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 resource yang valid dan yang sudah ada.
  3. Jika resource hanya tidak tersedia untuk sementara, coba buat permintaan API setelah resource tersedia.

Contoh 2: Kegagalan dalam Kebijakan Mengekstrak Variabel

Sekarang mari kita lihat contoh lain, di mana 500 Internal Server Error disebabkan karena adanya error dalam kebijakan Extract Variables dan melihat cara memecahkan masalah dan mengatasi masalah tersebut.

  1. Trace berikut di sesi UI menunjukkan kode status 500 karena terjadi error dalam kebijakan Ekstrak Variabel:

  2. Pilih kebijakan Ekstrak Variabel yang gagal, scroll ke bawah dan lihat bagian "Konten Error" untuk mengetahui detail selengkapnya:

  3. Konten Error menunjukkan bahwa variabel"serviceCallout.oamCookieValidationResponse" tidak tersedia di kebijakan Ekstrak Variabel. Seperti yang ditunjukkan oleh nama variabel, variabel tersebut harus menyimpan respons kebijakan Pemanggilan Layanan sebelumnya.
  4. Pilih kebijakan Panggilan Layanan di rekaman aktivitas dan Anda mungkin mendapati bahwa variabel "serviceCallout.oamCookieValidationResponse" tidak ditetapkan. Hal ini menunjukkan bahwa panggilan ke layanan backend gagal, sehingga menghasilkan variabel respons kosong.
  5. Meskipun kebijakan Pemanggilan Layanan gagal, eksekusi kebijakan setelah kebijakan Pemanggilan Layanan akan berlanjut karena tanda "continueOnError" di kebijakan Info Layanan ditetapkan ke benar (true), seperti yang ditunjukkan di bawah:

    <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 "X-Apigee.Message-ID" untuk permintaan API khusus ini dari rekaman aktivitas, sebagai berikut:
    1. Pilih fase "Data Analytics Dicatat" dari permintaan.
    2. Scroll ke bawah dan catat nilai X-Apigee.Message-ID.

  7. Lihat log Message Processor (/opt/apigee/var/log/edge-message-processor/system.log) dan telusuri ID pesan unik yang dicatat pada langkah #6. Pesan error berikut diamati untuk permintaan API tertentu:
    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 terjadi error waktu tunggu koneksi saat terhubung ke server backend.

  8. Untuk mengetahui penyebab error waktu tunggu koneksi habis, perintah telnet dijalankan ke server backend dari Prosesor Pesan. Perintah telnet menghasilkan error "Waktu tunggu koneksi habis" seperti yang ditunjukkan di bawah:
    telnet mybackend.domain.com 443
    Trying XX.XX.XX.XX...
    telnet: connect to address XX.XX.XX.XX: Connection timed out
    

    Biasanya, error ini diamati dalam keadaan berikut:

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

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

    Kebijakan Variabel Ekstrak Anda akan berperilaku lain dan mungkin gagal karena alasan lain. Anda dapat memecahkan masalah ini dengan tepat, bergantung pada penyebab kegagalan kebijakan Variabel Ekstrak dengan memeriksa pesan di properti error.

Contoh 2 Resolusi

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

Contoh 3: Kegagalan dalam kebijakan JavaCallout

Sekarang mari kita lihat satu contoh lagi, yang menyebabkan 500 Internal Server Error disebabkan oleh error dalam kebijakan Java Callout dan lihat cara memecahkan serta mengatasi masalah tersebut.

  1. Rekaman aktivitas UI berikut menampilkan kode status 500 karena terjadi error pada Kebijakan Pemanggilan Java:

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

  3. Dalam contoh ini, properti "error" di bagian Properti mengungkapkan bahwa kegagalan tersebut disebabkan oleh masa berlaku sandi yang digunakan saat terhubung ke Database Oracle dari dalam kebijakan JavaCallout. Info Java Anda sendiri akan berperilaku lain dan akan mengisi pesan yang berbeda di properti error.
  4. Periksa kode kebijakan JavaCallout dan konfirmasi konfigurasi yang benar yang perlu digunakan.

Contoh 3 Resolusi

Perbaiki kode info atau konfigurasi Java dengan tepat untuk menghindari pengecualian runtime. Dalam contoh kegagalan pemanggilan Java di atas, kita harus menggunakan sandi yang benar untuk terhubung ke database Oracle guna menyelesaikan masalah.

Error di Server Backend

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

Diagnosis

Langkah-Langkah Diagnostik untuk Semua Pengguna

Penyebab error backend lainnya bisa sangat bervariasi. Anda harus mendiagnosis setiap situasi secara terpisah.

  1. Verifikasi bahwa error disebabkan oleh server backend. Lihat Menentukan sumber masalah untuk mengetahui detailnya.
  2. Jika error disebabkan oleh server backend, lanjutkan. Jika error terjadi selama eksekusi kebijakan, buka Execution Error in Edge Policy.
  3. Ikuti langkah-langkah di bawah ini, bergantung pada apakah Anda memiliki akses ke sesi Trace untuk API yang gagal atau tidak, atau apakah backend-nya 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 log server backend untuk mendapatkan detail tentang error tersebut.
  2. Jika memungkinkan, aktifkan mode debug pada server backend untuk mendapatkan detail selengkapnya tentang error dan penyebabnya.

Jika Anda memiliki sesi Trace untuk panggilan API yang gagal:

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

  1. Pada alat Trace, pilih permintaan API yang gagal dengan 500 Internal Server Error.
  2. Pilih fase "Response received from target server" dari permintaan API yang gagal seperti ditunjukkan dalam gambar di bawah:

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

  4. Dalam contoh ini, Konten Respons yang merupakan Amplop SOAP, menampilkan string kesalahan sebagai pesan "Not Authorized". Penyebab yang paling mungkin untuk 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 memeriksa log Node.js). Jika Anda adalah pengguna Edge Private Cloud, Anda juga dapat memeriksa log Message Processor (/opt/apigee/var/log/edge-message-processor/logs/system.log) untuk mengetahui detail selengkapnya tentang 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 server tersebut adalah server backend Node.js:
    1. Periksa apakah error ditampilkan dari kode kustom Anda dan perbaiki masalah tersebut, jika memungkinkan.
    2. Jika error tidak ditampilkan dari kode kustom Anda atau jika Anda memerlukan bantuan, hubungi Dukungan Apigee.

Jika memerlukan bantuan lebih lanjut dalam memecahkan masalah 500 Internal Server Error atau merasa ada masalah dalam Edge, hubungi Dukungan Apigee.

Menentukan sumber masalah

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

Menggunakan Trace di UI

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

  1. Jika masalah masih aktif, aktifkan rekaman aktivitas di UI untuk API yang terpengaruh.
  2. Setelah Anda mengambil rekaman aktivitas, pilih permintaan API yang menampilkan kode respons sebagai 500.
  3. Jelajahi semua fase dalam permintaan API yang gagal dan periksa fase mana yang menampilkan Error Server Internal 500:
    1. Jika error ditampilkan selama eksekusi kebijakan, lanjutkan ke Eksekusi Error dalam Kebijakan Edge.
    2. Jika server backend telah merespons dengan Server Internal 500, 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 beserta sumbernya, seperti aplikasi developer, proxy API, target backend, atau platform API.

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

Menggunakan Log Akses NGINX

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

Anda juga dapat melihat log Akses NGINX untuk menentukan apakah kode status 500 ditampilkan selama eksekusi kebijakan dalam proxy API atau oleh server backend. Cara ini sangat berguna jika masalah pernah terjadi sebelumnya atau jika masalah tersebut terputus-putus dan Anda tidak dapat merekam aktivitas di UI. Gunakan langkah-langkah berikut untuk menentukan informasi ini 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 Error 500 untuk proxy API tertentu pada durasi tertentu.
  3. Jika ada Error 500, periksa apakah error tersebut berkaitan dengan kebijakan atau error server target, seperti yang ditunjukkan di bawah ini:

    Contoh Entri yang menampilkan Error Kebijakan

    Contoh Entri yang menampilkan Error Server Target

  4. Setelah Anda mengidentifikasi apakah error tersebut berasal dari kebijakan atau server target:
    1. Lanjutkan ke Execution Error in an Edge Policy jika itu adalah error kebijakan.
    2. Lanjutkan ke Error in Backend Server jika masalahnya adalah server target.