أنت تعرض مستندات Apigee Edge.
انتقل إلى
مستندات Apigee X. معلومات
المشكلة
يحصل تطبيق العميل على حالة استجابة HTTP 503 مع الرسالة.
Service Unavailable بعد استدعاء خادم وكيل لواجهة برمجة التطبيقات.
رسالة الخطأ
يحصل تطبيق العميل على رمز الاستجابة التالي:
HTTP/1.1 503 Service Unavailable
بالإضافة إلى ذلك، قد تلاحظ رسالة الخطأ التالية:
{
"fault": {
"faultstring": "The Service is temporarily unavailable",
"detail": {
"errorcode": "messaging.adaptors.http.flow.ServiceUnavailable"
}
}
}الأسباب المحتملة
| السبب | الوصف | إرشادات استكشاف الأخطاء وإصلاحها التي تنطبق على |
|---|---|---|
| الخادم المستهدف يغلق الاتصال قبل أوانه | ينهي الخادم المستهدف الاتصال قبل أوانه بينما لا يزال معالج الرسائل لا يزال إرسال حمولة الطلب. | مستخدمو Edge Public و Private Cloud |
خطوات التشخيص الشائعة
تحديد رقم تعريف الرسالة للطلب الذي تعذّر إكماله
أداة التتبُّع
لتحديد معرّف الرسالة للطلب الذي تعذّر إكماله باستخدام أداة التتبُّع:
- إذا كانت المشكلة لا تزال قائمة، ففعِّل جلسة التتبّع لواجهة برمجة التطبيقات المتأثرة.
- إجراء طلب بيانات من واجهة برمجة التطبيقات وإعادة إظهار المشكلة -
503 Service Unavailableمع رمز الخطأmessaging.adaptors.http.flow.ServiceUnavailable. - اختَر أحد الطلبات التي تعذّر تنفيذها.
- انتقِل إلى مرحلة AX، وحدِّد رقم تعريف الرسالة.
(
X-Apigee.Message-ID) من الطلب من خلال التمرير لأسفل في قسم تفاصيل المرحلة كما هو موضح في الشكل التالي.
سجلات وصول NGINX
لتحديد رقم تعريف الرسالة للطلب الذي تعذّر تنفيذه باستخدام سجلات الوصول إلى NGINX:
يمكنك أيضًا الرجوع إلى سجلّات NGINX Access لتحديد معرِّف الرسالة لأخطاء 503.
يفيد ذلك بشكل خاص إذا حدثت المشكلة في الماضي أو إذا كانت المشكلة متكررة.
ولا يمكنك تسجيل آثار الأنشطة في واجهة المستخدم. اتّبِع الخطوات التالية لتحديد هذه المعلومات من سجلات وصول NGINX:
- تحقَّق من سجلات وصول NGINX: (
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log) - ابحث لمعرفة ما إذا كانت هناك أي أخطاء
503للخادم الوكيل المحدّد لواجهة برمجة التطبيقات خلال مدة محدّدة. (إذا حدثت المشكلة في الماضي) أو إذا كانت هناك أي طلبات لا تزال يتعذّر تنفيذها مع503. - إذا كان هناك أي أخطاء
503في X-Apigee-Error-code message.adaptors.http.flow.ServiceUnavailable، دوِّن معرّف الرسالة لطلب واحد أو أكثر من هذه الطلبات كما هو موضّح في المثال التالي:نموذج إدخال يعرض الخطأ
503
السبب: الخادم المستهدف يغلق الاتصال قبل أوانه
التشخيص
- إذا كنت مستخدمًا في السحابة الإلكترونية العامة أو السحابة الإلكترونية الخاصة:
- استخدام أداة التتبُّع (كما هو موضّح في خطوات التشخيص الشائعة)
وتأكّد من أنّ لديك كلا الخيارين التاليين في جزء البيانات المسجَّلة في "إحصاءات Google":
- X-Apigee.fault-code:
messaging.adaptors.http.flow.ServiceUnavailable - X-Apigee.fault-source:
target

