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

أنت الآن بصدد الاطّلاع على مستندات Apigee Edge.
انتقِل إلى مستندات Apigee X.
info

المشكلة

يتلقّى تطبيق العميل خطأ انتهاء المهلة لطلبات البيانات من واجهة برمجة التطبيقات أو يتم إنهاء الطلب فجأة أثناء تنفيذه على 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 ما يلي:

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

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

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

  • API Monitoring
  • سجلّات الوصول إلى NGINX

API Monitoring

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

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

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

  6. في اللوحة اليسرى، انقر على عرض السجلات.

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

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

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

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

    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 لتحديد المعلومات الأساسية حول أخطاء HTTP 499.
  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. هذا أمر طبيعي ولا يستدعي القلق عادةً إذا كانت أخطاء HTTP 499 تحدث بأعداد قليلة.
  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 Router بعد 57 ثانية، لذا من المناسب ضبط مهلة الطلب على 60 ثانية في موازن التحميل.

التتبّع

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

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

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

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

الدقة

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

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

يجب جمع معلومات التشخيص

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

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

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

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

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