500 Error Server Internal

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

Video

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

Video Deskripsi
Pengantar Memberikan pengantar tentang Error Server Internal 500 dan kemungkinan penyebabnya. Juga menunjukkan error Server Internal 500 real time beserta langkah-langkah untuk memecahkan masalah dan mengatasi error tersebut.
Menangani error Service Callout dan Extract Variable Menunjukkan dua Error Server Internal 500 yang disebabkan oleh kebijakan Service Callout dan Extract Variable 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 Menampilkan 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 di server target/backend.

Kode status HTTP 500 adalah respons error umum. Artinya, server mengalami kondisi yang tidak terduga yang mencegahnya memenuhi permintaan. Error ini biasanya ditampilkan oleh server jika tidak ada kode error lain yang sesuai.

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 lebih lanjut. 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

Error Server Internal 500 dapat terjadi karena sejumlah penyebab yang berbeda. Di Edge, penyebabnya dapat diklasifikasikan ke dalam dua kategori utama berdasarkan tempat terjadinya error:

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

Error Eksekusi dalam Kebijakan Edge

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

Diagnosis

Langkah-Langkah Diagnostik untuk Pengguna Private dan Public Cloud

Jika Anda memiliki sesi UI pelacakan untuk error, maka:

  1. Pastikan 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 pelacakan.
  4. Periksa permintaan dan pilih kebijakan tertentu yang gagal atau alur bernama "Error" yang segera mengikuti kebijakan yang gagal dalam pelacakan.
  5. Dapatkan detail selengkapnya tentang error dengan memeriksa kolom "error" di bagian Properti bagian atau konten Error.
  6. Dengan menggunakan detail yang telah Anda kumpulkan tentang error, coba tentukan penyebabnya.

Langkah-Langkah Diagnostik untuk Pengguna Private Cloud Saja

Jika Anda tidak memiliki sesi UI pelacakan, 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 di Determining the source of the problem untuk menentukan kebijakan yang gagal dalam proxy API dan juga the unique request message id
  4. Periksa log Message Processor (/opt/apigee/var/log/edge-message-processor/logs/system.log) dan cari 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 dengan kebijakan, coba perbaiki masalah tersebut dengan memperbaiki kebijakan dan men-deploy ulang proxy.

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

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

Contoh 1: Kegagalan dalam kebijakan Service Callout karena error di backend server

Jika panggilan ke server backend gagal dalam kebijakan Service Callout dengan error apa pun seperti 4XX atau 5XX, maka akan diperlakukan sebagai Error Server Internal 500.

  1. Berikut adalah contoh ketika layanan backend gagal dengan error 404 dalam kebijakan Service Callout. 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 pelacakan berikut menunjukkan kode status 500 yang disebabkan oleh error dalam kebijakan Service Callout:

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

Resolusi Contoh 1

  1. Periksa ketersediaan resource di server backend. Resource mungkin tidak tersedia untuk sementara/permanen atau mungkin telah dipindahkan ke lokasi lain.
  2. Perbaiki URL server backend dalam kebijakan Service Callout agar mengarah ke resource yang valid dan ada.
  3. Jika resource hanya tidak tersedia untuk sementara, coba buat permintaan API setelah resource tersedia.

Contoh 2: Kegagalan dalam Kebijakan Extract Variables

Sekarang kita lihat contoh lain, ketika Error Server Internal 500 disebabkan oleh error dalam kebijakan Extract Variables dan lihat cara memecahkan masalah dan mengatasi masalah tersebut.

  1. Pelacakan berikut dalam sesi UI menunjukkan kode status 500 karena error dalam kebijakan Extract Variables:

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

  3. Konten Error menunjukkan bahwa variabel"serviceCallout.oamCookieValidationResponse" tidak tersedia dalam kebijakan Extract Variables. Seperti yang ditunjukkan oleh nama variabel, variabel tersebut harus menyimpan respons dari kebijakan Service Callout sebelumnya.
  4. Pilih kebijakan Service Callout dalam pelacakan dan Anda mungkin menemukan bahwa variabel "serviceCallout.oamCookieValidationResponse" tidak ditetapkan. Hal ini menunjukkan bahwa panggilan ke layanan backend gagal, sehingga menghasilkan variabel respons kosong.
  5. Meskipun kebijakan Service Callout gagal, eksekusi kebijakan setelah kebijakan Service Callout akan terus berlanjut karena flag "continueOnError" dalam kebijakan Service Callout 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. Perhatikan ID pesan unik "X-Apigee.Message-ID" untuk permintaan API tertentu ini dari pelacakan, sebagai berikut:
    1. Pilih fase "Analytics Data Recorded" dari permintaan.
    2. Scroll ke bawah dan perhatikan nilai X-Apigee.Message-ID.

  7. Lihat log Message Processor (/opt/apigee/var/log/edge-message-processor/system.log) dan cari ID pesan unik pesan yang dicatat di 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 Service Callout gagal karena error waktu tunggu koneksi saat terhubung ke server backend.

  8. Untuk menentukan penyebab error waktu tunggu koneksi, jalankan perintah telnet ke server backend dari Message Processor. Perintah telnet command memberikan error "Connection timed out" 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:

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

    Dalam contoh yang diilustrasikan di atas, meskipun kebijakan Extract Variables gagal, penyebab sebenarnya adalah Edge tidak dapat terhubung ke server backend dalam kebijakan Service Callout. Dan penyebab kegagalan ini adalah server akhir backend tidak dikonfigurasi untuk mengizinkan traffic dari Edge Message Processor.

    Kebijakan Extract Variables Anda sendiri akan berperilaku berbeda dan mungkin gagal karena alasan yang berbeda. Anda dapat memecahkan masalah dengan tepat, bergantung pada penyebab kegagalan kebijakan Extract Variables Anda dengan memeriksa pesan di properti error.

