499 إغلاق الاتصال للعميل

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

المشكلة

يتلقى تطبيق العميل خطأ متعلقًا بانتهاء المهلة لطلبات واجهة برمجة التطبيقات أو يتم إنهاء الطلب بشكل مفاجئ بينما لا يزال تنفيذ طلب واجهة برمجة التطبيقات قيد التنفيذ على Apigee.

ستلاحظ رمز الحالة 499 لطلبات واجهة برمجة التطبيقات هذه في مراقبة واجهة برمجة التطبيقات وسجلات وصول NGINX. سترى أحيانًا رموز حالة مختلفة في إحصاءات واجهة برمجة التطبيقات لأنّها تعرض رمز الحالة الذي يعرضه معالج الرسائل.

رسالة الخطأ

قد تظهر في تطبيقات العميل أخطاء مثل:

curl: (28) Operation timed out after 6001 milliseconds with 0 out of -1 bytes received

ما الذي يؤدي إلى انتهاء مهلة العميل؟

المسار النموذجي لطلب واجهة برمجة التطبيقات على نظام Edge الأساسي هو العميل > جهاز التوجيه > معالج الرسائل > خادم الخلفية كما هو موضّح في الشكل التالي:

تم إعداد أجهزة التوجيه ومعالِجات الرسائل ضِمن منصة Apigee Edge باستخدام قيم مهلة تلقائية مناسبة، وذلك لضمان ألّا يستغرق اكتمال طلبات البيانات من واجهة برمجة التطبيقات وقتًا طويلاً.

مهلة على العميل

يمكن ضبط تطبيقات العملاء باستخدام قيمة مهلة مناسبة بناءً على احتياجاتك.

يُرجى العلم بأنّ للعملاء، مثل متصفِّحات الويب والتطبيقات المتوافقة مع الأجهزة الجوّالة، لها مهلات يحدّدها نظام التشغيل.

انتهت مهلة جهاز التوجيه.

المهلة التلقائية التي تم ضبطها على أجهزة التوجيه هي 57 ثانية. هذا هو الحد الأقصى لوقت تنفيذ الخادم الوكيل لواجهة برمجة التطبيقات من وقت استلام طلب واجهة برمجة التطبيقات على Edge إلى أن يتم الرد على الاستجابة، بما في ذلك استجابة الخلفية وجميع السياسات التي يتم تنفيذها. ويمكن إلغاء المهلة التلقائية على أجهزة التوجيه والمضيفين الافتراضيين كما هو موضّح في ضبط مهلة وحدات الإدخال والإخراج على أجهزة التوجيه.

انتهاء المهلة المحددة لمعالجات الرسائل

المهلة الافتراضية التي تم ضبطها في معالجات الرسائل هي 55 ثانية. وهذا هو الحدّ الأقصى للوقت الذي يمكن أن يستغرقه خادم الخلفية لمعالجة الطلب والردّ على معالج الرسائل. يمكن إلغاء المهلة التلقائية على معالجات الرسائل أو ضمن الخادم الوكيل لواجهة برمجة التطبيقات كما هو موضّح في ضبط مهلة وحدات الإدخال والإخراج على معالِجات الرسائل.

إذا أغلق العميل الاتصال بجهاز التوجيه قبل انتهاء مهلة الخادم الوكيل لواجهة برمجة التطبيقات، سيظهر لك خطأ بسبب انتهاء المهلة المحددة للطلب من واجهة برمجة التطبيقات. ويتم تسجيل رمز الحالة 499 Client Closed Connection في جهاز التوجيه لهذه الطلبات، وقد تتم ملاحظته في سجلات مراقبة واجهة برمجة التطبيقات وسجلات وصول NGINX.

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

في Edge، الأسباب النموذجية للخطأ 499 Client Closed Connection هي:

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

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

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

  • مراقبة واجهة برمجة التطبيقات
  • سجلات وصول NGINX

مراقبة واجهة برمجة التطبيقات

