500 خطأ في الخادم الداخلي - خادم الخلفية

يتم الآن عرض مستندات Apigee Edge.
انتقِل إلىمستندات Apigee X.
info

الفيديوهات

فيديو الوصف
‫500 Internal Server Error - caused by backend يوضّح هذا الفيديو خطأً في الخادم الداخلي 500 Internal Server Error يحدث في الوقت الفعلي بسبب خادم الخلفية، بالإضافة إلى خطوات تحديد المشاكل وحلّها.

المشكلة

يتلقّى تطبيق العميل رمز حالة HTTP بقيمة 500 مع الرسالة Internal Server Error كاستجابة لطلبات البيانات من واجهة برمجة التطبيقات.

رمز حالة HTTP‏ 500 هو استجابة عامة للخطأ. ويعني ذلك أنّ الخادم واجه حالة غير متوقّعة منعته من تلبية الطلب. يعرض الخادم هذا الخطأ عادةً عندما لا يكون أي رمز خطأ آخر مناسبًا.

رسائل الخطأ

يتلقّى تطبيق العميل رمز الاستجابة التالي:

HTTP/1.1 500 Internal Server Error

بالإضافة إلى ذلك، قد تظهر لك رسالة خطأ مشابهة للرسالة الموضحة أدناه:

مثال 1

Sample Backend Server Response #1

{"errorMessage":"Sorry either your e-mail or password didn't match.",
"errorParameters":"{}",
"errorCode":"500",
"errorKey":"INVALID_EMAILPASSWORD"}

مثال 2

Sample Backend Server Response #2

<Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
   <Body>
      <Error>
         <code>500</code>
         <message xml:lang="en-US">Not Authorised(e4138fa0-ec57).</message>
      </Error>
   </Body>
</Envelope>

الأسباب المحتملة

يمكن أن يعرض خادم الخلفية الخطأ 500 Internal Server Error لعدد من الأسباب. توضّح هذه المسرحية كيفية تحديد المشاكل وحلّها باستخدام خطوات شائعة وحلّ هذا الخطأ بغض النظر عن سببه.

في ما يلي الأسباب المحتملة لهذه المشكلة:

السبب الوصف تعليمات تحديد المشاكل وحلّها التي تنطبق على
Error in backend server قد يتعطّل خادم الخلفية لسبب ما. مستخدمو Edge Private Cloud وPublic Cloud

الخطوات الشائعة لتشخيص المشكلة

استخدِم إحدى الأدوات أو التقنيات التالية لتشخيص هذا الخطأ:

API Monitoring

الإجراء 1: استخدام API Monitoring

لتشخيص الخطأ باستخدام API Monitoring:

  1. سجِّل الدخول إلى واجهة مستخدم Apigee Edge كمستخدم لديه دور مناسب.
  2. انتقِل إلى المؤسسة التي تريد التحقيق في المشكلة فيها.

  3. انتقِل إلى صفحة Analyze > API Monitoring > Investigate.
  4. اختَر الإطار الزمني المحدّد الذي لاحظت فيه الأخطاء.
  5. ارسم رمز الخطأ مقابل الوقت.

  6. اختَر خلية تحتوي على رمز الخطأ messaging.adaptors.http.flow.ErrorResponseCode كما هو موضّح أدناه:

    ( view larger image)

  7. تظهر معلومات عن رمز الخطأ messaging.adaptors.http.flow.ErrorResponseCode كما هو موضّح أدناه:

    ( view larger image)

  8. انقر على عرض السجلّات ووسِّع صف الطلب الذي تعذّر تنفيذه.

    ( view larger image)

  9. من نافذة السجلّات ، اكتب التفاصيل التالية:
    • معرّف رسالة الطلب
    • رمز الحالة: 500
    • مصدر الخطأ: target
    • رمز الخطأ: messaging.adaptors.http.flow.ErrorResponseCode

التتبّع

الإجراء 2: استخدام أداة التتبّع