- X-Apigee.fault-code:
- استخدام أداة التتبُّع (كما هو موضّح في خطوات التشخيص الشائعة)
وتحقَّق من أنّ لديك المجموعتَين التاليتَين في جزء الخطأ مباشرةً بعد
السمة الولاية
TARGET_REQ_FLOW:- error.class:
com.apigee.errors.http.server.ServiceUnavailableException - error.cause:
Broken pipe

- error.class:
- انتقِل إلى استخدام tcpdump لمزيد من التحقيق.
- استخدام أداة التتبُّع (كما هو موضّح في خطوات التشخيص الشائعة)
وتأكّد من أنّ لديك كلا الخيارين التاليين في جزء البيانات المسجَّلة في "إحصاءات Google":
- إذا كنت أحد مستخدمي السحابة الإلكترونية الخاصة:
- حدِّد رقم تعريف الرسالة للطلب الذي تعذّر تنفيذه.
- البحث عن معرِّف الرسالة في سجل معالج الرسائل
(
/opt/apigee/var/log/edge-message-processor/logs/system.log). - سيظهر لك أحد الاستثناءات التالية:
الاستثناء 1: java.io.IOException: حدث عطل في القناة أثناء الكتابة في القناة ClientOutputChannel
2021-01-30 15:31:14,693 org:anotherorg env:prod api:myproxy rev:1 messageid:myorg-opdk-test-1-30312-13747-1 NIOThread@1 INFO HTTP.SERVICE - ExceptionHandler.handleException() : Exception java.io.IOException: Broken pipe occurred while writing to channel ClientOutputChannel(ClientChannel[Connected: Remote:IP:PORT Local:0.0.0.0:42828]@8380 useCount=1 bytesRead=0 bytesWritten=76295 age=2012ms lastIO=2ms isOpen=false)
أو
الاستثناء 2: onExceptionWrite استثناء: {}
java.io.IOException: ممر معطّل2021-01-31 15:29:37,438 org:anotherorg env:prod api:503-test rev:1 messageid:leonyoung-opdk-test-1-18604-13978-1 NIOThread@0 ERROR HTTP.CLIENT - HTTPClient$Context$2.onException() : ClientChannel[Connected: Remote:IP:PORT Local:0.0.0.0:57880]@8569 useCount=1 bytesRead=0 bytesWritten=76295 age=3180ms lastIO=2 ms isOpen=false.onExceptionWrite exception: {} java.io.IOException: Broken pipe
- يشير كلا هذين الاستثناءين إلى أنه بينما كان معالج الرسائل لا يزال يكتب
لطلب حمولة البيانات إلى خادم الخلفية، تم إغلاق الاتصال قبل أوانه من قبل
خادم الخلفية. وبالتالي، يطرح معالج الرسائل الاستثناء
java.io.IOException: Broken pipe. - تشير العلامة
Remote:IP:PORTإلى خادم الخلفية الذي تم التعامل معه. عنوان IP ورقم المنفذ. - تشير السمة
bytesWritten=76295في رسالة الخطأ أعلاه إلى أن معالج الرسائل أرسل حمولة بيانات تبلغ76295بايت إلى الخلفية الخادم عندما تم إغلاق الاتصال قبل أوانه. - تشير السمة
bytesRead=0إلى أنّ معالج الرسائل لم تلقى أي بيانات (استجابة) من خادم الخلفية. - للتحقيق أكثر في هذه المشكلة، يُرجى جمع
tcpdumpإما في الخلفية. أو معالج الرسائل وتحليلها كما هو موضح أدناه.
استخدام tcpdump
-
يمكنك التقاط صورة
tcpdumpإما على خادم الخلفية أو على معالج الرسائل باستخدام الأوامر التالية:أمر لجمع
tcpdumpعلى خادم الخلفية:tcpdump -i any -s 0 host MP_IP_ADDRESS -w FILE_NAME
أمر لجمع
tcpdumpعلى "معالج الرسائل":tcpdump -i any -s 0 host BACKEND_HOSTNAME -w FILE_NAME
- تحليل
tcpdumpالتي تم التقاطها:نموذج لمخرجات tcpdump (التي تم جمعها في معالج الرسائل):