لتشخيص الخطأ باستخدام مراقبة واجهة برمجة التطبيقات:

  1. انتقل إلى صفحة تحليل > مراقبة واجهة برمجة التطبيقات > التحقيق.
  2. فلتِر البيانات بحثًا عن 4xx خطأ واختَر الإطار الزمني.
  3. ارسم رمز الحالة مقابل الوقت.
  4. اختَر خلية تحتوي على 499 خطأ كما هو موضّح أدناه:

  5. ستظهر لك المعلومات حول الخطأ 499 في اللوحة اليسرى كما هو موضّح أدناه:

  6. في الجزء الأيسر، انقر على عرض السجلات.

    من نافذة سجلّات الزيارات، اطّلِع على التفاصيل التالية لبعض أخطاء 499:

    • الطلب:يوفر هذا طريقة الطلب وعنوان URI المستخدم لإجراء المكالمات
    • وقت الاستجابة:يوفّر ذلك إجمالي الوقت المنقضي في الطلب.

    ويمكنك أيضًا الحصول على جميع السجلات باستخدام واجهة برمجة التطبيقات الخاصة بمراقبة واجهة برمجة التطبيقات GET log (سجلات GET). على سبيل المثال، من خلال إجراء طلبات بحث في سجلّات org وenv وtimeRange وstatus، ستتمكّن من تنزيل جميع سجلّات المعاملات التي انتهت مهلة العميل فيها.

    بما أنّ ميزة "مراقبة واجهة برمجة التطبيقات" تضبط الخادم الوكيل على - في ما يتعلق بأخطاء HTTP 499، يمكنك استخدام واجهة برمجة التطبيقات (واجهة برمجة التطبيقات للسجلات) للحصول على الخادم الوكيل المرتبط بالمضيف الافتراضي والمسار الافتراضي.

    For example :

    curl "https://apimonitoring.enterprise.apigee.com/logs/apiproxies?org=ORG&env=ENV&select=https://VIRTUAL_HOST/BASEBATH" -H "Authorization: Bearer $TOKEN"
    
  7. راجِع مدة الاستجابة بحثًا عن أخطاء 499 الإضافية وتحقَّق لمعرفة ما إذا كان وقت الاستجابة ثابتًا (مثلاً 30 ثانية) في جميع أخطاء 499.

سجلات وصول NGINX

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

  1. إذا كنت من مستخدمي سحابة إلكترونية خاصة، يمكنك استخدام سجلات وصول NGINX لتحديد المعلومات الأساسية حول أخطاء 499 في HTTP.
  2. تحقَّق من سجلات وصول NGINX:
    /opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log
  3. ابحث عن أي أخطاء 499 خلال مدة معيّنة (إذا كانت المشكلة قد حدثت في الماضي) أو إذا كانت هناك أي طلبات لا تزال يتعذّر معالجتها من خلال 499.
  4. اطّلِع على المعلومات التالية لبعض أخطاء 499:
    • إجمالي وقت الاستجابة
    • عنوان URI للطلب
    • وكيل المستخدم

    نموذج للخطأ 499 من سجل الوصول إلى NGINX:

    2019-08-23T06:50:07+00:00       rrt-03f69eb1091c4a886-c-sy      50.112.119.65:47756
    10.10.53.154:8443       10.001  -       -       499     -       422     0
       GET /v1/products HTTP/1.1        -       okhttp/3.9.1    api.acme.org
    rrt-03f69eb1091c4a886-c-sy-13001-6496714-1
        50.112.119.65   -       -       -       -       -       -       -       -1      -       -       dc-1  router-pod-1
    rt-214-190301-0020137-latest-7d
    36       TLSv1.2 gateway-1     dc-1  acme    prod  https   -
    

    في هذا المثال، نرى المعلومات التالية:

    • إجمالي وقت الاستجابة: 10.001 ثانية يشير هذا الرمز إلى انتهاء مهلة البرنامج بعد 10.001 ثوانٍ.
    • الطلب: GET /v1/products
    • المضيف:api.acme.org
    • وكيل المستخدم:okhttp/3.9.1
  5. تحقَّق لمعرفة ما إذا كان إجمالي وقت الاستجابة ووكيل المستخدم متسقَين في جميع أخطاء 499.

السبب: قام العميل بإغلاق الاتصال فجأة