لتشخيص الخطأ باستخدام أداة التتبّع:

  1. فعِّل جلسة التتبّع وقم بأحد الإجراءَين التاليَين:
    • انتظِر ظهور الخطأ 500 Internal Server Error مع رمز الخطأ messaging.adaptors.http.flow.ErrorResponseCode، أو
    • إذا كان بإمكانك إعادة إظهار المشكلة، نفِّذ طلب البيانات من واجهة برمجة التطبيقات لإعادة إظهار الخطأ 500 Internal Server Error
  2. تأكَّد من تفعيل الخيار Show all FlowInfos:

  3. اختَر أحد الطلبات التي تعذّر تنفيذها وافحص التتبّع.
  4. انتقِل خلال المراحل المختلفة من التتبّع وحدِّد مكان حدوث الخطأ.
  5. ستجد الخطأ عادةً في مسار بعد مرحلة Response received from target server كما هو موضّح أدناه:

    ( view larger image)

  6. انتقِل إلى مرحلة AX (تم تسجيل بيانات "إحصاءات Google") في التتبّع وانقر عليها.
  7. انتقِل للأسفل إلى قسم Phase Details Response Headers وحدِّد قيم X-Apigee-fault-code وX-Apigee-fault-source وX-Apigee-Message-ID كما هو موضّح أدناه:

    ( view larger image)

  8. لاحظ قيم X-Apigee-fault-code وX-Apigee-fault-source وX-Apigee-Message-ID:
  9. عناوين الاستجابة القيمة
    X-Apigee-fault-code messaging.adaptors.http.flow.ErrorResponseCode
    X-Apigee-fault-source target
    X-Apigee-Message-ID MESSAGE_ID

NGINX

الإجراء 3: استخدام سجلّات الوصول إلى NGINX

لتشخيص الخطأ باستخدام سجلّات الوصول إلى NGINX:

  1. إذا كنت مستخدمًا في Private Cloud، يمكنك استخدام سجلّات الوصول إلى NGINX لتحديد المعلومات الرئيسية حول الخطأ 500 Internal Server Error في HTTP.
  2. راجِع سجلّات الوصول إلى NGINX:

    /opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log

  3. ابحث لمعرفة ما إذا كانت هناك أي أخطاء 500 مع رمز الخطأ messaging.adaptors.http.flow.ErrorResponseCode خلال مدة معيّنة (إذا حدثت المشكلة في الماضي) أو إذا كانت هناك أي طلبات لا تزال تتعذّر مع الخطأ 500.
  4. إذا عثرت على أي أخطاء 500 مع X-Apigee-fault-code الذي يطابق قيمة messaging.adaptors.http.flow.ErrorResponseCode، حدِّد قيمة X-Apigee-fault-source.

    Sample 500 error from NGINX access log:

    ( view larger image)

    يحتوي الإدخال النموذجي أعلاه من سجلّ الوصول إلى NGINX على القيم التالية لـ X-Apigee-fault-code و X-Apigee-fault-source:

    العناوين القيمة
    X-Apigee-fault-code messaging.adaptors.http.flow.ErrorResponseCode
    X-Apigee-fault-source target

السبب: Error in backend server

التشخيص