Resolusi Contoh 2

  1. Perbaiki penyebab error atau kegagalan dalam kebijakan Extract Variables dengan tepat.
  2. Dalam contoh yang diilustrasikan di atas, solusinya adalah memperbaiki konfigurasi jaringan untuk mengizinkan traffic dari Edge Message Processor ke server backend Anda. Hal ini dilakukan dengan membuat daftar yang diizinkan untuk alamat IP Message Processor di 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 kita lihat satu contoh lagi, ketika Error Server Internal 500 disebabkan oleh error dalam kebijakan Java Callout dan lihat cara memecahkan masalah dan mengatasi masalah tersebut.

  1. Pelacakan UI berikut menunjukkan kode status 500 karena error dalam Kebijakan Java Callout:

  2. Pilih Alur bernama "Error" yang diikuti oleh Kebijakan Java Callout 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 disebabkan oleh penggunaan sandi yang sudah tidak berlaku saat terhubung ke Database Oracle dari dalam kebijakan JavaCallout. Java callout 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 perlu di gunakan.

Resolusi Contoh 3

Perbaiki kode atau konfigurasi Java callout dengan tepat untuk menghindari pengecualian runtime. Dalam contoh kegagalan Java callout yang diilustrasikan di atas, Anda harus menggunakan sandi yang benar untuk terhubung ke database Oracle guna mengatasi masalah tersebut.

Error di Server Backend

Error 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 dapat sangat bervariasi. Anda harus mendiagnosis setiap situasi secara independen.

  1. Pastikan 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 Error Eksekusi dalam Kebijakan Edge.
  3. Ikuti langkah-langkah di bawah, bergantung pada apakah Anda memiliki akses ke sesi Pelacakan untuk API yang gagal atau tidak, atau jika backend adalah server Node.js:

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

  1. Jika pelacakan UI tidak tersedia untuk permintaan yang gagal, periksa log server backend untuk mendapatkan detail tentang error.
  2. Jika memungkinkan, aktifkan mode debug di server backend untuk mendapatkan detail selengkapnya tentang error dan penyebabnya.

Jika Anda memiliki sesi Pelacakan untuk panggilan API yang gagal:

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

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

  3. Periksa bagian "Response Content" untuk mendapatkan detail tentang error.

  4. Dalam contoh ini, Konten Respons yang merupakan SOAP Envelope, menampilkan string kesalahan sebagai "Not Authorized" pesan. Penyebab 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.

    Opsi Log NodeJS di UI Edge - Tab Ringkasan Proxy API

Resolusi

  1. Setelah Anda mengidentifikasi penyebab error, perbaiki masalah di server backend.
  2. Jika 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 memerlukan bantuan lebih lanjut dalam memecahkan masalah Error Server Internal 500 atau Anda menduga bahwa masalah tersebut ada dalam Edge, hubungi Apigee Dukungan.

Menentukan sumber masalah

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

Menggunakan Pelacakan di UI

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

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

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

Menggunakan Log Akses NGINX

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

Anda juga dapat merujuk ke log Akses NGINX untuk menentukan apakah kode status 500 ditampilkan selama eksekusi kebijakan dalam proxy API atau oleh server backend. Hal ini sangat berguna jika masalah telah terjadi di masa lalu atau jika masalahnya tidak menentu dan Anda tidak dapat mengambil pelacakan 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. Cari apakah ada Error 500 untuk proxy API tertentu pada durasi tertentu.
  3. Jika ada Error 500, periksa apakah error tersebut adalah error kebijakan atau server target, seperti yang ditunjukkan di bawah:

    Contoh Entri yang menunjukkan Error Kebijakan

    Contoh Entri yang menunjukkan Error Server Target

  4. Setelah Anda mengidentifikasi apakah error tersebut adalah error kebijakan atau server target:
    1. Lanjutkan ke Error Eksekusi dalam Kebijakan Edge jika itu adalah error kebijakan.
    2. Lanjutkan ke Error di Server Backend jika error tersebut adalah target server error.