التشخيص

  1. عند طلب واجهة برمجة تطبيقات من تطبيق صفحة واحدة يتم تشغيله في متصفّح أو تطبيق متوافق مع الأجهزة الجوّالة، سيُلغي المتصفّح الطلب إذا أغلق المستخدم النهائي المتصفّح فجأة أو انتقل إلى صفحة ويب أخرى في علامة التبويب نفسها أو أوقف تحميل الصفحة عن طريق النقر على إيقاف التحميل أو النقر عليه.
  2. وفي هذه الحالة، ستختلف عادةً المعاملات التي تحمل حالة 499 HTTP في وقت معالجة الطلب (مدة الاستجابة) لكل طلب.
  3. يمكنك تحديد ما إذا كان هذا هو السبب من خلال مقارنة مدة الاستجابة والتحقق مما إذا كان مختلفًا لكل خطأ من أخطاء 499 باستخدام سجلات واجهة برمجة التطبيقات أو سجلات وصول NGINX كما هو موضّح في خطوات التشخيص الشائعة.

درجة الدقّة

  1. هذا أمر طبيعي ولا داعي للقلق إذا كانت أخطاء 499 في HTTP تحدث بكميات صغيرة.
  2. إذا كانت المشكلة تحدث غالبًا على مسار عنوان URL نفسه، قد يكون السبب أنّ الخادم الوكيل المحدّد المرتبط بذلك المسار بطيء للغاية وأنّ المستخدمين لا يريدون الانتظار.

    بعد تحديد الخادم الوكيل الذي قد يكون متأثرًا، استخدِم لوحة بيانات تحليل وقت الاستجابة لإجراء المزيد من التحقيقات حول سبب وقت استجابة الخادم الوكيل.

    1. وفي هذه الحالة، حدِّد الخادم الوكيل المتأثر باتّباع الخطوات الواردة في خطوات التشخيص الشائعة.
    2. استخدِم لوحة بيانات تحليل وقت الاستجابة للاطّلاع أكثر على أسباب وقت استجابة الخادم الوكيل وحلّ المشكلة.
    3. إذا تبيّن لك أنّ وقت الاستجابة متوقع للخادم الوكيل المحدَّد، قد يُطلب منك إبلاغ المستخدمين بأنّ هذا الخادم الوكيل سيستغرق بعض الوقت للردّ.

السبب: انتهت مهلة تطبيق العميل.

ويمكن أن يحدث هذا ضمن عدد من السيناريوهات.

  1. من المتوقّع أن يستغرق اكتمال الطلب وقتًا معيّنًا (على سبيل المثال 10 ثوانٍ) في ظل ظروف التشغيل العادية. ومع ذلك، تم ضبط تطبيق العميل بقيمة مهلة غير صحيحة (على سبيل المثال 5 ثوانٍ)، ما يؤدي إلى انتهاء المهلة قبل اكتمال طلب البيانات من واجهة برمجة التطبيقات، ما يؤدي إلى 499. في هذه الحالة، علينا ضبط مهلة العميل على قيمة مناسبة.
  2. يستغرق الخادم المستهدف أو وسيلة الشرح وقتًا أطول من المتوقع. وفي هذه الحالة، تحتاج إلى إصلاح المكوِّن المناسب وضبط قيم المهلة بشكل مناسب.
  3. لم يعد العميل بحاجة إلى الاستجابة، وبالتالي تم إلغاؤه. وقد يحدث ذلك لواجهات برمجة التطبيقات ذات التكرار العالي، مثل الإكمال التلقائي أو الاستطلاعات القصيرة.

التشخيص

مراقبة واجهة برمجة التطبيقات أو سجلات الوصول إلى NGINX