يمكن أن يحدث الخطأ 500 Internal Server Error الذي يعرضه خادم الخلفية لعدد من الأسباب. عليك تشخيص كل حالة على حدة.

  1. حدِّد رمز الخطأ ومصدر الخطأ للخطأ الذي تم رصده باستخدام API Monitoring أو أداة التتبّع أو سجلّات الوصول إلى NGINX كما هو موضّح في الخطوات الشائعة لتشخيص المشكلة.
  2. إذا كان مصدر الخطأ هو target ورمز الخطأ هو messaging.adaptors.http.flow.ErrorResponseCode، يشير ذلك إلى أنّ خادم الخلفية هو الذي يعرض الخطأ.
  3. يمكنك استخدام إحدى الخطوات التالية لتشخيص سبب المشكلة:

    التتبّع

    Using Trace:

    إذا كانت لديك جلسة تتبّع للخطأ، اتّبِع الخطوات التالية:

    1. في التتبّع، اختَر طلب البيانات من واجهة برمجة التطبيقات الذي تعذّر تنفيذه بسبب الخطأ 500 Internal Server Error.
    2. اختَر مرحلة Response received from target server من طلب البيانات من واجهة برمجة التطبيقات الذي تعذّر تنفيذه كما هو موضّح في الشكل أدناه:

      ( view larger image)

    3. انتقِل للأسفل إلى قسم Phase Details واطّلِع على Response Content, الذي يحتوي على الاستجابة من خادم الخلفية.

      Sample Response Content:

      <Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
         <Body>
            <Error>
               <code>500</code>
               <message xml:lang="en-US">Not Authorised(e4138fa0-ec57).</message>
            </Error>
         </Body>
      </Envelope>

      في الاستجابة أعلاه، لاحظ أنّ رسالة الخطأ من خادم الخلفية هي Not Authorised. يشير ذلك إلى أنّ المستخدم ربما قدّم بيانات اعتماد غير صالحة ولهذا السبب يظهر له هذا الخطأ.

    Call backend server

    Making direct call to backend server:

    يمكنك إجراء مكالمة مباشرة مع خادم الخلفية وتنفيذ ما يلي:

    • التحقّق مما إذا كنت تتلقّى الاستجابة نفسها 500 Internal Server Error التي تم تلقّيها عند إجراء الطلب من خلال Apigee Edge
    • الاطّلاع على رسالة الخطأ (الاستجابة) التي تم تلقّيها من خادم الخلفية

    اتّبِع الخطوات التالية لإجراء المكالمة المباشرة مع خادم الخلفية:

    1. تأكَّد من أنّ لديك جميع العناوين المطلوبة ومَعلمات طلب البحث وأي بيانات اعتماد يجب تمريرها إلى خادم الخلفية كجزء من الطلب.
    2. إذا كانت خدمة الخلفية متاحة للجميع، يمكنك استخدام الـ curl command، أو Postman، أو أي عميل REST آخر واستدعاء الـ واجهة برمجة التطبيقات لخادم الخلفية مباشرةً.
    3. إذا كان خادم الخلفية لا يمكن الوصول إليه إلا من "معالِجات الرسائل"، يمكنك استخدام الأمر curl أو Postman أو أي عميل REST آخر واستدعاء واجهة برمجة التطبيقات لخادم الخلفية مباشرةً من "معالِج الرسائل".

    4. تأكَّد مما إذا كانت خدمة الخلفية تعرض بالفعل الخطأ 500 Internal Server Error واطّلِع على رسالة الخطأ (الاستجابة) التي يعرضها خادم الخلفية وحدِّد سبب هذا الخطأ.

    Backend server logs

    Using backend server logs

    1. راجِع سجلّات خادم الخلفية وحاوِل الحصول على مزيد من التفاصيل حول الخطأ و سببه.
    2. إذا أمكن، فعِّل وضع تصحيح الأخطاء على خادم الخلفية للحصول على مزيد من التفاصيل حول الخطأ وسببه.
  4. تحقَّق مما إذا كنت تستخدم ربط الخادم الوكيل في نقطة النهاية المستهدَفة المحدّدة للخادم الوكيل لواجهة برمجة التطبيقات الذي تعذّر تنفيذه، أي إذا كان الخادم المستهدَف أو نقطة النهاية المستهدَفة يستدعيان خادمًا وكيلاً آخر في Apigee Edge. لتحديد ذلك:

    1. إذا كان لديك التتبّع للطلب الذي تعذّر تنفيذه، انتقِل إلى مرحلة Request sent to target server وانقر على Show Curl.

    2. تُفتح نافذة Curl for Request Sent to Target Server التي يمكنك من خلالها تحديد الاسم المستعار لمضيف الخادم المستهدَف.
    3. راجِع نقطة النهاية المستهدَفة للخادم الوكيل لواجهة برمجة التطبيقات وتحقَّق مما إذا كان عنوان URL لخادم الخلفية أو اسم المضيف في الخادم المستهدَف يشير إلى خادم وكيل آخر أو إلى خادم الخلفية الخاص بك.
    4. إذا كان الاسم المستعار لمضيف الخادم المستهدَف يشير إلى اسم مستعار لمضيف افتراضي، يكون ذلك ربطًا للخادم الوكيل. في هذه الحالة، عليك تكرار جميع الخطوات أعلاه للخادم الوكيل المرتبط إلى أن تحدِّد سبب الخطأ 500 Internal Server Error. في هذه الحالات، قد يحدث الخطأ 500 Internal Server Error في خوادم وكيلة أخرى مرتبطة في مراحل أخرى أيضًا، ويمكن تشخيص هذه الحالات وحلّها باستخدام التعليمات الواردة في هذه المسرحية أو في 500 Internal Server Error playbook.
    5. إذا كان الاسم المستعار لمضيف الخادم المستهدَف يشير إلى خادم الخلفية، انتقِل إلى الدقة.