في
tcpdumpأعلاه، يمكنك الاطّلاع على ما يلي:- في الحزمة
4، أرسل معالج الرسائل طلبPOSTإلى خادم الخلفية. - الحزمة
5و8و9و1011، واصل معالج الرسائل إرسال حمولة الطلب إلى خادم الخلفية. - في الحزمة
6و7، استجاب خادم الخلفية بـACKلجزء من حمولة الطلب التي تم استلامها من "معالج الرسائل" - ومع ذلك، في الحزمة
12، بدلاً من الاستجابة باستخدامACKلحزم بيانات التطبيق التي تم استلامها وبالتالي الاستجابة المستخدم، يستجيب خادم الخلفية بدلاً من ذلك بعلامةFIN ACKالتي تبدأ بإغلاق الاتصال. - يشير ذلك بوضوح إلى أنّ خادم الخلفية يغلق الاتصال قبل أوانه بينما كان معالج الرسائل لا يزال يرسل حمولة الطلب.
- يؤدي هذا إلى تسجيل معالج الرسائل لـ
IOException: Broken Pipeوإرجاع503إلى العميل
- في الحزمة
الدقة
- تعاوَن مع فريقَي التطبيق والشبكات لديك أو كليهما لتحليل الأخطاء مشكلة انقطاع الاتصال المبكر على جانب خادم الخلفية.
- التأكد من عدم انتهاء مهلة تطبيق خادم الخلفية أو إعادة تعيين الاتصال قبل استلام حمولة الطلب بالكامل.
- إذا كان لديك أي جهاز شبكة وسيط أو طبقة بين Apigee وخادم الخلفية، ومن ثم التأكد من عدم انتهاء المهلة قبل استلام حمولة الطلب بالكامل.
في حال استمرار المشكلة، انتقِل إلى المقالة ضرورة جمع معلومات التشخيص.
يجب جمع معلومات التشخيص
في حال استمرار المشكلة حتى بعد اتّباع التعليمات أعلاه، يُرجى جمع ما يلي معلومات التشخيص، ثم التواصل مع فريق دعم Apigee Edge:
إذا كنت من مستخدمي Cloud Public، يُرجى تقديم المعلومات التالية:
- اسم المؤسسة
- اسم البيئة
- اسم الخادم الوكيل لواجهة برمجة التطبيقات
- إكمال الأمر
curlلإعادة إظهار الخطأ503 - ملف التتبُّع الذي يحتوي على الطلب مع الخطأ
503 Service Unavailable - إذا لم تظهر أخطاء
503في الوقت الحالي، قدِّم الفترة الزمنية معلومات المنطقة الزمنية عند حدوث503خطأ في الماضي.
إذا كنت مستخدمًا للسحابة الإلكترونية الخاصة، قدِّم المعلومات التالية:
- ظهور رسالة خطأ كاملة للطلبات التي تعذّر تنفيذها
- اسم المؤسسة والبيئة واسم الخادم الوكيل لواجهة برمجة التطبيقات التي تراقبها
خطآن (
503) - حزمة الخادم الوكيل لواجهة برمجة التطبيقات
- ملف التتبُّع الذي يحتوي على الطلبات التي تتضمّن خطأ واحد (
503 Service Unavailable) - سجلّات وصول NGINX
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log - سجلات معالج الرسائل
/opt/apigee/var/log/edge-message-processor/logs/system.log - الفترة الزمنية التي تتضمن معلومات المنطقة الزمنية وقت حدوث أخطاء
503 - تم جمع
Tcpdumpsعلى معالِجات معالجة الرسائل وخادم الخلفية عند حدث خطأ