يتم الآن عرض مستندات Apigee Edge.
انتقِل إلى مستندات
Apigee X. المعلومات
المشكلة
يتلقّى تطبيق العميل رمز حالة HTTP لـ 502 Bad Gateway
مع الرمز ECONNRESET
كاستجابة لطلبات واجهة برمجة التطبيقات في Edge Microgateway.
رسالة الخطأ
سيرى العميل رمز الاستجابة التالي:
HTTP/1.1 502 Bad Gateway
سيتضمن الرد رسالة الخطأ التالية:
{"message":"socket hang up","code":"ECONNRESET"}
الأسباب المحتملة
السبب | الوصف | تعليمات تحديد المشاكل وحلّها السارية على |
---|---|---|
مهلة البقاء على قيد الحياة التي تم ضبطها بشكل غير صحيح | تم إعداد مهلات البقاء على قيد الحياة بشكل غير صحيح بين Edge Microgateway والخادم الهدف. | مستخدمو Edge العام والخاص على السحابة الإلكترونية |
يغلق الخادم المستهدف الاتصال قبل أوانه | يغلق الخادم الهدف الاتصال مبكرًا بينما ترسل تقنية Edge Microgateway حمولة الطلب. | مستخدمو Edge العام والخاص على السحابة الإلكترونية |
خطوات التشخيص الشائعة
- تحقَّق من سجلات Edge Microgateway:
/var/tmp/edgemicro-`hostname`-*.log
- ابحث عن أي أخطاء
502
في الرمزECONNRESET
خلال مدة معيّنة (إذا كانت المشكلة قد حدثت في السابق) أو ما إذا كانت هناك أي طلبات لا تزال يتعذّر إجراؤها مع502
.2021-06-23T03:52:24.110Z [error][0:8000][3][myorg][test] [emg_badtarget/flakey/hangup][][][6b089a00-d3d6-11eb-95aa-911f1ee6c684] [microgateway-core][][GET][502][socket hang up][ECONNRESET][]
- إذا تم ضبط مستوى التسجيل على
warn
أوinfo
، ستظهر أيضًا رسالة[warn]
تتضمّن اسم المضيف والمنفذ للخادم الهدف في العنصر الثاني. في هذا المثال، تمثّل هذه السمةX.X.X.X:8080
، ويمكن استخدامها لاحقًا لتصويرtcpdump
.2021-06-23T03:52:24.109Z [warn][X.X.X.X:8080][3][myorg][test][emg_badtarget/flakey/hangup] [][][6b089a00-d3d6-11eb-95aa-911f1ee6c684][plugins-middleware] [targetRequest error][GET][][socket hang up][ECONNRESET][395]
- يشير رمز الخطأ
[socket hang up][ECONNRESET]
إلى أنّ الخادم الهدف قد أغلق الاتصال بـ Edge Microgateway. ويمكن البحث عن هذا الاسم في السجلّات لتحديد عدد مرات حدوثه.
السبب: مهلة الحفاظ على الاتصال التي تم إعدادها بشكل غير صحيح
التشخيص
- اتّبِع الخطوات الواردة في خطوات التشخيص الشائعة وتأكّد من ظهور
الخطأ
[socket hang up][ECONNRESET]
. إذا كانت الإجابة نعم، يمكنك إجراء المزيد من التحقيق بمساعدة
tcpdump
كما هو موضّح أدناه:
استخدام الأداة tcpdump
- التقِط
tcpdump
بين Edge Microgateway وخادم الخلفية على نظام التشغيل المضيف Edge Microgateway باستخدام الأمر التالي:tcpdump -i any -s 0 host TARGET_SERVER_HOSTNAME -w FILENAME.pcap
- تحليل
tcpdump
التي تم الحصول عليها:نموذج لإخراج tcpdump: ( عرض صورة أكبر)
في النموذج أعلاه
tcpdump
، يمكنك الاطّلاع على ما يلي:- في الحزمة 250288، يرسل العميل طلب
POST
. - في الحزمة 250371، يستجيب الخادم بـ
200 OK
. - في الحزمة 250559، يرسل العميل
ACK.
- في الحزمة 250560، يُرسِل الخادم رسالة
Continuation
. - في الحزمة 250561، يرسل العميل
ACK.
- في الحزمة 262436، يرسل الخادم
FIN, ACK
إلى العميل لبدء إغلاق الاتصال. يُرجى العلم أنّ ذلك يبعد خمس ثوانٍ تقريبًا عن الحزمة السابقة (250561). - في الحزمة 262441، يُرسِل العميل طلب
POST
آخر. ومع ذلك، يتعذّر تنفيذ هذا الإجراء لأنّ الخادم بدأ بالفعل إغلاق الاتصال. يستجيب باستخدامRST
في الحزمة 262441.
تمت إعادة استخدام الاتصال نفسه بنجاح مرة على الأقل في هذا المثال، ولكن في الطلب الأخير، يبدأ الخادم إغلاق الاتصال بعد خمس ثوانٍ من الخمول، ويحدث ذلك في الوقت نفسه الذي أرسل فيه العميل طلبًا جديدًا. يشير ذلك إلى أنّ مهلة التحقّق من الاتصال بخادم الخلفية تكون على الأرجح أقصر أو مساوية للقيمة التي تم ضبطها في البرنامج. للتحقق من ذلك، يُرجى الاطّلاع على مقارنة مهلة البقاء على قيد الحياة على Edge Microgateway وخادم الخلفية.
- في الحزمة 250288، يرسل العميل طلب
مقارنة مهلات التحقّق من الاتصال
- لا يتضمّن Edge Microgateway خاصية محدَّدة لمهلة التحقّق من الاتصال. ويتم تحديده من خلال نظام التشغيل الذي يتم تشغيله عليه. ومن الأمثلة الشائعة حاويات Windows وLinux وDucker.
- من المحتمل أن يتم تخصيص هذا في نظام التشغيل. راجِع مشرف النظام. وفقًا للإعدادات التلقائية، تكون مهلة التحقّق من الصحة التلقائية تبلغ ساعتين في أنظمة التشغيل Linux.
- بعد ذلك، تحقق من خاصية مهلة البقاء على قيد الحياة التي تم ضبطها على خادم الخلفية. ولنفترض أنّه تم ضبط خادم الخلفية بقيمة 10 ثوانٍ.
- إذا وجدت أنّ قيمة مهلة التحقّق من الاتصال على نظام التشغيل
أعلى من قيمة خاصية مهلة التحقّق من الاتصال على الخادم الخلفية كما في
المثال أعلاه، هذا هو سبب أخطاء
502
.
درجة الدقّة
تأكَّد من أنّ قيمة خاصية مهلة البقاء على قيد الحياة تكون دائمًا أقل على نظام التشغيل الذي يعمل فيه برنامج Edge Microgateway مقارنةً بذاتها على خادم الخلفية.
- تحديد القيمة المضبوطة لمهلة البقاء على قيد الحياة على خادم الخلفية.
- اضبط قيمة مناسبة لخاصية مهلة التحقّق من الاتصال في نظام التشغيل في نظام التشغيل، بحيث تكون قيمة مهلة التحقّق من الاتصال أقل من القيمة التي تم ضبطها على الخادم الخلفي، وذلك باتّباع الخطوات التي تنطبق على نظام التشغيل الذي تستخدمه.
أفضل الممارسات
ننصح بشدة بأن تكون دائمًا مكونات المراحل المتقدمة في عملية التسويق أصغر من الحدّ الأدنى لمهلة البقاء على قيد الحياة
مقارنةً بالخوادم الرئيسية لتجنُّب حدوث هذه الأنواع من شروط السباق وأخطاء 502
. يجب أن تكون كل قفزة عند البث أقل من كل قفزة عند البث المباشر. في Edge
Microgateway، من الممارسات الجيدة استخدام الإرشادات التالية:
يجب أن تكون مهلة البقاء على قيد الحياة في تطبيق العميل أو جهاز موازنة التحميل أقل من مهلة الحفاظ على قيد الحياة في Edge Microgateway.
لضبط مهلة البقاء على قيد الحياة على Edge Microgateway، أضِف القيمة
keep_alive_timeout
إلى ملف~/.edgemicro/org-env-config.yaml
.edgemicro: keep_alive_timeout: 65000
- يجب أن تكون مهلة التحقّق من حالة النشاط في نظام تشغيل Edge Microgateway أقل من مهلة التحقّق من الاتصال بالخادم الهدف.
- وإذا كانت هناك أي قفزات أخرى أمام Edge Microgateway أو خلفه، يجب تطبيق القاعدة نفسها. يجب أن تترك على عاتق العميل دائمًا مسؤولية إغلاق الاتصال مع مصدر البيانات.
السبب: يغلق الخادم المستهدف الاتصال قبل أوانه
التشخيص
- اتّبِع الخطوات الموضّحة في خطوات التشخيص الشائعة وتحقَّق من ظهور
الخطأ
[socket hang up][ECONNRESET]
. - إذا كانت الإجابة "نعم"، يمكنك إجراء المزيد من التحقيق بمساعدة
tcpdump
كما هو موضّح أدناه.تشير رسالة الخطأ
[targetRequest error][GET][][socket hang up][ECONNRESET]
في المثال أعلاه إلى حدوث هذا الخطأ أثناء إرسال Edge Microgateway للطلب إلى خادم الخلفية (الهدف). أي أنّ Edge Microgateway قد أرسل طلب واجهة برمجة التطبيقات إلى خادم الخلفية وكان ينتظر الاستجابة. مع ذلك، أنهى خادم الخلفية الاتصال بشكل مفاجئ قبل أن تتلقّى Edge Microgateway استجابة. - تحقَّق من سجلّات الخادم الخلفية لمعرفة ما إذا كانت هناك أي أخطاء أو معلومات من الممكن أن تؤدي إلى إنهاء الاتصال على نحو مفاجئ في خادم الخلفية. إذا عثرت على أي أخطاء أو معلومات، انتقِل إلى الحلّ وأصلِح المشكلة بشكل مناسب في خادم الخلفية.
- إذا لم تعثر على أي أخطاء أو معلومات في خادم الخلفية، اجمع
إخراج
tcpdump
على خادم Edge Microgateway:tcpdump -i any -s 0 host TARGET_SERVER_HOSTNAME -w FILENAME.pcap
- تحليل
tcpdump
التي تم الحصول عليها:نموذج لإخراج tcpdump: ( عرض صورة أكبر)
في النموذج أعلاه
tcpdump
، يمكنك الاطّلاع على ما يلي:- في الحزمة 4، أرسل Edge Microgateway طلب
GET
إلى الخادم الهدف. - في الحزمة 5، استجاب الخادم الهدف بـ
ACK
للإقرار بالطلب. - مع ذلك، في الحزمة 6، بدلاً من الاستجابة بحمولة استجابة، يرسل الخادم الهدف
FIN, ACK
لبدء إغلاق الاتصال. - في الحِزم 7 فصاعدًا، يتم إغلاق الاتصال بشكل متبادل. بما أنّه تم إغلاق الاتصال قبل إرسال الاستجابة، سيعرض Edge Microgateway خطأ HTTP
502
مرة أخرى إلى العميل. - ملاحظة: يتوافق الطابع الزمني للحزمة 8،
2021-06-23T03:52:24.110Z
مع الطابع الزمني الذي تم تسجيل الخطأ عنده في سجلّات Edge Microgateway. ويمكن غالبًا استخدام الطوابع الزمنية في ملفات السجلّ وفيtcpdump
لربط الأخطاء بالحِزم الفعلية.
درجة الدقّة
أصلِح المشكلة على الخادم الخلفي بشكلٍ مناسب.
إذا استمرت المشكلة وكنت بحاجة إلى مساعدة في تحديد المشاكل وحلّها
502 Bad Gateway Error
أو إذا كنت تشك في أنّها مشكلة في Edge Microgateway، انتقِل إلى ضرورة جمع معلومات التشخيص.ضرورة جمع معلومات التشخيص
في حال استمرار المشكلة حتى بعد اتّباع التعليمات الواردة أعلاه، يمكنك جمع معلومات التشخيص التالية، ثم التواصل مع فريق دعم Apigee Edge:
- ملفات السجلّ: المجلد التلقائي هو
/var/tmp
ولكن قد يتم تجاهله في ملفconfig.yaml
الرئيسي (logging > dir parameter
). ويُنصح بتغييرlog > level
إلىinfo
قبل تقديم ملفات السجلّ إلى فريق دعم Apigee. - ملف الإعدادات: تتوفّر الإعدادات الرئيسية لتطبيق Edge Microgateway في ملف
YAML في مجلد Edge Microgateway التلقائي،
$HOME/.edgemicro
. يتوفر ملف إعداد تلقائي يُسمىdefault.yaml
، ثم يتوفر ملف واحد لكل بيئةORG-ENV-config.yaml
. يُرجى تحميل هذا الملف بالكامل للمنظمة والبيئة المتأثرة.
- في الحزمة 4، أرسل Edge Microgateway طلب