الدقة

إذا تبيّن أنّ الخطأ 500 وارد من خادم الخلفية، تعاون مع فريق خادم الخلفية لحلّ المشكلة بشكلٍ مناسب.

في المثال الذي تمت مناقشته أعلاه، قد تحتاج إلى أن تطلب من المستخدمين تمرير بيانات اعتماد صالحة لحلّ هذه المشكلة.

يُرجى مراعاة النقاط الرئيسية التالية:

  1. لا يمكن الاطّلاع على رسالة الخطأ الفعلية التي يعرضها خادم الخلفية للخطأ 500 Internal Server Error إلا إذا سجّلت جلسة التتبّع للطلبات التي تعذّر تنفيذها.
  2. لن يتم تسجيل استجابة خادم الخلفية في API Monitoring أو سجلّات الوصول إلى NGINX أو سجلّات "معالِج الرسائل" لأسباب أمنية.
  3. يمكنك مراجعة سجلّات خادم الخلفية أو تفعيل وضع تصحيح الأخطاء على خادم الخلفية للحصول على مزيد من التفاصيل حول الـ 500 Internal Server Error و/أو الاطّلاع على رسالة الخطأ التي يعرضها خادم الخلفية.

Must gather diagnostic information

إذا استمرت المشكلة حتى بعد اتّباع التعليمات أعلاه، اجمع معلومات التشخيص التالية وتواصَل مع فريق دعم Apigee Edge.

إذا كنت مستخدمًا في Public Cloud، قدِّم المعلومات التالية:

  • اسم المؤسسة
  • اسم البيئة
  • اسم الخادم الوكيل لواجهة برمجة التطبيقات
  • الأمر curl الكامل لإعادة إظهار الخطأ 500
  • ملف التتبّع الذي يحتوي على الطلبات التي تتضمّن الخطأ 500 Internal Server Error
  • إذا لم تكن أخطاء 500 تحدث حاليًا، قدِّم الفترة الزمنية مع معلومات المنطقة الزمنية التي حدثت فيها أخطاء 500 في الماضي.

إذا كنت مستخدمًا في Private Cloud ، قدِّم المعلومات التالية:

  • رسالة الخطأ الكاملة التي تظهر للطلبات التي تعذّر تنفيذها
  • اسم المؤسسة واسم البيئة واسم الخادم الوكيل لواجهة برمجة التطبيقات التي تظهر لك فيها أخطاء 500
  • حزمة الخادم الوكيل لواجهة برمجة التطبيقات
  • ملف التتبّع الذي يحتوي على الطلبات التي تتضمّن الخطأ 500 Internal Server Error
  • سجلّات الوصول إلى NGINX‏ /opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log

    Where: يتم استبدال ORG وENV وPORT# بالقيم الفعلية.

  • سجلّات نظام "معالِج الرسائل"‏ /opt/apigee/var/log/edge-message-processor/logs/system.log
  • الفترة الزمنية مع معلومات المنطقة الزمنية التي حدثت فيها أخطاء 500