عليك تشخيص الخطأ باستخدام مراقبة واجهة برمجة التطبيقات أو سجلات الوصول إلى NGINX:

  1. راجِع سجلّات مراقبة واجهة برمجة التطبيقات أو سجلّات وصول NGINX لمعاملات HTTP 499 كما هو موضّح في خطوات التشخيص الشائعة.
  2. حدِّد ما إذا كان وقت الاستجابة ثابتًا لجميع أخطاء 499.
  3. إذا كانت الإجابة "نعم"، قد يرجع السبب في ذلك إلى أنّ تطبيق عميل معيّن قد ضبط مهلة ثابتة من جانبه. في حال كان الخادم الوكيل لواجهة برمجة التطبيقات أو الخادم الهدف يستجيب ببطء، ستنتهي مهلة البرنامج قبل انتهاء مهلة الخادم الوكيل، ما يؤدي إلى إنشاء كميات كبيرة من HTTP 499s لمسار معرّف الموارد المنتظم (URI) نفسه. في هذه الحالة، حدِّد وكيل المستخدم من سجلات الوصول إلى NGINX لمساعدتك في تحديد تطبيق العميل المحدّد.
  4. من المحتمل أيضًا أن يكون هناك جهاز لموازنة الحمل أمام Apigee مثل Akamai وF5 وAWS ELB وما إلى ذلك. في حال استخدام Apigee لاستخدام جهاز موازنة حمولة مخصّص، يجب ضبط مهلة الطلب الخاصة بجهاز موازنة التحميل لتكون أكبر من مهلة واجهة برمجة التطبيقات Apigee. تنتهي مهلة جهاز توجيه Apigee تلقائيًا بعد مرور 57 ثانية، لذا من المناسب ضبط مهلة طلب تبلغ 60 ثانية على جهاز موازنة التحميل.

التتبّع

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

إذا كانت المشكلة لا تزال نشطة (أي استمرار حدوث أخطاء 499)، يمكنك اتّباع الخطوات التالية:

  1. فعِّل جلسة التتبُّع لواجهة برمجة التطبيقات المتأثرة في واجهة مستخدم Edge.
  2. إما انتظار حدوث الخطأ أو إذا تم الاتصال بواجهة برمجة التطبيقات، ثم أجرِ بعض طلبات البيانات من واجهة برمجة التطبيقات وأعد إظهار الخطأ.
  3. تحقَّق من الوقت المنقضي في كل مرحلة، ودوِّن المرحلة التي يتم فيها قضاء معظم الوقت.
  4. إذا لاحظت الخطأ بأطول مدة انقضت بعد إحدى المراحل التالية مباشرةً، يعني ذلك أنّ الخادم الخلفي بطيء أو يستغرق وقتًا طويلاً لمعالجة الطلب:
    • تم إرسال الطلب إلى الخادم الهدف.
    • سياسة وسيلة شرح الخدمة

    في ما يلي نموذج لتتبُّع واجهة المستخدم يعرض انتهاء مهلة العبّارة بعد إرسال الطلب إلى الخادم الهدف:

درجة الدقّة

  1. يمكنك الاطّلاع على أفضل الممارسات لضبط مهلة وحدات الإدخال والإخراج لمعرفة قيم المهلة التي يجب ضبطها على المكونات المختلفة التي ينطوي عليها تدفق طلبات واجهة برمجة التطبيقات من خلال Apigee Edge.
  2. احرص على ضبط قيمة مهلة مناسبة في تطبيق العميل وفقًا لأفضل الممارسات.

في حال استمرار المشكلة، انتقِل إلى ضرورة جمع معلومات التشخيص .

ضرورة جمع معلومات التشخيص

في حال استمرار المشكلة، يُرجى جمع معلومات التشخيص التالية، ثم التواصل مع فريق دعم Apigee Edge.

إذا كنت من مستخدمي Public Cloud، يُرجى تقديم المعلومات التالية:

  • اسم المؤسسة
  • اسم البيئة
  • اسم الخادم الوكيل لواجهة برمجة التطبيقات
  • أكمِل الأمر curl المستخدَم لإعادة إظهار خطأ انتهاء المهلة.
  • ملف تتبُّع طلبات واجهة برمجة التطبيقات التي ترى أخطاء انتهاء مهلة العميل لها

إذا كنت أحد مستخدمي السحابة الإلكترونية الخاصة، يُرجى تقديم المعلومات التالية:

  • رسالة الخطأ الكاملة التي تم رصدها للطلبات التي تعذّر تنفيذها
  • اسم البيئة
  • حزمة الخادم الوكيل لواجهة برمجة التطبيقات
  • ملف تتبُّع طلبات واجهة برمجة التطبيقات التي ترى أخطاء انتهاء مهلة العميل لها
  • سجلات وصول NGINX (/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log)
  • سجلّات نظام "معالج الرسائل" (/opt/apigee/var/log/edge-message-processor/logs/system.log)